Continuamos analizando los campos del BPB.....Campo:
BPB_RsvdSecCntOffset (Byte): 14
Tamaño (Bytes) : 2
Descripción: Número de sectores reservados en la Zona Reservada del volumen, comenzado en el primer sector del volumen. Este campo no puede ser 0. Para sistemas de FAT12 y FAT16 siempre debe ser 1. Para sistemas de archivos FAT32 generalmente este valor es 32. Nuevamente, tenemos que saber que muchos sistemas antiguos asumen un “1” en este campo y no leen su valor real. Todos los sistemas operativos de Microsoft aceptan cualquier valor distinto de 0 para este campo.
El diskette formateado con Windows XP contiene los bytes “01 00”, al estar en formato “little endian”, el byte mas significativo es el último, por lo que debemos interpretarlo como “00 01” (hexadecimal), que corresponde al binario 0000 0000 0000 0001 o al decimal 1.
Campo:
BPB_NumFATsOffset (Byte): 16
Tamaño (Bytes) : 1
Descripción: Número de FATs presentes en el volumen. Este campo debería tener un valor de 2, independientemente del tipo de FAT implementada. Sin embargo, cualquier valor igual o mayor a 1 es valido. Como en casos anteriores, existen sistemas antiguos que podrían fallar si encuentran un valor distinto de 2, o incluso algunos no leen su valor real. Todos los sistemas operativos de Microsoft aceptan cualquier valor distinto de 0 para este campo.
En el diskette que estamos analizando vemos el byte “02”, es decir, se tienen dos copias de la FAT.
Campo:
BPB_RootEntCntOffset (Byte): 17
Tamaño (Bytes) : 2
Descripción: En volúmenes FAT12 y FAT16, estos dos bytes contienen en numero de entradas de 32 bits que hay en el directorio raíz del disco. Ese valor debe ser tal, que al multiplicarlo por 32 resulte en un múltiplo de BPB_BytsPerSec. En el caso de volúmenes con FAT32, este campo debe ser "00 00". Por motivos de compatibilidad, en sistemas FAT16, este valor debería ser 512.
Nuestro ejemplo muestra "E0 00" en estos bytes, por lo que el valor (de nuevo “little endian”) "00 E0", que en binario es 0000 0000 1110 000 y en decimal es 224. Al multiplicar 224 * 32 obtenemos 7168, que es un múltiplo de BPB_BytsPerSec: 7168 / 512 = 14
Campo:
BPB_TotSec16Offset (Byte): 19
Tamaño (Bytes) : 2
Descripción: Este campo contiene en 16 bits la cuenta total de sectores del volumen (FAT12 o FAT16). Están incluidas en la cuenta la totalidad de sectores de todas las zonas. Este campo puede ser 0, en cuyo caso BPB_TotSec32 (ver mas adelante) no debe ser 0.
En el diskette que estamos analizando vemos los bytes “40 0B”, que debemos interpretar como "0B 40" que en binario es 0000 1011 0100 0000 o 2880 en decimal. 2880 * 512 = 1474560 es el tamaño total del diskette.
Campo:
BPB_MediaOffset (Byte): 21
Tamaño (Bytes) : 1
Descripción: Especifica el tipo de medio. "F8" es el valor que identifica a los medios no removibles. Los medios removibles en general se especifican como "F0". Una cuestión importante es que este valor debe también ser colocado en byte bajo de la entrada FAT
- . La lista de valores posibles es la siguiente:
0xF8 un lado, 80 pistas por lado, 9 sectores por pista
0xF9 dos lados, 80 pistas por lado, 9 sectores por pista
0xFA un lado, 80 pistas por lado, 8 sectores por pista
0xFB dos lados, 80 pistas por lado, 8 sectores por pista
0xFC un lado, 40 pistas por lado, 9 sectores por pista
0xFD dos lados, 40 pistas por lado, 9 sectores por pista
0xFE un lado, 40 pistas por lado, 8 sectores por pista
0xFF dos lados, 40 pistas por lado, 8 sectores por pistaNuestro diskette tiene el valor "F0" en este byte, que es el valor genérico para un medio removible.
Campo:
BPB_FATz16Offset (Byte): 22
Tamaño (Bytes) : 2
Descripción: Tamaño de la FAT12/FAT16. Es el numero de sectores ocupados por UNA copia de la FAT. Si se trata de un volumen FAT32, este campo debe ser 0, y el tamaño de la FAT almacenado en BPB_FATz32.
En el diskette que estamos analizando vemos los bytes “09 00”, que debemos interpretar como "00 49" que en binario es 0000 0000 0000 1001 o 9 en decimal. 9 * 512 = 4608 bytes ocupados cada copia de la FAT.
Campo:
BPB_SecPerTrkOffset (Byte): 24
Tamaño (Bytes) : 2
Descripción: En aquellos soportes que tienen una "geometría" compuesta por pistas, cabezas y cilindros, tales como los discos duros, este valor especifica el numero de sectores por pista. Es utilizado por ejemplo por la int13 de MS-DOS.
Nuestro diskette tiene los bytes “12 00”, que debemos interpretar como "00 12" y que en binario es 0000 0000 0001 0020 o 18 en decimal. Este diskette tiene 18 sectores de 512 bytes por pista.
Si multiplicamos 18 * 512 * 80 (pistas) * 2 (cabezas), volvemos al tamaño total de bytes del disco, 1474560.
Campo:
BPB_NumHeadsOffset (Byte): 26
Tamaño (Bytes) : 2
Descripción: Similar al campo anterior, pero indica el numero de cabezas.
Nuestro diskette tiene los bytes “02 00”, que debemos interpretar como "00 02" y que en binario es 0000 0000 0000 0010 o 2 en decimal. Este diskette es leído en una unidad que tiene dos cabezas.
Campo:
BPB_HiddSecOffset (Byte): 28
Tamaño (Bytes) : 4
Descripción: Numero de sectores ocultos anteriores a la partición que contiene este volumen FAT. Generalmente, solo tiene importancia en sistemas que acceden al volumen a través de la int13 de MS-DOS. Este valor debería ser 0 en un medio que no ha sido particionado. El valor exacto de este campo depende del sistema operativo utilizado.
En el diskette que estamos analizando vemos los bytes “00 00 00 00”, lo que indica que no existen particiones en el volumen.
Campo:
BPB_TotSec32Offset (Byte): 32
Tamaño (Bytes) : 4
Descripción: Este campo contiene en 32 bits la cuenta total de sectores del volumen (FAT32). Están incluidas en la cuenta la totalidad de sectores de todas las zonas. Este campo puede ser 0, en cuyo caso BPB_TotSec16 (ver mas arriba) no debe ser 0. En volúmenes FAT32 no debe ser 0. En volúmenes FAT12/FAT16 este campo contiene el numero de sectores solamente cuando BPB_TotSec16 es 0 y el numero de sectores es mayor a 65535.
En este diskette tenemos “00 00 00 00”, debido a que es un volumen con FAT12/FAT16 con menos de 65536 sectores.
Todos los campos vistos hasta aquí son comunes a las implementaciones de FAT12/FAT16/FAT32. Los que vienen a continuación son propios de los sistemas FAT12/FAT16 o de los FAT32.
> Campos específicos de FAT12/FAT16:Los siguientes campos solo se encuentran en aquellos volumenes con FAT12/FAT16:
Campo:
BS_DrvNumOffset (Byte): 36
Tamaño (Bytes) : 1
Descripción: Numero de drive para la interrupción 13. Este campo le indica a MS-DOS si se trata de un diskette ("00") o de un disco duro ("80").
En nuestro ejemplo, al tratarse de un diskette tenemos “00”.
Campo:
BS_Reserved1Offset (Byte): 37
Tamaño (Bytes) : 1
Descripción: Reservado para su uso en Windows NT. Cualquier programa que de formato a un diskette deberia escribir un "00" en este lugar.
En nuestro ejemplo encontramos “00” en ese byte.
Campo:
BS_BootSigOffset (Byte): 38
Tamaño (Bytes) : 1
Descripción: Marca de boot extendido. Simplemente, indica si los siguientes tres campos están presentes ("29") o no "00".
En este diskette tenemos “29”,lo que indica que los tres siguientes campos (BS_VolID, BS_VolLab y BS_FilSysType) están presentes.
Campo:
BS_VolIDOffset (Byte): 39
Tamaño (Bytes) : 4
Descripción: Estos cuatro bytes conforman el numero de serie del soporte. Junto con BS_VolLab sirven para identificar un soporte en particular. Se obtiene a partir de la fecha y la hora en que se realizo el formato del disco. (Más adelante intentar publicar aquí el algoritmo utilizado).
El diskette bajo análisis tiene los bytes "B9 90 1C 92".
Campo:
BS_VolLabOffset (Byte): 43
Tamaño (Bytes) : 11
Descripción: Etiqueta electronica del volumen. Es el nombre que uno puede ver cuando accede al volumen desde windows, por ejemplo. En aquellos soportes que no se ha escrito o cambiado el nombre, deberian figurar los bytes "4E 4F 20 4E 41 4D 45 20 20 20 20" ("NO NAME ") .
El diskette que estamos estudiando tiene la cadena "NO NAME "
Campo:
BS_FilSysTypeOffset (Byte): 54
Tamaño (Bytes) : 8
Descripción: Una cadena de texto, con 8 caracteres de longitud. Debe ser "FAT12 ", "FAT16 " o "FAT ". Muchos programadores suponen que esta etiqueta sirve para identificar el tipo de volumen, pero sin embargo no es así, ya que este campo no es parte del BPB.
Etiqueta electrónica del volumen. Es el nombre que uno puede ver cuando accede al volumen desde Windows, por ejemplo. En aquellos soportes que no se ha escrito o cambiado el nombre, deberían figurar los bytes "4E 4F 20 4E 41 4D 45 20 20 20 20" ("NO NAME ") .
En este diskette tenemos la cadena "FAT12 "
Aquí terminan los campos específicos para los volúmenes con FAT12/FAT16.
(Continuara en unos días. Mientras, en
www.ucontrol.com.ar puedes ir viendo los avances antes de que los postee con este formato.)