SECCION MANUALES 10 PAGINAS A4 TIMES NEW ROMAN 14 FORMATO DOC,RTF, TXT,WD1,ACI * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *MATERIAL INFORMATIVO * * * * * * Escrito por Flavio Stroppi * * para el LUGCOS * * el 03/03/01 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *LA INFORMACION DEBE SER LIBRE * FORMATEO DE MEDIOS DE ALMACENAJE DE DATOS El formateo es el proceso necesario de preparacion del medio antes de empezar a guardar datos en forma lógica en el mismo. En efecto,los datos se deben ordenar en una forma lógica para que,llegado el momento de recuperarlos ,se lo pueda hacer sin perder información. En la operación de formateo se deben tener en cuenta una serie de factores tanto de organización de la información como inherentes al hardware utilizado. La densidad de la información almacenada depende de este último factor porque cuanto mas preciso sea el instrumento de lectura / escritura tanto mas información podré colocar en el mismo espacio físico. En el ordenamiento de la información para su almacenaje se colocan datos extras generalmente al principio del paquete ,datos llamados ¨de cabecera¨ donde se indica la posición de la información en si en el medio y tambien las técnicas de lectura/escritura a utilizar junto los parámetros físicos del medio(longitud de dato ,sectores ,separación,sincronismo,etc) La forma en que se escriben estos datos,como así tambien la cantidad de bytes que los componen ,estan determinas en forma totalmente arbitraria y agrupadas en un conjunto de normas denominadas standard para escritura/lectura de disco que son ,la mayoría,adaptaciones mas o menos elaboradas de las normas desarrolladas por los creadores de los primeros sistemas operativos y dispositivos de almacenaje. Luego los fabricantes de hardware fueron puliendo y adaptando estos principios a sus productos,surgiendo normas estandard ¨de compromiso¨ ya que la tecnología existente actualmente permite almacenar mucha mas información en el dispositivo que la que almacena usando las normas existentes. Si bien cuando uno modifica la forma en que graba y recupera la informacion esta ´sacando de norma¨ al sistema y aislandolo de el resto en cuanto a lo que respecta compartir información tambie está optimizando lo existente para un funcionamiento mas eficiente,y a veces sobretodo en sistemas grandes y susceptibles de ser invadidos,consiguiendo un factor de seguridad extra ya que un controlador de floppy modificado para que lea solo los discos escritos en ese sistema no podrá ni leer ni escribir un disco en la forma standard por lo que se cerraría una via de entrada de virus y de salida de información no autorizada. En efecto todo disco escrito que se saque de la empresa no podría ser leido por máquinas comunes que no dispongan de la rutina especial de descifrado,arrojando un error de tipo ¨medio no válido¨ que haría creer en un daño en el disco usado para hurtar la información. Como a los efectos operativos la disquetera no difiere en absoluto de las usadas en las normas standard(es la misma y los discos tambien) ,manteniendo la modificación en secreto e instalando a la salida de la empresa marcos de puerta con carteles del tipo ¨Destruye disketes¨ por donde saldrán los empleados se consigue una protección muy efectiva contra robos de información y ataques al soft interno por parte de empleados poco escrupulosos. El formateo se realiza preparando el disco dividiendolo en una determinada cantidad de sectores accesibles individualmente y que contendran un número determinado de bytes de datos que se escribirán y leerán en bloque. Cuanto mas pequeños sean estos bloques,mas fácil será el acceso a un determinado byte de datos,pero como es necesario almacenar los datos para identificar a cada uno de estos bloques y estos datos ocupan espacio ,cuanto mas chicos sean los bloques menos podremos poner en el disco. Esto hace que se deba elegir entre facilidad de acceso o cantidad de datos(cuanto mas rápido el acceso menos datos tendré ). Para formatear un disco se puede usar una función de la BIOS que permite formatear una pista entera por vez:se encuentra en la interrupción 13H y es la número 5,debiendose aportar los siguientes datos: AH = 5 (función ) AL = Número de sectores por pista CH =Número de pistas DH = Número de cabeza DL = Número de drive ES:BX = Dirección de bufer donde se encuentran los datos de los identificadores de cada sector. Son 4 bites por sector a saber: C = Nro de pista o cilindro H = Nro de cara o cabeza R = Nro de registro o sector N= numero de bytes por sector ( 0 = 128 bytes ,1 = 256 bites, 2 = 512 bytes, 3 = 1024 bytes ,4 = 2048 bytes y asi sucesivamente) Se deben colocar en el bufer tantos grupos de 4 bytes como grupos de sectores se hayan especificado en AL Los sectores se graban uno a continuación del otro asociandoseles los bytes identificadores segun se van encontrando en el bufer . Aparte el controlador de disco necesita saber una serie de datos localizados en la tabla de parámetros base. Estos son valores físicos del dispositivo como el tiempo de carga y descarga,tiempo de arranque del motor ,de estabilizacion de las rpm y de parada,longitud del espacio entre sectores (GAP),la longitud de los datos (espacio ocupado por los bytes). Todos estos datos son modificables con lo que tendremos una gran cantidad de valores a elección para realizar el proceso de formateo pudiendo poner mas o menos datos en el disco. Sin olvidar que todo valor que se aparte de la norma estandard hará al medio de almacenaje solo legible por nuestro sistema y no por los demás. Si el fin que se persigue,ademas de guardar mas datos es salvanguardarlos de miradas extrañas esta es una buena medida(el medio formateado con valores de sectores cambiados provocará un error de lectura del tipo ¨sector no se encontró ;medio no válido¨) El formato típico de un disco de 5 1/4 doble densidad es (a modo de ejemplo;mayores y completos datos pueden encontrarse en los manuales de los dispositivos de almacenaje y en las WEB de los fabricantes) en DOS : Sectores por pista : 9 bytes por sector : 512 RUTINA EN TURBO C Se puede usar una función llamada biosdisk con los argumentos que deberian tomar los registros cuando se llame a INT 13H. biosdisk ( int /DL/ int /DH/ int /CH/ int /CL/ int /AL/ char *(zona de memoria apuntada por ES:BX) ) define leer_sector(nd,nh,nt,ns,nss,buf) biosdisk(2,nd,nh,nt,ns,nss,buf ) define write_sector(nd,nh,nt,ns,nss,buf) biosdisk(3,nd,nh,nt,ns,nss,buf) define format_track(nd,nh,nt,nss,buf) biosdisk(5,nd,nh,nt,1,nss,buf) etcetera..... -.- (mas información en el manual de Turbo C;esto no es un curso de programación ; es tan solo un poco de información, para ¨saber pa´nde rumbear....¨ ) -.- Para ocultar sectores de modo que el DOS no los reconozca se pueden usar diversas técnicas. La mas utilizada consiste en asignar a uno de los sectores un número superior al número máximo de sectores de la pista:en este caso se rellena la tabla de datos de los sectores con valores estandar y se modifica el valor de R del identificador de uno de los sectores. Otra forma es introducir uno o varios sectores con el tamaño cambiado lo que hará que el dos devuelva errores en la lectura . En este caso se modifica la tabla de datos del sector,teniendo en cuenta que el número de bytes no debe sobrepasar la capacidad total de la pista,por lo que el valor debe estar por debajo del valor estandard (4608 bytes en FD de 5 1/4). Tambien se debe tener presente que el tamaño del sector es un número múltiplo de 128. Una tercer variante es agregar sectores :El número máximo de bytes a grabar en una pista es fijo y este espacio es compartido por la información en sí y los datos utilitarios(,forma del formateo ,sincronismo,espacio de separación entre sectores (GAP),etc). Para agregar un sector mas hay que disminuir el espacio ocupado por el resto de la información (reduciendo el número de bytes) o bien reduciendo el espacio entre sectores(GAP). El espacio de separación entre sectores (GAP) se deja como margen de seguridad para evitar que estos se solapen entre si y ocupan un espacio importante en la capacidad total del medio de almacenaje. Ademas de este espacio tambien se agrega otro entre la cabecera y los datos reales . Estos espacios de seguridad ocupan aproximadamente un 25% del espacio total disponible . La longitud del GAP está especificada en la tabla de parámetros con dos valores uno el GTL (maxima longitud posible del GAP) y DTL(longitud de los datos). Estos valores son 40H y 0FFH ;En lectura y escritura se usa un valor menor para poder comenzar a leer antes de comience la información del sector;este valor es 2AH. Como el espacio ocupado por cada sector es la suma de GTL y DTL tendremos un espacio total de 13FH(319) lo que en total para los nueve sectores hace un valor de 2871. Si queremos introducir un sector mas deberemos repartir este último valor entre todos ;lo que daría un valor de de 11FH(287) para cada sector con lo que podremos reducir el GAP hasta 20H.En lectura se puede reducir un poco mas hasta 16H. Al reducir el GAP el sistema se hace mas sensible a las variaciones de velocidad de los discos por lo que se aumenta el riesgo de solapar datos. (En las máquinas modernas el factor de impresición ha sido muy mejorado por lo que no deberemos preocuparnos mayormente por este problema). Una tabla de parametros de disco standard es como la que sigue (Válida para floppys de 5 1/4 y DD ,ya obsoletos,pero la técnica es la misma para los otros dispositivos tanto flexibles como rígidos) La tabla de parámetros del disco es : BYTE USO 0 tiempo de paso entre pistas y tiempo de descarga de la cabeza 1 Tiempo de carga de la cabeza y modo DMA 2 Tiempo de espera para el motor 3 Tamaño de los sectores (1=128 2=256,etc) 4 Número del último sector 5 Largo GAP lectura/escritura 6 Longitud de datos 7 Longitud del GAP para operaciones de formateo 8 Valor del dato a almacenar 9 Tiempo de asentamiento de la cabeza 10 Tiempo de arranque del motor Como se desprende de observar la tabla anterior ,los únicos bytes a modificar son los número 5 y 7 Con lo que quedaría así: tabla_disco db OCFH db 2 db 25H db 2 db 10 (el valor en DOS es 9 para 5 1/4 y DD) db 16H(el valor DOS es 2AH) db 0FFH db 20H(el valor DOS es 40H) db 15 db 4 Los valores modificados de la tabla original son los mostrados en negrita Si tenemos en cuenta todos los cálculos anteriores nos resulta una longitud de datos de 0CFH(con un GAP de 40H) (207) si 0FFH =255 y equivale a 512 bytes entonces CFH equivaldrá a 414 bytes . Se puede especificar este tamaño pero solo si accedemos directamente al controlador FDH(en la operación de formateo habrá que especificar un valor de N = = y DTL = 414) Pero para poder usar las interrupciones de la bios deberemos buscar un valor mas estandard;el valor mas próximo es de 256 bytes por sector. Si escribieramos la totalidad de la pista podríamos poner 6250 bytes,si en DOS usamos 9 sectores tendremos 694 bytes para GAP,cabecera y datos. Si restamos los 512 bytes que usaremos de datos nos queda una diferencia de 182 bytes usados por el GAP y la cabecera. Por cada sector que agreguemos deberemos sumar estos 182 bytes al número de bytes de datos . Si añadimos un solo sector de 512 bytes podremos repartir los 694 bytes en 4 sectores descontandole a cada uno 173 con lo que nos quedarán 339 bytes . Para que quede un valor standard deberemos descontar 256 de cada uno,haciendo un total de 1024 bytes .Ahora si quitamos los 694 del nuevo sector nos quedan 330 bytes que podremos aprovechar para otro sector de 128 bytes. Con lo que nos quedarían 11 sectores de los siguientes tamaños: 1 de 128 bytes 4 de 256 bytes 6 de 512 bytes. En Turbo C se podría escribir: format_ldatos mov ax,11 mov dx,512 call format_prep mov cx,4 mov dx,256 formatld_lp mov ax,cx mul 4 mov di,ax mov byte ptr es:(bx + di + 3 ),dx loop formatld_lp mov dx,128 mov byte ptr es :(bx+3),dx call format_track .... Como por medio del dos no podemos leer sectores individuales del disco deberemos proveernos de otro medio para hacerlo como por ejemplo algunas rutinas que proporciona el propio DOS . En efecto se puede utilizar la función 2 de la interrupción 13H del BIOS o la interrupción 25H del DOS . En Turbo C tenemos absread que usa la interrupción del DOS y biosdisk que reproduce las funciones de la interrupción 13H int absread(int drive,int numsects,int sectnum,void * buf) int biosdisk(2,int drive,int head ,int track,int sector,int nsects,void *buf) Cuando querramos leer un sector formateado en forma no standard obtendremos la información de la forma de formateo de la tabla de parámetros del disco. Esta tabla no será la misma para todas las pistas y deberemos conservarla en el propio programa. Cuando recuperamos la tabla deberemos hacer: 1)Modificar el valor del vector 1 EH (dirección de la tabla de parametros originales)para que apunte a la nueva tabla.Posteriormente se deberá redireccionar nuevamente a la tabla original para poder leer el resto de los sectores de disco. 2)Ejecutar una rutina de leer sectores .(Deberemos dar los números de sector correcto contenidos en la cabecera de sector ....si no nunca los encontraremos) Como dije anteriormente la cabecera es un conjunto de bytes situado delante del bloque de datos del sector y contiene fundamentalmente 4 bytes que son los números de pista ,cara ,sector y longitud de sector;estos 4 bytes forman el ID del sector (una vez formateada una pista,el sistema busca los sectores guiandose por el ID contenido en la cabecera). Si se le da a la rutina una ID diferente a la existente no se encontrará el sector. Como se ha visto es relativamente fácil modificar los parámetros para poder agregar información oculta o poder transportar mucha mas información que la nominal ,recuperable solo por quien conozca la rutina correcta. .......Como tambien para posicionar programas, ocultos o no ,que una vez cargados realicen diversas acciones en el sistema con fines solo limitados por el ingenio del creador. Esta información es forzosamente incompleta,como dije antes no es un manual de Turbo C,es solo información que permitirá escribir programas para utilizar eficientemente la tecnología disponible obteniendo mas de lo mismo. Por favor no la utilice para difundir virus,troyanos y otras boludeces propias de estos tiempos plagados por frustrados cybernéticos......Gracias. ***************************************************NOTA MUY IMPORTANTE Se permite la libre copia,distribución,etc en todo o parte por cualquier medio y forma mencionando al grupo y al autor. ******************************************LA INFORMACION DEBE SER LIBRE