Especificación del sistema de archivos exFAT
1 Introducción
El sistema de archivos exFAT es el sucesor de FAT32 en la familia FAT de sistemas de archivos. Esta especificación describe el sistema de archivos exFAT y proporciona toda la información necesaria para implementar el sistema de archivos exFAT.
1.1 Objetivos de diseño
El sistema de archivos exFAT tiene tres objetivos de diseño centrales (consulte la lista siguiente).
Conservar la simplicidad de los sistemas de archivos basados en FAT.
Dos de los puntos fuertes de los sistemas de archivos basados en FAT son su relativa simplicidad y facilidad de implementación. En el espíritu de sus predecesores, los implementadores deben encontrar exFAT relativamente sencillo y fácil de implementar.
Habilite archivos y dispositivos de almacenamiento muy grandes.
El sistema de archivos exFAT usa 64 bits para describir el tamaño de archivo, lo que permite aplicaciones que dependen de archivos muy grandes. El sistema de archivos exFAT también permite clústeres de hasta 32 MB, lo que permite de forma eficaz dispositivos de almacenamiento muy grandes.
Incorpore la extensibilidad para la innovación futura.
El sistema de archivos exFAT incorpora extensibilidad en su diseño, lo que permite que el sistema de archivos siga el ritmo de las innovaciones en el almacenamiento y los cambios en el uso.
1.2 Terminología específica
En el contexto de esta especificación, ciertos términos (véase el cuadro 1) llevan un significado específico para el diseño y la implementación del sistema de archivos exFAT.
Tabla 1 Definición de términos que tienen un significado muy específico
Término | Definición |
---|---|
Deberán | Esta especificación utiliza el término "debe" para describir un comportamiento que es obligatorio. |
Posible | Esta especificación usa el término "should" para describir un comportamiento que recomienda encarecidamente, pero no hace obligatorio. |
May | Esta especificación usa el término "may" para describir un comportamiento que es opcional. |
Mandatory | Este término describe un campo o estructura que una implementación modificará y interpretará como se describe en esta especificación. |
Opcionales | Este término describe un campo o una estructura que una implementación puede admitir o no. Si una implementación admite un determinado campo o estructura opcional, modificará e interpretará el campo o la estructura como se describe en esta especificación. |
No definido | Este término describe el contenido de campo o estructura que una implementación puede modificar según sea necesario (es decir, claro a cero al establecer campos o estructuras circundantes) y no interpretará para contener ningún significado específico. |
Reservado | Este término describe el contenido del campo o de la estructura que implementa:
|
1.3 Texto completo de acrónimos comunes
Esta especificación usa acrónimos en uso común en el sector informático personal (consulte la tabla 2).
Tabla 2 Texto completo de acrónimos comunes
Acrónimo | Texto completo |
---|---|
ASCII | American Standard Code for Information Interchange |
BIOS | Sistema básico de salida de entrada |
CPU | Unidad de procesamiento central |
exFAT | Tabla extensible de asignación de archivos |
FAT | Tabla de asignación de archivos |
FAT12 | Tabla de asignación de archivos, índices de clúster de 12 bits |
FAT16 | Tabla de asignación de archivos, índices de clúster de 16 bits |
FAT32 | Tabla de asignación de archivos, índices de clúster de 32 bits |
GPT | tabla de particiones GUID |
GUID | Identificador único global (consulte la sección 10.1) |
INT | Interrupción |
MBR | registro de arranque maestro |
texFAT | ExFAT seguro para transacciones |
UTC | Hora universal coordinada |
1.4 Calificadores de campo y estructura predeterminados
Los campos y las estructuras de esta especificación tienen los siguientes calificadores (consulte la lista siguiente), a menos que la especificación tenga en cuenta lo contrario.
No están firmados
Utilice la notación decimal para describir los valores, donde no se indique lo contrario; esta especificación usa la letra posterior a la corrección "h" para indicar números hexadecimales y incluir GUID en llaves
Están en formato little-endian
No requiere un carácter de terminación null para las cadenas
1.5 Windows CE y TexFAT
TexFAT es una extensión de exFAT que agrega semántica operativa segura para transacciones sobre el sistema de archivos base. TexFAT es utilizado por Windows CE. TexFAT requiere el uso de las dos FAT y mapas de bits de asignación para su uso en transacciones. También define varias estructuras adicionales, incluidos descriptores de relleno y descriptores de seguridad.
2 Estructura de volumen
Un volumen es el conjunto de todas las estructuras del sistema de archivos y el espacio de datos necesario para almacenar y recuperar datos de usuario. Todos los volúmenes exFAT contienen cuatro regiones (consulte la tabla 3).
Estructura de volumen de la tabla 3
Nombre de la subregión | Offset (sector) |
Tamaño (sectores) |
Comentarios |
---|---|---|---|
Región de arranque principal | |||
Sector principal de arranque | 0 | 1 | Esta subregión es obligatoria y la sección 3.1 define su contenido. |
Principales sectores de arranque extendido | 1 | 8 | Esta subregión es obligatoria y la sección 3.2) define su contenido. |
Parámetros principales de OEM | 9 | 1 | Esta subregión es obligatoria y la sección 3.3 define su contenido. |
Main Reserved | 10 | 1 | Esta subregión es obligatoria y su contenido está reservado. |
Suma de comprobación de arranque principal | 11 | 1 | Esta subregión es obligatoria y la sección 3.4 define su contenido. |
Región de arranque de copia de seguridad | |||
Sector de arranque de copia de seguridad | 12 | 1 | Esta subregión es obligatoria y la sección 3.1 define su contenido. |
Copia de seguridad de sectores de arranque extendido | 13 | 8 | Esta subregión es obligatoria y la sección 3.2 define su contenido. |
Parámetros de OEM de copia de seguridad | 21 | 1 | Esta subregión es obligatoria y la sección 3.3 define su contenido. |
Copia de seguridad reservada | 22 | 1 | Esta subregión es obligatoria y su contenido está reservado. |
Suma de comprobación de arranque de copia de seguridad | 23 | 1 | Esta subregión es obligatoria y la sección 3.4 define su contenido. |
Región FAT | |||
Alineación FAT | 24 | FatOffset – 24 | Esta subregión es obligatoria y su contenido, si existe, no está definido. Nota: Los sectores principal y de arranque de copia de seguridad contienen el campo FatOffset. |
Primer FAT | FatOffset | FatLength | Esta subregión es obligatoria y la sección 4.1 define su contenido. Nota: Los sectores principal y de arranque de copia de seguridad contienen los campos FatOffset y FatLength. |
Segundo FAT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | Esta subregión es obligatoria y la sección 4.1 define su contenido, si existe. Nota: Los sectores principal y de arranque de copia de seguridad contienen los campos FatOffset, FatLength y NumberOfFats. El campo NumberOfFats solo puede contener los valores 1 y 2. |
Región de datos | |||
Alineación del montón de clústeres | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset : (FatOffset + FatLength * NumberOfFats) | Esta subregión es obligatoria y su contenido, si existe, no está definido. Nota: Los sectores principal y de arranque de copia de seguridad contienen los campos FatOffset, FatLength, NumberOfFats y ClusterHeapOffset. Los valores válidos del campo NumberOfFats son 1 y 2. |
Montón de clústeres | ClusterHeapOffset | ClusterCount * 2SectoresPerClusterShift | Esta subregión es obligatoria y la sección 5.1 define su contenido. Nota: Los sectores de arranque principal y de copia de seguridad contienen los campos ClusterHeapOffset, ClusterCount y SectorsPerClusterShift. |
Exceso de espacio | ClusterHeapOffset + ClusterCount * 2SectoresPerClusterShift | VolumeLength: (ClusterHeapOffset + ClusterCount * 2SectoresPerClusterShift) | Esta subregión es obligatoria y su contenido, si existe, no está definido. Nota: Los sectores de arranque principal y de copia de seguridad contienen los campos ClusterHeapOffset, ClusterCount, SectorsPerClusterShift y VolumeLength. |
3 regiones principales y de arranque de copia de seguridad
La región de arranque principal proporciona todas las instrucciones necesarias para la división de arranque, la identificación de la información y los parámetros del sistema de archivos para permitir que una implementación realice lo siguiente:
Correa de arranque de un sistema informático de un volumen exFAT.
Identifique el sistema de archivos en el volumen como exFAT.
Descubra la ubicación de las estructuras del sistema de archivos exFAT.
La región de arranque de copia de seguridad es una copia de seguridad de la región de arranque principal. Ayuda a la recuperación del volumen exFAT en caso de que la región de arranque principal esté en un estado incoherente. Excepto en circunstancias poco frecuentes, como la actualización de instrucciones de estrangulación de arranque, las implementaciones no deben modificar el contenido de la región de arranque de copia de seguridad.
3.1 Sub-regiones principales y del sector de arranque de copia de seguridad
El sector de arranque principal contiene código para la división de arranque de un volumen exFAT y parámetros exFAT fundamentales que describen la estructura del volumen (consulte la tabla 4). Bios, MBR u otros agentes de estrangulación de arranque pueden inspeccionar este sector y cargar y ejecutar las instrucciones de estrangulación de arranque contenidas en él.
El sector de arranque de copia de seguridad es una copia de seguridad del sector de arranque principal y tiene la misma estructura (consulte la tabla 4). El sector de arranque de copia de seguridad puede ayudar a las operaciones de recuperación; sin embargo, las implementaciones tratarán el contenido de los campos VolumeFlags y PercentInUse como obsoletos.
Antes de usar el contenido del sector principal o de arranque de copia de seguridad, las implementaciones comprobarán su contenido validando su suma de comprobación de arranque correspondiente y asegurándose de que todos sus campos están dentro de su intervalo de valores válido.
Aunque la operación de formato inicial inicial inicializará el contenido de los sectores principal y de arranque de copia de seguridad, las implementaciones pueden actualizar estos sectores (y también actualizarán su suma de comprobación de arranque correspondiente) según sea necesario. Sin embargo, las implementaciones pueden actualizar los campos VolumeFlags o PercentInUse sin actualizar su suma de comprobación de arranque respectiva (la suma de comprobación excluye específicamente estos dos campos).
Tabla 4 Estructura del sector principal y de arranque de copia de seguridad
Nombre del campo | Offset (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
JumpBoot | 0 | 3 | Este campo es obligatorio y la sección 3.1.1 define su contenido. |
FileSystemName | 3 | 8 | Este campo es obligatorio y la sección 3.1.2 define su contenido. |
MustBeZero | 11 | 53 | Este campo es obligatorio y la sección 3.1.3 define su contenido. |
PartitionOffset | 64 | 8 | Este campo es obligatorio y la sección 3.1.4 define su contenido. |
VolumeLength | 72 | 8 | Este campo es obligatorio y la sección 3.1.5 define su contenido. |
FatOffset | 80 | 4 | Este campo es obligatorio y la sección 3.1.6 define su contenido. |
FatLength | 84 | 4 | Este campo es obligatorio y la sección 3.1.7 define su contenido. |
ClusterHeapOffset | 88 | 4 | Este campo es obligatorio y la sección 3.1.8 define su contenido. |
ClusterCount | 92 | 4 | Este campo es obligatorio y la sección 3.1.9 define su contenido. |
FirstClusterOfRootDirectory | 96 | 4 | Este campo es obligatorio y la sección 3.1.10 define su contenido. |
VolumeSerialNumber | 100 | 4 | Este campo es obligatorio y la sección 3.1.11 define su contenido. |
FileSystemRevision | 104 | 2 | Este campo es obligatorio y la sección 3.1.12 define su contenido. |
VolumeFlags | 106 | 2 | Este campo es obligatorio y la sección 3.1.13 define su contenido. |
BytesPerSectorShift | 108 | 1 | Este campo es obligatorio y la sección 3.1.14 define su contenido. |
SectoresPerClusterShift | 109 | 1 | Este campo es obligatorio y la sección 3.1.15 define su contenido. |
NumberOfFats | 110 | 1 | Este campo es obligatorio y la sección 3.1.16 define su contenido. |
DriveSelect | 111 | 1 | Este campo es obligatorio y la sección 3.1.17 define su contenido. |
PercentInUse | 112 | 1 | Este campo es obligatorio y la sección 3.1.18 define su contenido. |
Reservado | 113 | 7 | Este campo es obligatorio y su contenido está reservado. |
BootCode | 120 | 390 | Este campo es obligatorio y la sección 3.1.19 define su contenido. |
BootSignature | 510 | 2 | Este campo es obligatorio y la sección 3.1.20 define su contenido. |
ExcessSpace | 512 | 2BytesPerSectorShift : 512 | Este campo es obligatorio y su contenido, si existe, no están definidos. Nota: los sectores principal y de arranque de copia de seguridad contienen el campo BytesPerSectorShift. |
Campo JumpBoot 3.1.1
El campo JumpBoot contendrá la instrucción de salto para las CPU comunes en equipos personales, que, cuando se ejecuta, "salta" la CPU para ejecutar las instrucciones de salto de arranque en el campo BootCode.
El valor válido para este campo es (en orden de byte bajo a byte de orden alto) EBh 76h 90h.
3.1.2 Campo FileSystemName
El campo FileSystemName contendrá el nombre del sistema de archivos en el volumen.
El valor válido para este campo es, en caracteres ASCII, "EXFAT", que incluye tres espacios en blanco finales.
3.1.3 Campo MustBeZero
El campo MustBeZero se corresponde directamente con el intervalo de bytes que consume el bloque de parámetros bios empaquetado en volúmenes FAT12/16/32.
El valor válido para este campo es 0, lo que ayuda a evitar que las implementaciones FAT12/16/32 monten erróneamente un volumen exFAT.
3.1.4 Campo PartitionOffset
El campo PartitionOffset describirá el desplazamiento del sector relativo a los medios de la partición que hospeda el volumen exFAT especificado. Este campo ayuda a la conexión de arranque desde el volumen usando INT extendido 13h en equipos personales.
Todos los valores posibles para este campo son válidos; sin embargo, el valor 0 indica que las implementaciones omitirán este campo.
3.1.5 VolumeLength Field
El campo VolumeLength describirá el tamaño del volumen exFAT especificado en sectores.
El intervalo válido de valores para este campo será:
Al menos2 2 20/ 2BytesPerSectorShift, lo que garantiza que el volumen más pequeño no sea inferior a 1 MB.
Como máximo 264- 1, el valor más grande que puede describir este campo.
Sin embargo, si el tamaño de la subregión de espacio excesivo es 0, el valor más grande de este campo es ClusterHeapOffset + (232- 11) * 2SectoresPerClusterShift.
3.1.6 Campo FatOffset
El campo FatOffset describirá el desplazamiento del sector relativo al volumen del primer FAT. Este campo permite que las implementaciones alineen first FAT con las características del medio de almacenamiento subyacente.
El intervalo válido de valores para este campo será:
Al menos 24, que tiene en cuenta los sectores que consumen las regiones de arranque principal y arranque de copia de seguridad
A lo sumo ClusterHeapOffset: (FatLength * NumberOfFats), que tiene en cuenta los sectores que consume el montón de clústeres.
3.1.7 Campo FatLength
El campo FatLength describirá la longitud, en sectores, de cada tabla FAT (el volumen puede contener hasta dos FAT).
El intervalo válido de valores para este campo será:
Al menos (ClusterCount + 2) * 22 2BytesPerSectorShiftredondeado al entero más cercano, lo que garantiza que cada FAT tenga espacio suficiente para describir todos los clústeres del montón de clústeres.
Como máximo (ClusterHeapOffset - FatOffset) / NumberOfFats redondeado hacia abajo hasta el entero más cercano, lo que garantiza que las FAT existen antes del montón de clústeres.
Este campo puede contener un valor que supere su límite inferior (como se ha descrito anteriormente) para permitir que el Segundo FAT, si está presente, también se alinee con las características del medio de almacenamiento subyacente. El contenido del espacio que supera lo que requiere el propio FAT, si existe, no está definido.
3.1.8 Campo ClusterHeapOffset
El campo ClusterHeapOffset describirá el desplazamiento del sector relativo al volumen del montón del clúster. Este campo permite que las implementaciones alineen el montón de clústeres con las características del medio de almacenamiento subyacente.
El intervalo válido de valores para este campo será:
Al menos FatOffset + FatLength * NumberOfFats, para tener en cuenta los sectores que consumen todas las regiones anteriores
Como máximo 232- 1 o VolumeLength - (ClusterCount * 2SectoresPerClusterShift), el cálculo que sea menor
3.1.9 Campo ClusterCount
El campo ClusterCount describirá el número de clústeres que contiene el montón de clústeres.
El valor válido para este campo será el menor de lo siguiente:
(VolumeLength - ClusterHeapOffset) / 2SectoresPerClusterShiftredondeado hacia abajo hasta el entero más cercano, que es exactamente el número de clústeres que pueden caber entre el principio del montón de clústeres y el final del volumen.
232- 11, que es el número máximo de clústeres que un FAT puede describir
El valor del campo ClusterCount determina el tamaño mínimo de un FAT. Para evitar fats extremadamente grandes, las implementaciones pueden controlar el número de clústeres del montón de clústeres aumentando el tamaño del clúster (a través del campo SectoresPerClusterShift). Esta especificación no recomienda más de 2 clústeres de24 a 2 en el montón de clústeres. Sin embargo, las implementaciones podrán controlar volúmenes con hasta 2 clústeres de32 a 11 en el montón de clústeres.
3.1.10 PrimerclusterOfRootCampoDirectory
El campo FirstClusterOfRootDirectory contendrá el índice de clúster del primer clúster del directorio raíz. Las implementaciones deben hacer todo lo posible por colocar el primer clúster del directorio raíz en el primer clúster no incorrecto después de los clústeres que consume el mapa de bits de asignación y la tabla de mayúsculas y minúsculas.
El intervalo válido de valores para este campo será:
Al menos 2, el índice del primer clúster del montón de clústeres
Como máximo ClusterCount + 1, el índice del último clúster del montón de clústeres
3.1.11 VolumeSerialNumber Field
El campo VolumeSerialNumber contendrá un número de serie único. Esto ayuda a las implementaciones a distinguir entre diferentes volúmenes exFAT. Las implementaciones deben generar el número de serie combinando la fecha y hora de dar formato al volumen exFAT. El mecanismo para combinar la fecha y la hora para formar un número de serie es específico de la implementación.
Todos los valores posibles para este campo son válidos.
3.1.12 Campo FileSystemRevision
El campo FileSystemRevision describirá los números de revisión principales y menores de las estructuras exFAT en el volumen especificado.
El byte de orden superior es el número de revisión principal y el byte de orden bajo es el número de revisión menor. Por ejemplo, si el byte de orden superior contiene el valor 01h y si el byte de orden bajo contiene el valor 05h, el campo FileSystemRevision describe el número de revisión 1.05. Del mismo modo, si el byte de orden superior contiene el valor 0Ah y si el byte de orden bajo contiene el valor 0Fh, el campo FileSystemRevision describe el número de revisión 10,15.
El intervalo válido de valores para este campo será:
Al menos 0 para el byte de orden bajo y 1 para el byte de orden superior
Como máximo 99 para el byte de orden bajo y 99 para el byte de orden superior
El número de revisión de exFAT que describe esta especificación es 1.00. Las implementaciones de esta especificación deben montar cualquier volumen exFAT con el número de revisión principal 1 y no montarán ningún volumen exFAT con ningún otro número de revisión importante. Las implementaciones respetarán el número de revisión menor y no realizarán operaciones ni crearán ninguna estructura del sistema de archivos que no se describa en la especificación correspondiente del número de revisión menor especificado.
3.1.13 Campo VolumeFlags
El campo VolumeFlags contendrá marcas que indican el estado de varias estructuras del sistema de archivos en el volumen exFAT (véase la tabla 5).
Las implementaciones no incluirán este campo al calcular la suma de comprobación correspondiente de la región de arranque principal o de arranque de copia de seguridad. Al hacer referencia al sector de arranque de copia de seguridad, las implementaciones tratarán este campo como obsoleto.
Estructura de campo VolumeFlags de la tabla 5
Nombre del campo | Offset (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
ActiveFat | 0 | 1 | Este campo es obligatorio y la sección 3.1.13.1 define su contenido. |
VolumeDirty | 1 | 1 | Este campo es obligatorio y la sección 3.1.13.2 define su contenido. |
MediaFailure | 2 | 1 | Este campo es obligatorio y la sección 3.1.13.3 define su contenido. |
ClearToZero | 3 | 1 | Este campo es obligatorio y la sección 3.1.13.4 define su contenido. |
Reservado | 4 | 12 | Este campo es obligatorio y su contenido está reservado. |
3.1.13.1 Campo ActiveFat
El campo ActiveFat describirá qué mapa de bits fat y asignación están activos (y las implementaciones usarán), como se indica a continuación:
0, lo que significa que el mapa de bits first FAT y first allocation están activos
1, lo que significa que el mapa de bits de segunda asignación y FAT están activos y solo es posible cuando el campo NumberOfFats contiene el valor 2.
Las implementaciones tendrán en cuenta el mapa de bits fat y de asignación inactivos como obsoletos. Solo las implementaciones compatibles con TexFAT cambiarán los mapas de bits fat y de asignación activos (consulte la sección 7.1).
3.1.13.2 Campo VolumeDirty
El campo VolumeDirty describirá si el volumen está sucio o no, como se indica a continuación:
0, lo que significa que el volumen probablemente está en un estado coherente
1, lo que significa que el volumen probablemente está en un estado incoherente
Las implementaciones deben establecer el valor de este campo en 1 al encontrar incoherencias de metadatos del sistema de archivos que no resuelven. Si, al montar un volumen, el valor de este campo es 1, solo las implementaciones que resuelven incoherencias de metadatos del sistema de archivos pueden borrar el valor de este campo en 0. Estas implementaciones solo borrarán el valor de este campo en 0 después de asegurarse de que el sistema de archivos se encuentra en un estado coherente.
Si, al montar un volumen, el valor de este campo es 0, las implementaciones deben establecer este campo en 1 antes de actualizar los metadatos del sistema de archivos y borrar este campo en 0 posteriormente, de forma similar al orden de escritura recomendado descrito en la sección 8.1.
3.1.13.3 Campo MediaFailure
El campo MediaFailure describirá si una implementación ha detectado errores de medios o no, como se indica a continuación:
0, lo que significa que el medio de hospedaje no ha notificado errores o que ya se han registrado errores conocidos en los clústeres fat como "incorrectos".
1, lo que significa que el medio de hospedaje ha notificado errores (es decir, ha producido errores en las operaciones de lectura o escritura).
Una implementación debe establecer este campo en 1 cuando:
El medio de hospedaje produce un error en los intentos de acceso a cualquier región del volumen.
La implementación ha agotado los algoritmos de reintento de acceso, si los hay.
Si, al montar un volumen, el valor de este campo es 1, las implementaciones que examinan todo el volumen en busca de errores multimedia y registran todos los errores como clústeres "incorrectos" en FAT (o resolver errores multimedia) pueden borrar el valor de este campo en 0.
3.1.13.4 Campo ClearToZero
El campo ClearToZero no tiene un significado significativo en esta especificación.
Los valores válidos para este campo son:
0, que no tiene ningún significado concreto
1, lo que significa que las implementaciones borrarán este campo a 0 antes de modificar las estructuras, directorios o archivos del sistema de archivos.
Campo 3.1.14 BytesPerSectorShift
El campo BytesPerSectorShift describirá los bytes por sector expresados como registro2(N), donde N es el número de bytes por sector. Por ejemplo, para 512 bytes por sector, el valor de este campo es 9.
El intervalo válido de valores para este campo será:
Al menos 9 (tamaño del sector de 512 bytes), que es el sector más pequeño posible para un volumen exFAT
Como máximo 12 (tamaño de sector de 4096 bytes), que es el tamaño de página de memoria de las CPU comunes en los equipos personales
3.1.15 SectoresPerClusterShift
El campo SectoresPerClusterShift describirá los sectores por clúster expresados como registro2(N), donde N es el número de sectores por clúster. Por ejemplo, para 8 sectores por clúster, el valor de este campo es 3.
El intervalo válido de valores para este campo será:
Al menos 0 (1 sector por clúster), que es el clúster más pequeño posible
Como máximo 25: BytesPerSectorShift, que se evalúa como un tamaño de clúster de 32 MB
3.1.16 Campo NumberOfFats
El campo NumberOfFats describirá el número de FAT y mapas de bits de asignación que contiene el volumen.
El intervalo válido de valores para este campo será:
1, que indica que el volumen solo contiene el mapa de bits first FAT y first allocation
2, que indica que el volumen contiene el Primer FAT, Segundo FAT, Mapa de bits de primera asignación y Mapa de bits de segunda asignación; este valor solo es válido para volúmenes TexFAT.
3.1.17 UnidadSeleccionar campo
El campo DriveSelect contendrá el número de unidad INT 13h extendido, que ayuda al arranque de este volumen mediante int extendido 13h en equipos personales.
Todos los valores posibles para este campo son válidos. Los campos similares de los sistemas de archivos basados en FAT anteriores contenían con frecuencia el valor 80h.
3.1.18 Campo PercentInUse
El campo PercentInUse describirá el porcentaje de clústeres del montón de clústeres que se asignan.
El intervalo válido de valores para este campo será:
Entre 0 y 100 inclusive, que es el porcentaje de clústeres asignados en el montón del clúster, redondeado hacia abajo hasta el entero más cercano.
FFh exactamente, que indica que el porcentaje de clústeres asignados en el montón de clústeres no está disponible
Las implementaciones cambiarán el valor de este campo para reflejar los cambios en la asignación de clústeres en el montón de clústeres o lo cambiarán a FFh.
Las implementaciones no incluirán este campo al calcular la suma de comprobación correspondiente de la región de arranque principal o de arranque de copia de seguridad. Al hacer referencia al sector de arranque de copia de seguridad, las implementaciones tratarán este campo como obsoleto.
3.1.19 Campo BootCode
El campo BootCode contendrá instrucciones de estrangulación de arranque. Las implementaciones pueden rellenar este campo con las instrucciones de CPU necesarias para el arranque de un sistema informático. Las implementaciones que no proporcionan instrucciones de salto de arranque inicializarán cada byte de este campo a F4h (la instrucción de detención para las CPU comunes en equipos personales) como parte de su operación de formato.
3.1.20 Campo BootSignature
El campo BootSignature describirá si la intención de un sector determinado es que sea un sector de arranque o no.
El valor válido para este campo es AA55h. Cualquier otro valor de este campo invalida su respectivo sector de arranque. Las implementaciones deben comprobar el contenido de este campo antes de depender de cualquier otro campo en su respectivo sector de arranque.
3.2 Subárboles principales y de copia de seguridad de sectores de arranque extendido
Cada sector de los principales sectores de arranque extendido tiene la misma estructura; sin embargo, cada sector puede contener instrucciones distintas de estratos de arranque (consulte la tabla 6). Los agentes de estrabación de arranque, como las instrucciones de estrangulación de arranque en el sector de arranque principal, las implementaciones alternativas del BIOS o el firmware de un sistema incrustado, pueden cargar estos sectores y ejecutar las instrucciones que contienen.
Los sectores de arranque extendido de copia de seguridad son una copia de seguridad de los principales sectores de arranque extendido y tienen la misma estructura (consulte la tabla 6).
Antes de ejecutar las instrucciones de los sectores de arranque extendido principal o de copia de seguridad, las implementaciones deben comprobar su contenido asegurándose de que el campo ExtendedBootSignature de cada sector contenga su valor prescrito.
Aunque la operación de formato inicial inicial inicializará el contenido de los sectores principal y de arranque extendido de copia de seguridad, las implementaciones pueden actualizar estos sectores (y también actualizarán su suma de comprobación de arranque correspondiente) según sea necesario.
Tabla 6 Estructura del sector de arranque extendido
Nombre del campo | Offset (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift : 4 | Este campo es obligatorio y la sección 3.2.1 define su contenido. Nota: Los sectores principal y de arranque de copia de seguridad contienen el campo BytesPerSectorShift. |
ExtendedBootSignature | 2BytesPerSectorShift : 4 | 4 | Este campo es obligatorio y la sección 3.2.2 define su contenido. Nota: Los sectores principal y de arranque de copia de seguridad contienen el campo BytesPerSectorShift. |
3.2.1 Campo ExtendedBootCode
El campo ExtendedBootCode contendrá instrucciones de estrangulación de arranque. Las implementaciones pueden rellenar este campo con las instrucciones de CPU necesarias para el arranque de un sistema informático. Las implementaciones que no proporcionan instrucciones de salto de arranque inicializarán cada byte de este campo a 00h como parte de su operación de formato.
3.2.2 Campo ExtendedBootSignature
El campo ExtendedBootSignature describirá si la intención del sector determinado es que sea un sector de arranque extendido o no.
El valor válido para este campo es AA550000h. Cualquier otro valor de este campo invalida su respectivo sector de arranque extendido principal o de copia de seguridad. Las implementaciones deben comprobar el contenido de este campo antes de depender de cualquier otro campo en su respectivo sector de arranque extendido.
3.3 Subárboles principales y de parámetros oem de copia de seguridad
La subregión Parámetros principales de OEM contiene diez estructuras de parámetros que pueden contener información específica del fabricante (consulte la tabla 7). Cada una de las diez estructuras de parámetros se deriva de la plantilla Parámetros genéricos (consulte la sección 3.3.2). Los fabricantes pueden derivar sus propias estructuras de parámetros personalizados de la plantilla Parámetros genéricos. Esta especificación define dos estructuras de parámetros: Parámetros NULL (consulte sección 3.3.3) y Parámetros flash (consulte la sección 3.3.4).
Los parámetros de OEM de copia de seguridad son una copia de seguridad de los parámetros principales de OEM y tienen la misma estructura (consulte la tabla 7).
Antes de usar el contenido de los parámetros de OEM principal o de copia de seguridad, las implementaciones comprobarán su contenido validando la suma de comprobación de arranque correspondiente.
Los fabricantes deben rellenar los parámetros oem principal y de copia de seguridad con sus propias estructuras de parámetros personalizados, si las hay, y cualquier otra estructura de parámetros. Las operaciones de formato posteriores conservarán el contenido de los parámetros del OEM principal y de copia de seguridad.
Las implementaciones pueden actualizar los parámetros del OEM principal y de copia de seguridad según sea necesario (y también actualizarán su suma de comprobación de arranque correspondiente).
Estructura de parámetros de OEM de la tabla 7
Nombre del campo | Offset (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
Parámetros[0] | 0 | 48 | Este campo es obligatorio y la sección 3.3.1 define su contenido. |
. . . |
. . . |
. . . |
. . . |
Parámetros[9] | 432 | 48 | Este campo es obligatorio y la sección 3.3.1 define su contenido. |
Reservado | 480 | 2BytesPerSectorShift : 480 | Este campo es obligatorio y su contenido está reservado. Nota: los sectores principal y de arranque de copia de seguridad contienen el campo BytesPerSectorShift. |
3.3.1 Parámetros[0] ... Parámetros[9]
Cada campo Parámetros de esta matriz contiene una estructura de parámetros, que se deriva de la plantilla Parámetros genéricos (consulte la sección 3.3.2). Cualquier campo Parámetros sin usar se describirá como que contiene una estructura de parámetros NULL (consulte la sección 3.3.3).
Plantilla de parámetros genéricos 3.3.2
La plantilla Parámetros genéricos proporciona la definición base de una estructura de parámetros (consulte la tabla 8). Todas las estructuras de parámetros derivan de esta plantilla. La compatibilidad con esta plantilla de parámetros genéricos es obligatoria.
Plantilla de parámetros genéricos de la tabla 8
Nombre del campo | Offset (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
ParametersGuid | 0 | 16 | Este campo es obligatorio y la sección 3.3.2.1 define su contenido. |
CustomDefined | 16 | 32 | Este campo es obligatorio y las estructuras que derivan de esta plantilla definen su contenido. |
3.3.2.1 ParámetrosCampoGuid
El campo ParametersGuid describirá un GUID, que determina el diseño del resto de la estructura de parámetros especificada.
Todos los valores posibles para este campo son válidos; Sin embargo, los fabricantes deben usar una herramienta de generación de GUID, como GuidGen.exe, para seleccionar un GUID al derivar estructuras de parámetros personalizados de esta plantilla.
3.3.3 Parámetros NULL
La estructura Parámetros NULL se deriva de la plantilla Parámetros genéricos (consulte la sección 3.3.2) y describirá un campo Parámetros sin usar (consulte la tabla 9). Al crear o actualizar la estructura Parámetros de OEM, las implementaciones rellenarán los campos Parámetros sin usar con la estructura Parámetros NULL. Además, al crear o actualizar la estructura de parámetros oem, las implementaciones deben consolidar las estructuras de parámetros NULL al final de la matriz, dejando así todas las demás estructuras parameters al principio de la estructura de parámetros de OEM.
La compatibilidad con la estructura De parámetros NULL es obligatoria.
Tabla 9 Estructura de parámetros NULL
Nombre del campo | Offset (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
ParametersGuid | 0 | 16 | Este campo es obligatorio y la sección 3.3.3.1 define su contenido. |
Reservado | 16 | 32 | Este campo es obligatorio y su contenido está reservado. |
3.3.3.1 ParámetrosCampoGuid
El campo ParametersGuid se ajustará a la definición proporcionada por la plantilla Parámetros genéricos (consulte la sección 3.3.2.1).
El valor válido para este campo, en notación GUID, es {00000000-0000-0000-0000-000000000000}.
3.3.4 Parámetros flash
La estructura de parámetros flash se deriva de la plantilla Parámetros genéricos (consulte la sección 3.3.2) y contiene parámetros para medios flash (consulte la tabla 10). Los fabricantes de dispositivos de almacenamiento basados en flash pueden rellenar un campo Parámetros (preferiblemente el campo Parámetros[0] ) con esta estructura de parámetros. Las implementaciones pueden usar la información de la estructura De parámetros flash para optimizar las operaciones de acceso durante las lecturas y escrituras y para la alineación de las estructuras del sistema de archivos que duren el formato del medio.
La compatibilidad con la estructura de parámetros flash es opcional.
Tabla 10 Estructura de parámetros flash
Nombre del campo | Offset (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
ParametersGuid | 0 | 16 | Este campo es obligatorio y la sección 3.3.4.1 define su contenido. |
EraseBlockSize | 16 | 4 | Este campo es obligatorio y la sección 3.3.4.2 define su contenido. |
PageSize | 20 | 4 | Este campo es obligatorio y la sección 3.3.4.3 define su contenido. |
SpareSectors | 24 | 4 | Este campo es obligatorio y la sección 3.3.4.4 define su contenido. |
RandomAccessTime | 28 | 4 | Este campo es obligatorio y la sección 3.3.4.5 define su contenido. |
ProgrammingTime | 32 | 4 | Este campo es obligatorio y la sección 3.3.4.6 define su contenido. |
ReadCycle | 36 | 4 | Este campo es obligatorio y la sección 3.3.4.7 define su contenido. |
WriteCycle | 40 | 4 | Este campo es obligatorio y la sección 3.3.4.8 define su contenido. |
Reservado | 44 | 4 | Este campo es obligatorio y su contenido está reservado. |
Todos los valores posibles para todos los campos Parámetros de Flash, excepto para el campo ParametersGuid, son válidos. Sin embargo, el valor 0 indica que el campo no tiene sentido (las implementaciones omitirán el campo especificado).
3.3.4.1 Campo ParametersGuid
El campo ParametersGuid se ajustará a la definición proporcionada en la plantilla Parámetros genéricos (vea la sección 3.3.2.1).
El valor válido para este campo, en notación GUID, es {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.
3.3.4.2 Campo EraseBlockSize
El campo EraseBlockSize describirá el tamaño, en bytes, del bloque de borrado del medio flash.
3.3.4.3 Campo PageSize
El campo PageSize describirá el tamaño, en bytes de la página del medio flash.
3.3.4.4 Campo SpareSectors
El campo SpareSectors describirá el número de sectores que el medio flash tiene disponible para sus operaciones de moderación internas.
3.3.4.5 Campo RandomAccessTime
El campo RandomAccessTime describirá el tiempo medio de acceso aleatorio del medio flash, en nanosegundos.
3.3.4.6 Campo ProgrammingTime
El campo ProgrammingTime describirá el tiempo medio de programación del medio flash, en nanosegundos.
3.3.4.7 Campo ReadCycle
El campo ReadCycle describirá el tiempo medio del ciclo de lectura del medio flash, en nanosegundos.
3.3.4.8 Campo WriteCycle
El campo WriteCycle describirá el tiempo medio del ciclo de escritura, en nanosegundos.
3.4 Subárboles principales y de suma de comprobación de arranque de copia de seguridad
Las sumas de comprobación de arranque principal y de copia de seguridad contienen cada uno un patrón de repetición de la suma de comprobación de cuatro bytes del contenido de todas las demás subárboles de sus respectivas regiones de arranque. El cálculo de la suma de comprobación no incluirá los campos VolumeFlags y PercentInUse en su respectivo sector de arranque (consulte la figura 1). El patrón de repetición de la suma de comprobación de cuatro bytes rellena su subregión de suma de comprobación de arranque correspondiente desde el principio hasta el final de la subregión.
Antes de usar el contenido de cualquiera de las demás subárboles de las regiones principal o de arranque de copia de seguridad, las implementaciones comprobarán su contenido validando su suma de comprobación de arranque correspondiente.
Aunque la operación de formato inicial rellenará las sumas de comprobación principal y de arranque de copia de seguridad con el patrón de suma de comprobación repetida, las implementaciones actualizarán estos sectores a medida que cambie el contenido de los demás sectores en sus respectivas regiones de arranque.
Figura 1 Cálculo de suma de comprobación de arranque
UInt32 BootChecksum
(
UCHAR * Sectors, // points to an in-memory copy of the 11 sectors
USHORT BytesPerSector
)
{
UInt32 NumberOfBytes = (UInt32)BytesPerSector * 11;
UInt32 Checksum = 0;
UInt32 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 106) || (Index == 107) || (Index == 112))
{
continue;
}
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Sectors[Index];
}
return Checksum;
}
4 Región de tabla de asignación de archivos
La región tabla de asignación de archivos (FAT) puede contener hasta dos FAT, una en la subregión First FAT y otra en la segunda subregión FAT. El campo NumberOfFats describe cuántas FAT contiene esta región. Los valores válidos para el campo NumberOfFats son 1 y 2. Por lo tanto, la subregión First FAT siempre contiene un FAT. Si el campo NumberOfFats es dos, la subregión Second FAT también contiene un FAT.
El campo ActiveFat del campo VolumeFlags describe qué FAT está activo. Solo el campo VolumeFlags del sector de arranque principal es actual. Las implementaciones tratarán la FAT que no está activa como obsoleta. El uso de FAT inactivo y el cambio entre fats es específico de la implementación.
4.1 Primera y segunda subárbol FAT
Un FAT describirá las cadenas de clúster en el montón de clústeres (consulte la tabla 11). Una cadena de clústeres es una serie de clústeres que proporciona espacio para registrar el contenido de archivos, directorios y otras estructuras del sistema de archivos. Un FAT representa una cadena de clústeres como una lista vinculada de forma singly de índices de clúster. Con la excepción de las dos primeras entradas, cada entrada de un FAT representa exactamente un clúster.
Tabla 11 Estructura de tabla de asignación de archivos
Nombre del campo | Offset (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
FatEntry[0] | 0 | 4 | Este campo es obligatorio y la sección 4.1.1 define su contenido. |
FatEntry[1] | 4 | 4 | Este campo es obligatorio y la sección 4.1.2 define su contenido. |
FatEntry[2] | 8 | 4 | Este campo es obligatorio y la sección 4.1.3 define su contenido. |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | Este campo es obligatorio y la sección 4.1.3 define su contenido. ClusterCount + 1 nunca puede superar FFFFFFF6h. Nota: Los sectores principal y de arranque de copia de seguridad contienen el campo ClusterCount. |
ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4) | Este campo es obligatorio y su contenido, si existe, no está definido. Nota: Los sectores principal y de arranque de copia de seguridad contienen los campos ClusterCount, FatLength y BytesPerSectorShift. |
4.1.1 FatEntry[0] Campo
El campo FatEntry[0] describirá el tipo de medio en el primer byte (el byte de orden inferior) y contendrá FFh en los tres bytes restantes.
El tipo de medio (el primer byte) debe ser F8h.
4.1.2 FatEntry[1] Campo
El campo FatEntry[1] solo existe debido a la prioridad histórica y no describe nada de interés.
El valor válido para este campo es FFFFFFFFh. Las implementaciones inicializarán este campo en su valor prescrito y no deben utilizar este campo para ningún propósito. Las implementaciones no deben interpretar este campo y conservarán su contenido en las operaciones que modifican los campos circundantes.
4.1.3 FatEntry[2] ... FatEntry[ClusterCount+1] Fields
Cada campo FatEntry de esta matriz representará un clúster en el montón de clústeres. FatEntry[2] representa el primer clúster del montón de clústeres y FatEntry[ClusterCount+1] representa el último clúster del montón de clústeres.
El intervalo válido de valores para estos campos será:
Entre 2 y ClusterCount + 1, ambos inclusive, que apunta a la siguiente FatEntry en la cadena de clústeres especificada; el objeto FatEntry dado no señalará a fatEntry que lo preceda en la cadena de clústeres especificada.
Exactamente FFFFFFF7h, que marca el clúster correspondiente de FatEntry dado como "malo"
Exactamente FFFFFFFFh, que marca el clúster correspondiente de FatEntry dado como el último clúster de una cadena de clústeres; este es el único valor válido para el último FatEntry de cualquier cadena de clústeres determinada.
5 Región de datos
La región De datos contiene el montón de clústeres, que proporciona espacio administrado para estructuras, directorios y archivos del sistema de archivos.
5.1 Subregión del montón de clústeres
La estructura del montón de clústeres es muy sencilla (consulte la tabla 12); cada serie consecutiva de sectores describe un clúster, como define el campo SectoresPerClusterShift. Lo importante es que el primer clúster del montón de clústeres tiene el índice dos, que corresponde directamente al índice de FatEntry[2].
En un volumen exFAT, un mapa de bits de asignación (consulte la sección 7.1.5) mantiene el registro del estado de asignación de todos los clústeres. Se trata de una diferencia significativa de las predecesoras de exFAT (FAT12, FAT16 y FAT32), en las que un FAT mantuvo un registro del estado de asignación de todos los clústeres en el montón del clúster.
Tabla 12 Estructura del montón de clústeres
Nombre del campo | Offset (sector) |
Tamaño (sectores) |
Comentarios |
---|---|---|---|
Clúster[2] | ClusterHeapOffset | 2SectoresPerClusterShift | Este campo es obligatorio y la sección 5.1.1 define su contenido. Nota: Los sectores principal y de arranque de copia de seguridad contienen los campos ClusterHeapOffset y SectorsPerClusterShift. |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2SectoresPerClusterShift | 2SectoresPerClusterShift | Este campo es obligatorio y la sección 5.1.1 define su contenido. Nota: Los sectores de arranque principal y de copia de seguridad contienen los campos ClusterCount, ClusterHeapOffset y SectorsPerClusterShift. |
5.1.1 Clúster[2] ... Cluster[ClusterCount+1] Fields
Cada campo Cluster de esta matriz es una serie de sectores contiguos, cuyo tamaño está definido por el campo SectorsPerClusterShift.
6 Estructura de directorios
El sistema de archivos exFAT usa un enfoque de árbol de directorios para administrar las estructuras y archivos del sistema de archivos que existen en el montón de clústeres. Los directorios tienen una relación uno a varios entre los elementos primarios y secundarios en el árbol de directorios.
El directorio al que hace referencia el campo FirstClusterOfRootDirectory es la raíz del árbol de directorios. Todos los demás directorios descienden del directorio raíz de una manera vinculada singly.
Cada directorio consta de una serie de entradas de directorio (consulte la tabla 13).
Una o varias entradas de directorio se combinan en un conjunto de entradas de directorio que describe algo de interés, como una estructura del sistema de archivos, un subdirectorio o un archivo.
Tabla 13 Estructura de directorios
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
DirectoryEntry[0] | 0 | 32 | Este campo es obligatorio y la sección 6.1 define su contenido. |
. . . |
. . . |
. . . |
. . . |
DirectoryEntry[N–1] | (N – 1) * 32 | 32 | Este campo es obligatorio y la sección 6.1 define su contenido. N, el número de campos DirectoryEntry es el tamaño, en bytes, de la cadena de clústeres que contiene el directorio especificado, dividido por el tamaño de un campo DirectoryEntry, 32 bytes. |
6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]
Cada campo DirectoryEntry de esta matriz deriva de la plantilla DirectoryEntry genérico (consulte la sección 6.2).
6.2 Plantilla de DirectoryEntry genérica
La plantilla Generic DirectoryEntry proporciona la definición base para las entradas de directorio (vea la tabla 14). Todas las estructuras de entrada de directorio derivan de esta plantilla y solo las estructuras de entrada de directorio definidas por Microsoft son válidas (exFAT no tiene disposiciones para las estructuras de entrada de directorio definidas por el fabricante, excepto según se define en la sección 7.8 y la sección 7.9). La capacidad de interpretar la plantilla Generic DirectoryEntry es obligatoria.
Tabla 14 Generic DirectoryEntry Template
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 6.2.1 define su contenido. |
CustomDefined | 1 | 19 | Este campo es obligatorio y las estructuras que derivan de esta plantilla pueden definir su contenido. |
FirstCluster | 20 | 4 | Este campo es obligatorio y la sección 6.2.2 define su contenido. |
DataLength | 24 | 8 | Este campo es obligatorio y la sección 6.2.3 define su contenido. |
6.2.1 Campo EntryType
El campo EntryType tiene tres modos de uso que define el valor del campo (vea la lista siguiente).
00h, que es un marcador de fin de directorio y se aplican las condiciones siguientes:
Todos los demás campos de DirectoryEntry especificados están realmente reservados.
Todas las entradas de directorio posteriores del directorio especificado también son marcadores de fin de directorio
Los marcadores de fin de directorio solo son válidos fuera de los conjuntos de entradas de directorio
Las implementaciones pueden sobrescribir los marcadores de fin de directorio según sea necesario.
Entre 01h y 7Fh, que es un marcador de entrada de directorio sin usar y se aplican las condiciones siguientes:
Todos los demás campos del objeto DirectoryEntry especificados no están definidos
Las entradas de directorio sin usar solo son válidas fuera de los conjuntos de entradas de directorio
Las implementaciones pueden sobrescribir entradas de directorio sin usar según sea necesario.
Este intervalo de valores corresponde al campo InUse (vea la sección 6.2.1.4) que contiene el valor 0.
Entre 81h y FFh, que es una entrada de directorio regular y se aplican las condiciones siguientes:
El contenido del campo EntryType (vea la tabla 15) determina el diseño del resto de la estructura DirectoryEntry.
Este intervalo de valores, y solo este intervalo de valores, son válidos dentro de un conjunto de entradas de directorio.
Este intervalo de valores corresponde directamente al campo InUse (vea la sección 6.2.1.4) que contiene el valor 1.
Para evitar modificaciones en el campo InUse (vea sección 6.2.1.4) da lugar erróneamente a un marcador de fin de directorio, el valor 80h no es válido.
Tabla 15 Estructura de campo EntryType genérico
Nombre del campo | Offset (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
TypeCode | 0 | 5 | Este campo es obligatorio y la sección 6.2.1.1 define su contenido. |
TypeImportance | 5 | 1 | Este campo es obligatorio y la sección 6.2.1.2 define su contenido. |
TypeCategory | 6 | 1 | Este campo es obligatorio y la sección 6.2.1.3 define su contenido. |
InUse | 7 | 1 | Este campo es obligatorio y la sección 6.2.1.4 define su contenido. |
Campo TypeCode 6.2.1.1
El campo TypeCode describe parcialmente el tipo específico de la entrada de directorio especificada. Este campo, además de los campos TypeImportance y TypeCategory (vea sección 6.2.1.2 y sección 6.2.1.3, respectivamente) identifican de forma única el tipo de la entrada de directorio especificada.
Todos los valores posibles de este campo son válidos, a menos que los campos TypeImportance y TypeCategory contengan el valor 0; en ese caso, el valor 0 no es válido para este campo.
6.2.1.2 Campo TypeImportance
El campo TypeImportance describirá la importancia de la entrada de directorio especificada.
Los valores válidos para este campo serán:
0, lo que significa que la entrada de directorio determinada es crítica (consulte la sección 6.3.1.2.1 y la sección 6.4.1.2.1 para las entradas críticas del directorio principal y crítico, respectivamente)
1, lo que significa que la entrada de directorio especificada es benigna (consulte la sección 6.3.1.2.2 y la sección 6.4.1.2.2 para las entradas de directorio principal e benignas, respectivamente)
6.2.1.3 Campo TypeCategory
El campo TypeCategory describirá la categoría de la entrada de directorio especificada.
Los valores válidos para este campo serán:
0, lo que significa que la entrada de directorio especificada es principal (consulte la sección 6.3)
1, lo que significa que la entrada de directorio especificada es secundaria (consulte la sección 6.4)
6.2.1.4 Campo inUse
El campo InUse describirá si la entrada de directorio especificada en uso o no.
Los valores válidos para este campo serán:
0, lo que significa que la entrada de directorio especificada no está en uso; esto significa que la estructura especificada es realmente una entrada de directorio sin usar.
1, lo que significa que la entrada de directorio especificada está en uso; esto significa que la estructura especificada es una entrada de directorio regular.
6.2.2 Campo FirstCluster
El campo FirstCluster contendrá el índice del primer clúster de una asignación en el montón de clúster asociado a la entrada de directorio especificada.
El intervalo válido de valores para este campo será:
Exactamente 0, lo que significa que no existe ninguna asignación de clúster
Entre 2 y ClusterCount + 1, que es el intervalo de índices de clúster válidos
Las estructuras que derivan de esta plantilla pueden redefinir los campos FirstCluster y DataLength, si una asignación de clúster no es compatible con la estructura derivada.
6.2.3 Campo DataLength
El campo DataLength describe el tamaño, en bytes, de los datos que contiene la asignación de clúster asociada.
El intervalo válido de valor para este campo es:
Al menos 0; si el campo FirstCluster contiene el valor 0, el único valor válido de este campo es 0.
Como máximo ClusterCount * 2SectoresPerClusterShift* 2BytesPerSectorShift
Las estructuras que derivan de esta plantilla pueden redefinir los campos FirstCluster y DataLength, si una asignación de clúster no es posible para la estructura derivada.
6.3 Plantilla de directorio principal genéricoEntry
La primera entrada de directorio en un conjunto de entradas de directorio será una entrada de directorio principal. Todas las entradas de directorio posteriores, si las hay, en el conjunto de entradas de directorio serán entradas de directorio secundarias (consulte la sección 6.4).
La capacidad de interpretar la plantilla Generic Primary DirectoryEntry es obligatoria.
Todas las estructuras de entrada de directorio principal derivan de la plantilla Directorio principal genéricoEntry (consulte la tabla 16), que se deriva de la plantilla DirectoryEntry genérica (consulte la sección 6.2).
Tabla 16 Plantilla de directorio principal genéricoEntry
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 6.3.1 define su contenido. |
SecondaryCount | 1 | 1 | Este campo es obligatorio y la sección 6.3.2 define su contenido. |
SetChecksum | 2 | 2 | Este campo es obligatorio y la sección 6.3.3 define su contenido. |
GeneralPrimaryFlags | 4 | 2 | Este campo es obligatorio y la sección 6.3.4 define su contenido. |
CustomDefined | 6 | 14 | Este campo es obligatorio y las estructuras que derivan de esta plantilla definen su contenido. |
FirstCluster | 20 | 4 | Este campo es obligatorio y la sección 6.3.5 define su contenido. |
DataLength | 24 | 8 | Este campo es obligatorio y la sección 6.3.6 define su contenido. |
Campo EntryType 6.3.1
El campo EntryType se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.1).
Campo TypeCode 6.3.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.1.1).
6.3.1.2 Campo TypeImportance
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.1.2).
6.3.1.2.1 Entradas críticas del directorio principal
Las entradas críticas del directorio principal contienen información que es fundamental para la administración adecuada de un volumen exFAT. Solo el directorio raíz contiene entradas críticas del directorio principal (las entradas del directorio de archivos son una excepción, vea sección 7.4).
La definición de entradas críticas del directorio principal se correlaciona con el número de revisión de exFAT principal. Las implementaciones admitirán todas las entradas críticas del directorio principal y solo registrarán las estructuras críticas de entrada de directorio principal que defina esta especificación.
6.3.1.2.2 Entradas de directorio primario benigno
Las entradas de directorio principal benignas contienen información adicional que puede ser útil para administrar un volumen exFAT. Cualquier directorio puede contener entradas de directorio principal benignas.
La definición de entradas de directorio principal benignas se correlaciona con el número de revisión exFAT secundario. La compatibilidad con cualquier entrada de directorio principal benigna de esta especificación, o cualquier especificación posterior, define es opcional. Una entrada de directorio principal benigna no reconocida representa toda la entrada de directorio establecida como no reconocida (más allá de la definición de las plantillas de entrada de directorio aplicables).
6.3.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.1.3).
Para esta plantilla, el valor válido para este campo será 0.
6.3.1.4 InUse field
El campo InUse se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.1.4).
6.3.2 Campo SecondaryCount
El campo SecondaryCount describirá el número de entradas del directorio secundario que siguen inmediatamente a la entrada de directorio principal especificada. Estas entradas de directorio secundario, junto con la entrada de directorio principal especificada, componen el conjunto de entradas de directorio.
El intervalo válido de valores para este campo será:
Al menos 0, lo que significa que esta entrada de directorio principal es la única entrada del conjunto de entradas de directorio.
Como máximo 255, lo que significa que las siguientes 255 entradas de directorio y esta entrada de directorio principal componen el conjunto de entradas de directorio.
Las estructuras críticas de entrada de directorio principal que derivan de esta plantilla pueden redefinir los campos SecondaryCount y SetChecksum.
6.3.3 Campo SetChecksum
El campo SetChecksum contendrá la suma de comprobación de todas las entradas de directorio del conjunto de entradas de directorio especificado. Sin embargo, la suma de comprobación excluye este campo (vea la figura 2). Las implementaciones comprobarán que el contenido de este campo es válido antes de usar cualquier otra entrada de directorio en el conjunto de entradas de directorio especificado.
Las estructuras críticas de entrada de directorio principal que derivan de esta plantilla pueden redefinir los campos SecondaryCount y SetChecksum.
Figura 2 Cálculo de EntrySetChecksum
UInt16 EntrySetChecksum
(
UCHAR * Entries, // points to an in-memory copy of the directory entry set
UCHAR SecondaryCount
)
{
UInt16 NumberOfBytes = ((UInt16)SecondaryCount + 1) * 32;
UInt16 Checksum = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 2) || (Index == 3))
{
continue;
}
Checksum = ((Checksum&1) ? 0x8000 : 0) + (Checksum>>1) + (UInt16)Entries[Index];
}
return Checksum;
}
6.3.4 Campo GeneralPrimaryFlags
El campo GeneralPrimaryFlags contiene marcas (vea la tabla 17).
Las estructuras críticas de entrada de directorio principal que derivan de esta plantilla pueden redefinir este campo.
Tabla 17 Estructura de campo GeneralPrimaryFlags genérica
Nombre del campo | Offset (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
AllocationPossible | 0 | 1 | Este campo es obligatorio y la sección 6.3.4.1 define su contenido. |
NoFatChain | 1 | 1 | Este campo es obligatorio y la sección 6.3.4.2 define su contenido. |
CustomDefined | 2 | 14 | Este campo es obligatorio y las estructuras que derivan de esta plantilla pueden definir este campo. |
6.3.4.1 Campo AllocationPossible
El campo AllocationPossible describirá si es posible o no una asignación en el montón de clústeres para la entrada de directorio especificada.
Los valores válidos para este campo serán:
0, lo que significa que una asignación asociada de clústeres no es posible y los campos FirstCluster y DataLength son realmente indefinidos (las estructuras que derivan de esta plantilla pueden redefinir esos campos).
1, lo que significa que es posible una asignación asociada de clústeres y los campos FirstCluster y DataLength son los definidos
6.3.4.2 Campo NoFatChain
El campo NoFatChain indicará si el FAT activo describe o no la cadena de clústeres de la asignación especificada.
Los valores válidos para este campo serán:
0, lo que significa que las entradas FAT correspondientes para la cadena de clústeres de la asignación son válidas y las implementaciones las interpretarán; si el campo AllocationPossible contiene el valor 0, o si el campo AllocationPossible contiene el valor 1 y el campo FirstCluster contiene el valor 0, el único valor válido de este campo es 0.
1, lo que significa que la asignación asociada es una serie contigua de clústeres; las entradas FAT correspondientes para los clústeres no son válidas y las implementaciones no las interpretarán; las implementaciones pueden usar la siguiente ecuación para calcular el tamaño de la asignación asociada: DataLength / (2SectoresPerClusterShift* 2BytesPerSectorShift) redondeado al entero más cercano
Si las estructuras de entrada de directorio principal críticas que derivan de esta plantilla vuelven a definir el campo GeneralPrimaryFlags, las entradas FAT correspondientes para cualquier cadena de clústeres de asignación asociada son válidas.
6.3.5 FirstCluster Field
El campo FirstCluster se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.2).
Si el bit NoFatChain es 1, FirstCluster debe apuntar a un clúster válido en el montón del clúster.
Las estructuras críticas de entrada de directorio principal que derivan de esta plantilla pueden redefinir los campos FirstCluster y DataLength. Otras estructuras que derivan de esta plantilla pueden redefinir los campos FirstCluster y DataLength solo si el campo AllocationPossible contiene el valor 0.
6.3.6 Campo DataLength
El campo DataLength se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.3).
Si el bit NoFatChain es 1, DataLength no debe ser cero. Si el campo FirstCluster es cero, DataLength también debe ser cero.
Las estructuras críticas de entrada de directorio principal que derivan de esta plantilla pueden redefinir los campos FirstCluster y DataLength. Otras estructuras que derivan de esta plantilla pueden redefinir los campos FirstCluster y DataLength solo si el campo AllocationPossible contiene el valor 0.
6.4 Plantilla de directorio secundario genéricoEntry
El propósito central de las entradas de directorio secundario es proporcionar información adicional sobre un conjunto de entradas de directorio. La capacidad de interpretar la plantilla Generic Secondary DirectoryEntry es obligatoria.
La definición de entradas de directorio secundaria críticas e benignas se correlaciona con el número de revisión exFAT secundario. La compatibilidad con cualquier entrada crítica o benigna de directorio secundario esta especificación, o especificaciones posteriores, define es opcional.
Todas las estructuras de entrada de directorio secundario derivan de la plantilla Generic Secondary DirectoryEntry (consulte la tabla 18), que se deriva de la plantilla Generic DirectoryEntry (consulte la sección 6.2).
Tabla 18 Directorio secundario genérico Template
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 6.4.1 define su contenido. |
GeneralSecondaryFlags | 1 | 1 | Este campo es obligatorio y la sección 6.4.2 define su contenido. |
CustomDefined | 2 | 18 | Este campo es obligatorio y las estructuras que derivan de esta plantilla definen su contenido. |
FirstCluster | 20 | 4 | Este campo es obligatorio y la sección 6.4.3 define su contenido. |
DataLength | 24 | 8 | Este campo es obligatorio y la sección 6.4.4 define su contenido. |
6.4.1 Campo EntryType
El campo EntryType se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.1).
Campo TypeCode 6.4.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.1.1).
6.4.1.2 TypeImportance Field
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.1.2).
6.4.1.2.1 Entradas críticas del directorio secundario
Las entradas críticas del directorio secundario contienen información que es fundamental para la administración adecuada de su conjunto de entradas de directorio contenedor. Aunque la compatibilidad con cualquier entrada de directorio secundaria crítica específica es opcional, una entrada de directorio crítica no reconocida representa todo el conjunto de entradas de directorio como no reconocido (más allá de la definición de las plantillas de entrada de directorio aplicables).
Sin embargo, si un conjunto de entradas de directorio contiene al menos una entrada de directorio secundaria crítica que no reconoce una implementación, la implementación interpretará como máximo las plantillas de las entradas de directorio del conjunto de entradas de directorio y no los datos asociados a ninguna entrada de directorio del conjunto de entradas de directorio contienen (las entradas de directorio de archivos son una excepción, consulte la sección 7.4).
6.4.1.2.2 Entradas benignas del directorio secundario
Las entradas benignas del directorio secundario contienen información adicional que puede resultar útil para administrar su conjunto de entradas de directorio contenedor. La compatibilidad con cualquier entrada de directorio secundaria benigna específica es opcional. Las entradas de directorio secundario benignas no reconocidas no representan todo el conjunto de entradas de directorio como no reconocidas.
Las implementaciones pueden omitir cualquier entrada secundaria benigna que no reconozca.
6.4.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérico (consulte la sección 6.2.1.3).
Para esta plantilla, el valor válido para este campo es 1.
6.4.1.4 InUse field
El campo InUse se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.1.4).
6.4.2 Campo GeneralSecondaryFlags
El campo GeneralSecondaryFlags contiene marcas (vea la tabla 19).
Tabla 19 General GenéricoSecondaryFlags (estructura de campo)
Nombre del campo | Offset (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
AllocationPossible | 0 | 1 | Este campo es obligatorio y la sección 6.4.2.1 define su contenido. |
NoFatChain | 1 | 1 | Este campo es obligatorio y la sección 6.4.2.2 define su contenido. |
CustomDefined | 2 | 6 | Este campo es obligatorio y las estructuras que derivan de esta plantilla pueden definir este campo. |
6.4.2.1 Campo AllocationPossible
El campo AllocationPossible tendrá la misma definición que el mismo campo con nombre en la plantilla Directorio principal genéricoEntry (vea la sección 6.3.4.1).
6.4.2.2 Campo NoFatChain
El campo NoFatChain tendrá la misma definición que el mismo campo con nombre en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.4.2).
6.4.3 FirstCluster Field
El campo FirstCluster se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.2).
Si el bit NoFatChain es 1, FirstCluster debe apuntar a un clúster válido en el montón del clúster.
6.4.4 Campo DataLength
El campo DataLength se ajustará a la definición proporcionada en la plantilla DirectoryEntry genérica (consulte la sección 6.2.3).
Si el bit NoFatChain es 1, DataLength no debe ser cero. Si el campo FirstCluster es cero, DataLength también debe ser cero.
7 Definiciones de entrada de directorio
La revisión 1.00 del sistema de archivos exFAT define las siguientes entradas de directorio:
Principal crítico
Mapa de bits de asignación (sección 7.1)
Tabla up-case (Sección 7.2)
Etiqueta de volumen (sección 7.3)
Archivo (sección 7.4)
Primaria benigna
GUID de volumen (sección 7.5)
Relleno TexFAT (Sección 7.10)
Secundaria crítica
Extensión de flujo (sección 7.6)
Nombre de archivo (sección 7.7)
Secundario benigno
Extensión de proveedor (sección 7.8)
Asignación de proveedores (sección 7.9)
7.1 Entrada de directorio de mapa de bits de asignación
En el sistema de archivos exFAT, un FAT no describe el estado de asignación de clústeres; en su lugar, lo hace un mapa de bits de asignación. Los mapas de bits de asignación existen en el montón de clústeres (consulte la sección 7.1.5) y tienen entradas de directorio principal críticas correspondientes en el directorio raíz (consulte la tabla 20).
El campo NumberOfFats determina el número de entradas de directorio de mapa de bits de asignación válidas en el directorio raíz. Si el campo NumberOfFats contiene el valor 1, el único número válido de entradas del directorio mapa de bits de asignación es 1. Además, la entrada del directorio Mapa de bits de asignación solo es válida si describe el mapa de bits de primera asignación (vea la sección 7.1.2.1). Si el campo NumberOfFats contiene el valor 2, el único número válido de entradas del directorio mapa de bits de asignación es 2. Además, las dos entradas del directorio mapa de bits de asignación solo son válidas si se describe el mapa de bits de primera asignación y el otro se describe el mapa de bits de asignación segundo.
Tabla 20 Estructura DirectoryEntry de mapa de bits de asignación
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 7.1.1 define su contenido. |
BitmapFlags | 1 | 1 | Este campo es obligatorio y la sección 7.1.2 define su contenido. |
Reservado | 2 | 18 | Este campo es obligatorio y su contenido está reservado. |
FirstCluster | 20 | 4 | Este campo es obligatorio y la sección 7.1.3 define su contenido. |
DataLength | 24 | 8 | Este campo es obligatorio y la sección 7.1.4 define su contenido. |
7.1.1 Campo EntryType
El campo EntryType se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1).
Campo TypeCode 7.1.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.1).
Para una entrada de directorio mapa de bits de asignación, el valor válido para este campo es 1.
7.1.1.2 Campo TypeImportance
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.2).
Para una entrada de directorio mapa de bits de asignación, el valor válido para este campo es 0.
7.1.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.3).
7.1.1.4 Campo InUse
El campo InUse se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.4).
Campo BitmapFlags 7.1.2
El campo BitmapFlags contiene marcas (vea la tabla 21).
Tabla 21 Estructura de campo BitmapFlags
Nombre del campo | Offset (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
BitmapIdentifier | 0 | 1 | Este campo es obligatorio y la sección 7.1.2.1 define su contenido. |
Reservado | 1 | 7 | Este campo es obligatorio y su contenido está reservado. |
7.1.2.1 Campo BitmapIdentifier
El campo BitmapIdentifier indicará qué mapa de bits de asignación describe la entrada de directorio especificada. Las implementaciones usarán el mapa de bits de primera asignación junto con la Primera FAT y utilizarán el mapa de bits de segunda asignación junto con la Segunda FAT. El campo ActiveFat describe qué mapa de bits de asignación y FAT están activos.
Los valores válidos para este campo serán:
0, lo que significa que la entrada de directorio especificada describe el mapa de bits de primera asignación
1, lo que significa que la entrada de directorio especificada describe el mapa de bits de segunda asignación y solo es posible cuando NumberOfFats contiene el valor 2.
7.1.3 Campo FirstCluster
El campo FirstCluster se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.5).
Este campo contiene el índice del primer clúster de la cadena de clústeres, como se describe en FAT, que hospeda el mapa de bits de asignación.
7.1.4 Campo DataLength
El campo DataCluster se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.6).
Mapa de bits de asignación 7.1.5
Un mapa de bits de asignación registra el estado de asignación de los clústeres en el montón de clústeres. Cada bit de un mapa de bits de asignación indica si su clúster correspondiente está disponible para la asignación o no.
Un mapa de bits de asignación representa clústeres del índice más bajo al más alto (consulte la tabla 22). Por motivos históricos, el primer clúster tiene el índice 2. Nota: el primer bit del mapa de bits es el bit de orden más bajo del primer byte.
Tabla 22 Estructura de mapa de bits de asignación
Nombre del campo | Offset (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | Este campo es obligatorio y la sección 7.1.5.1 define su contenido. |
. . . |
. . . |
. . . |
. . . |
BitmapEntry[ClusterCount+1] | ClusterCount: 1 | 1 | Este campo es obligatorio y la sección 7.1.5.1 define su contenido. Nota: los sectores principal y de arranque de copia de seguridad contienen el campo ClusterCount. |
Reservado | ClusterCount | (DataLength * 8): ClusterCount | Este campo es obligatorio y su contenido, si existe, están reservados. Nota: los sectores principal y de arranque de copia de seguridad contienen el campo ClusterCount. |
7.1.5.1 BitmapEntry[2] ... BitmapEntry[ClusterCount+1] Campos
Cada campo BitmapEntry de esta matriz representa un clúster en el montón de clústeres. BitmapEntry[2] representa el primer clúster del montón de clústeres y BitmapEntry[ClusterCount+1] representa el último clúster del montón del clúster.
Los valores válidos para estos campos serán:
0, que describe el clúster correspondiente como disponible para la asignación
1, que describe el clúster correspondiente como no disponible para la asignación (es posible que una asignación de clúster ya consuma el clúster correspondiente o el FAT activo pueda describir el clúster correspondiente como incorrecto)
7.2 Entrada de directorio de tabla de mayúsculas y minúsculas
La tabla de mayúsculas y minúsculas define la conversión de minúsculas a caracteres mayúsculas. Esto es importante debido a que la entrada del directorio Nombre de archivo (consulte la sección 7.7) con caracteres Unicode y el sistema de archivos exFAT no distingue mayúsculas de minúsculas y conserva mayúsculas de minúsculas. La tabla de mayúsculas y minúsculas existe en el montón de clústeres (consulte la sección 7.2.5) y tiene una entrada de directorio principal crítica correspondiente en el directorio raíz (consulte la tabla 23). El número válido de entradas del directorio Tabla mayúsculas y minúsculas es 1.
Debido a la relación entre los nombres de archivo y tabla de mayúsculas y minúsculas, las implementaciones no deben modificar la tabla de mayúsculas y minúsculas, excepto como resultado de las operaciones de formato.
Tabla 23 Estructura de directorio de tabla de mayúsculas y minúsculas
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 7.2.1 define su contenido. |
Reserved1 | 1 | 3 | Este campo es obligatorio y su contenido está reservado. |
TableChecksum | 4 | 4 | Este campo es obligatorio y la sección 7.2.2 define su contenido. |
Reserved2 | 8 | 12 | Este campo es obligatorio y su contenido está reservado. |
FirstCluster | 20 | 4 | Este campo es obligatorio y la sección 7.2.3 define su contenido. |
DataLength | 24 | 8 | Este campo es obligatorio y la sección 7.2.4 define su contenido. |
Campo EntryType 7.2.1
El campo EntryType se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1).
Campo TypeCode 7.2.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.1).
Para la entrada del directorio Tabla mayúsculas y minúsculas, el valor válido para este campo es 2.
7.2.1.2 Campo TypeImportance
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.2).
Para la entrada del directorio Tabla mayúsculas y minúsculas, el valor válido para este campo es 0.
7.2.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.3).
7.2.1.4 Campo InUse
El campo InUse se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.4).
7.2.2 Campo TableChecksum
El campo TableChecksum contiene la suma de comprobación de la tabla de mayúsculas y minúsculas (que describen los campos FirstCluster y DataLength). Las implementaciones comprobarán que el contenido de este campo es válido antes de usar la tabla de mayúsculas y minúsculas.
Figura 3 Cálculo de tableChecksum
UInt32 TableChecksum
(
UCHAR * Table, // points to an in-memory copy of the up-case table
UInt64 DataLength
)
{
UInt32 Checksum = 0;
UInt64 Index;
for (Index = 0; Index < DataLength; Index++)
{
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Table[Index];
}
return Checksum;
}
7.2.3 Campo FirstCluster
El campo FirstCluster se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.5).
Este campo contiene el índice del primer clúster de la cadena de clústeres, como se describe en FAT, que hospeda la tabla de mayúsculas y minúsculas.
7.2.4 Campo DataLength
El campo DataCluster se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.6).
7.2.5 Tabla de mayúsculas y minúsculas
Una tabla de mayúsculas y minúsculas es una serie de asignaciones de caracteres Unicode. Una asignación de caracteres consta de un campo de 2 bytes, con el índice del campo en la tabla de mayúsculas y minúsculas que representa el carácter Unicode que se va a agregar y el campo de 2 bytes que representa el carácter Unicode en mayúsculas y minúsculas.
Los primeros 128 caracteres Unicode tienen asignaciones obligatorias (consulte la tabla 24). Una tabla de mayúsculas y minúsculas que tiene cualquier otra asignación de caracteres para cualquiera de los primeros 128 caracteres Unicode no es válida.
Las implementaciones que solo admiten caracteres del intervalo de asignación obligatorio pueden omitir las asignaciones del resto de la tabla de mayúsculas y minúsculas. Dichas implementaciones solo usarán caracteres del intervalo de asignación obligatorio al crear o cambiar el nombre de los archivos (a través de la entrada del directorio Nombre de archivo, consulte la sección 7.7). Cuando se apliquen mayúsculas y minúsculas a los nombres de archivo existentes, estas implementaciones no incluirán caracteres en mayúsculas y minúsculas del intervalo de asignación no obligatorio, pero los dejará intactos en el nombre de archivo en mayúsculas y minúsculas resultante (esto es una mayúscula y minúscula parcial). Al comparar nombres de archivo, estas implementaciones tratarán los nombres de archivo que difieren del nombre en comparación solo por caracteres Unicode del intervalo de asignación no obligatorio como equivalente. Aunque estos nombres de archivo solo son potencialmente equivalentes, estas implementaciones no pueden garantizar que el nombre de archivo totalmente en mayúsculas y minúsculas no entre en conflicto con el nombre en comparación.
Tabla 24 Entradas obligatorias de la tabla 128 mayúsculas y minúsculas
Índice de tabla | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
(Nota: las entradas con asignaciones de mayúsculas y minúsculas que no son de identidad están en negrita)
Al dar formato a un volumen, las implementaciones pueden generar una tabla de mayúsculas y minúsculas en un formato comprimido mediante la compresión de asignación de identidades, ya que una gran parte del espacio de caracteres Unicode no tiene ningún concepto de caso (lo que significa que los caracteres "minúsculas" y "mayúsculas" son equivalentes). Las implementaciones comprimen una tabla de mayúsculas y minúsculas mediante la representación de una serie de asignaciones de identidad con el valor FFFFh seguido del número de asignaciones de identidad.
Por ejemplo, una implementación puede representar las primeras asignaciones de caracteres de 100 (64h) con las ocho entradas siguientes de una tabla de mayúsculas y minúsculas comprimidas:
FFFFh, 0061h, 0041h, 0042h, 0043h
Las dos primeras entradas indican que los primeros 97 (61h) caracteres (de 0000h a 0060h) tienen asignaciones de identidad. Los caracteres siguientes, de 0061h a 0063h, se asignan a los caracteres 0041h a 0043h, respectivamente.
La capacidad de proporcionar una tabla de mayúsculas y minúsculas comprimida al dar formato a un volumen es opcional. Sin embargo, la capacidad de interpretar una tabla de mayúsculas y minúsculas sin comprimir es obligatoria. El valor del campo TableChecksum siempre se ajusta a cómo existe la tabla de mayúsculas y minúsculas en el volumen, que puede estar en formato comprimido o sin comprimir.
7.2.5.1 Tabla de mayúsculas y minúsculas recomendada
Al dar formato a un volumen, las implementaciones deben registrar la tabla de mayúsculas y minúsculas recomendada en formato comprimido (consulte la tabla 25), para la que el valor del campo TableChecksum es E619D30Dh.
Si una implementación define su propia tabla de mayúsculas y minúsculas, ya sea comprimida o sin comprimir, esa tabla abarcará el intervalo de caracteres Unicode completo (de códigos de caracteres de 0000h a FFFFh inclusivo).
Tabla 25 Tabla de mayúsculas y minúsculas recomendada en formato comprimido
Desplazamiento sin formato | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
0080h | 0080h | 0081h | 0082h | 0083h | 0084h | 0085h | 0086h | 0087h |
0088h | 0088h | 0089h | 008Ah | 008Bh | 008Ch | 008Dh | 008Eh | 008Fh |
0090h | 0090h | 0091h | 0092h | 0093h | 0094h | 0095h | 0096h | 0097h |
0098h | 0098h | 0099h | 009Ah | 009Bh | 009Ch | 009Dh | 009Eh | 009Fh |
00A0h | 00A0h | 00A1h | 00A2h | 00A3h | 00A4h | 00A5h | 00A6h | 00A7h |
00A8h | 00A8h | 00A9h | 00AAh | 00ABh | 00ACh | 00ADh | 00AEh | 00AFh |
00B0h | 00B0h | 00B1h | 00B2h | 00B3h | 00B4h | 00B5h | 00B6h | 00B7h |
00B8h | 00B8h | 00B9h | 00BAh | 00BBh | 00BCh | 00BDh | 00BEh | 00BFh |
00C0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00C8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00D0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00D7h |
00D8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 00DFh |
00E0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00E8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00F0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00F7h |
00F8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 0178h |
0100h | 0100h | 0100h | 0102h | 0102h | 0104h | 0104h | 0106h | 0106h |
0108h | 0108h | 0108h | 010Ah | 010Ah | 010Ch | 010Ch | 010Eh | 010Eh |
0110h | 0110h | 0110h | 0112h | 0112h | 0114h | 0114h | 0116h | 0116h |
0118h | 0118h | 0118h | 011Ah | 011Ah | 011Ch | 011Ch | 011Eh | 011Eh |
0120h | 0120h | 0120h | 0122h | 0122h | 0124h | 0124h | 0126h | 0126h |
0128h | 0128h | 0128h | 012Ah | 012Ah | 012Ch | 012Ch | 012Eh | 012Eh |
0130h | 0130h | 0131h | 0132h | 0132h | 0134h | 0134h | 0136h | 0136h |
0138h | 0138h | 0139h | 0139h | 013Bh | 013Bh | 013Dh | 013Dh | 013Fh |
0140h | 013Fh | 0141h | 0141h | 0143h | 0143h | 0145h | 0145h | 0147h |
0148h | 0147h | 0149h | 014Ah | 014Ah | 014Ch | 014Ch | 014Eh | 014Eh |
0150h | 0150h | 0150h | 0152h | 0152h | 0154h | 0154h | 0156h | 0156h |
0158h | 0158h | 0158h | 015Ah | 015Ah | 015Ch | 015Ch | 015Eh | 015Eh |
0160h | 0160h | 0160h | 0162h | 0162h | 0164h | 0164h | 0166h | 0166h |
0168h | 0168h | 0168h | 016Ah | 016Ah | 016Ch | 016Ch | 016Eh | 016Eh |
0170h | 0170h | 0170h | 0172h | 0172h | 0174h | 0174h | 0176h | 0176h |
0178h | 0178h | 0179h | 0179h | 017Bh | 017Bh | 017Dh | 017Dh | 017Fh |
0180h | 0243h | 0181h | 0182h | 0182h | 0184h | 0184h | 0186h | 0187h |
0188h | 0187h | 0189h | 018Ah | 018Bh | 018Bh | 018Dh | 018Eh | 018Fh |
0190h | 0190h | 0191h | 0191h | 0193h | 0194h | 01F6h | 0196h | 0197h |
0198h | 0198h | 0198h | 023Dh | 019Bh | 019Ch | 019Dh | 0220h | 019Fh |
01A0h | 01A0h | 01A0h | 01A2h | 01A2h | 01A4h | 01A4h | 01A6h | 01A7h |
01A8h | 01A7h | 01A9h | 01AAh | 01ABh | 01ACh | 01ACh | 01AEh | 01AFh |
01B0h | 01AFh | 01B1h | 01B2h | 01B3h | 01B3h | 01B5h | 01B5h | 01B7h |
01B8h | 01B8h | 01B8h | 01BAh | 01BBh | 01BCh | 01BCh | 01BEh | 01F7h |
01C0h | 01C0h | 01C1h | 01C2h | 01C3h | 01C4h | 01C5h | 01C4h | 01C7h |
01C8h | 01C8h | 01C7h | 01CAh | 01CBh | 01CAh | 01CDh | 01CDh | 01CFh |
01D0h | 01CFh | 01D1h | 01D1h | 01D3h | 01D3h | 01D5h | 01D5h | 01D7h |
01D8h | 01D7h | 01D9h | 01D9h | 01DBh | 01DBh | 018Eh | 01DEh | 01DEh |
01E0h | 01E0h | 01E0h | 01E2h | 01E2h | 01E4h | 01E4h | 01E6h | 01E6h |
01E8h | 01E8h | 01E8h | 01EAh | 01EAh | 01ECh | 01ECh | 01EEh | 01EEh |
01F0h | 01F0h | 01F1h | 01F2h | 01F1h | 01F4h | 01F4h | 01F6h | 01F7h |
01F8h | 01F8h | 01F8h | 01FAh | 01FAh | 01FCh | 01FCh | 01FEh | 01FEh |
0200h | 0200h | 0200h | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 0214h | 0216h | 0216h |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | 0226h | 0226h |
0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
02B8h | 02B8h | 02B9h | 02BAh | 02Bbh | 02BCh | 02BDh | 02BEh | 02BFh |
02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02FH |
0300h | 0300h | 0301h | 0302h | 0303h | 0304h | 0305h | 0306h | 0307h |
0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 0312h | 0313h | 0314h | 0315h | 0316h | 0317h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 0332h | 0333h | 0334h | 0335h | 0336h | 0337h |
0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 0346h | 0347h |
0348h | 0348h | 0349h | 034Ah | 034Bh | 034Ch | 034Dh | 034Eh | 034Fh |
0350h | 0350h | 0351h | 0352h | 0353h | 0354h | 0355h | 0356h | 0357h |
0358h | 0358h | 0359h | 035Ah | 035Bh | 035Ch | 035Dh | 035Eh | 035Fh |
0360h | 0360h | 0361h | 0362h | 0363h | 0364h | 0365h | 0366h | 0367h |
0368h | 0368h | 0369h | 036Ah | 036Bh | 036Ch | 036Dh | 036Eh | 036Fh |
0370h | 0370h | 0371h | 0372h | 0373h | 0374h | 0375h | 0376h | 0377h |
0378h | 0378h | 0379h | 037Ah | 03FDh | 03FEh | 03FFh | 037Eh | 037Fh |
0380h | 0380h | 0381h | 0382h | 0383h | 0384h | 0385h | 0386h | 0387h |
0388h | 0388h | 0389h | 038Ah | 038Bh | 038Ch | 038Dh | 038Eh | 038Fh |
0390h | 0390h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
0398h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03A0h | 03A0h | 03A1h | 03A2h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03A8h | 03A8h | 03A9h | 03AAh | 03ABh | 0386h | 0388h | 0389h | 038Ah |
03B0h | 03B0h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
03B8h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03C0h | 03A0h | 03A1h | 03A3h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03C8h | 03A8h | 03A9h | 03AAh | 03ABh | 038Ch | 038Eh | 038Fh | 03CFh |
03D0h | 03D0h | 03D1h | 03D2h | 03D3h | 03D4h | 03D5h | 03D6h | 03D7h |
03D8h | 03D8h | 03D8h | 03DAh | 03DAh | 03DCh | 03DCh | 03DEh | 03DEh |
03E0h | 03E0h | 03E0h | 03E2h | 03E2h | 03E4h | 03E4h | 03E6h | 03E6h |
03E8h | 03E8h | 03E8h | 03EAh | 03EAh | 03ECh | 03ECh | 03EEh | 03EEh |
03F0h | 03F0h | 03F1h | 03F9h | 03F3h | 03F4h | 03F5h | 03F6h | 03F7h |
03F8h | 03F7h | 03F9h | 03FAh | 03FAh | 03FCh | 03FDh | 03FEh | 03FFh |
0400h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0410h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0420h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0428h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0430h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0438h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0440h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0448h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0450h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0458h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0460h | 0460h | 0460h | 0462h | 0462h | 0464h | 0464h | 0466h | 0466h |
0468h | 0468h | 0468h | 046Ah | 046Ah | 046Ch | 046Ch | 046Eh | 046Eh |
0470h | 0470h | 0470h | 0472h | 0472h | 0474h | 0474h | 0476h | 0476h |
0478h | 0478h | 0478h | 047Ah | 047Ah | 047Ch | 047Ch | 047Eh | 047Eh |
0480h | 0480h | 0480h | 0482h | 0483h | 0484h | 0485h | 0486h | 0487h |
0488h | 0488h | 0489h | 048Ah | 048Ah | 048Ch | 048Ch | 048Eh | 048Eh |
0490h | 0490h | 0490h | 0492h | 0492h | 0494h | 0494h | 0496h | 0496h |
0498h | 0498h | 0498h | 049Ah | 049Ah | 049Ch | 049Ch | 049Eh | 049Eh |
04A0h | 04A0h | 04A0h | 04A2h | 04A2h | 04A4h | 04A4h | 04A6h | 04A6h |
04A8h | 04A8h | 04A8h | 04AAh | 04AAh | 04ACh | 04ACh | 04AEh | 04AEh |
04B0h | 04B0h | 04B0h | 04B2h | 04B2h | 04B4h | 04B4h | 04B6h | 04B6h |
04B8h | 04B8h | 04B8h | 04BAh | 04BAh | 04BCh | 04BCh | 04BEh | 04BEh |
04C0h | 04C0h | 04C1h | 04C1h | 04C3h | 04C3h | 04C5h | 04C5h | 04C7h |
04C8h | 04C7h | 04C9h | 04C9h | 04CBh | 04CBh | 04CDh | 04CDh | 04C0h |
04D0h | 04D0h | 04D0h | 04D2h | 04D2h | 04D4h | 04D4h | 04D6h | 04D6h |
04D8h | 04D8h | 04D8h | 04DAh | 04DAh | 04DCh | 04DCh | 04DEh | 04DEh |
04E0h | 04E0h | 04E0h | 04E2h | 04E2h | 04E4h | 04E4h | 04E6h | 04E6h |
04E8h | 04E8h | 04E8h | 04EAh | 04EAh | 04ECh | 04ECh | 04EEh | 04EEh |
04F0h | 04F0h | 04F0h | 04F2h | 04F2h | 04F4h | 04F4h | 04F6h | 04F6h |
04F8h | 04F8h | 04F8h | 04FAh | 04FAh | 04FCh | 04FCh | 04FEh | 04FEh |
0500h | 0500h | 0500h | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h | 0510h | 0510h | 0512h | 0512h | 0514h | 0515h | 0516h | 0517h |
0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 0521h | 0522h | 0523h | 0524h | 0525h | 0526h | 0527h |
0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
0530h | 0530h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0538h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0540h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0548h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0550h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | 0557h |
0558h | 0558h | 0559h | 055Ah | 055Bh | 055Ch | 055Dh | 055Eh | 055Fh |
0560h | 0560h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0568h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0570h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0578h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0580h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | FFFFh |
0588h | 17F6h | 2C63h | 1D7Eh | 1D7Fh | 1D80h | 1D81h | 1D82h | 1D83h |
0590h | 1D84h | 1D85h | 1D86h | 1D87h | 1D88h | 1D89h | 1D8Ah | 1D8Bh |
0598h | 1D8Ch | 1D8Dh | 1D8Eh | 1D8Fh | 1D90h | 1D91h | 1D92h | 1D93h |
05A0h | 1D94h | 1D95h | 1D96h | 1D97h | 1D98h | 1D99h | 1D9Ah | 1D9Bh |
05A8h | 1D9Ch | 1D9Dh | 1D9Eh | 1D9Fh | 1DA0h | 1DA1h | 1DA2h | 1DA3h |
05B0h | 1DA4h | 1DA5h | 1DA6h | 1DA7h | 1DA8h | 1DA9h | 1DAAh | 1DABh |
05B8h | 1DACh | 1DADh | 1DAEh | 1DAFh | 1DB0h | 1DB1h | 1DB2h | 1DB3h |
05C0h | 1DB4h | 1DB5h | 1DB6h | 1DB7h | 1DB8h | 1DB9h | 1DBAh | 1DBBh |
05C8h | 1DBCh | 1DBDh | 1DBEh | 1DBFh | 1DC0h | 1DC1h | 1DC2h | 1DC3h |
05D0h | 1DC4h | 1DC5h | 1DC6h | 1DC7h | 1DC8h | 1DC9h | 1DCAh | 1DCBh |
05D8h | 1DCCh | 1DCDh | 1DCEh | 1DCFh | 1DD0h | 1DD1h | 1DD2h | 1DD3h |
05E0h | 1DD4h | 1DD5h | 1DD6h | 1DD7h | 1DD8h | 1DD9h | 1DDAh | 1DDBh |
05E8h | 1DDCh | 1DDDh | 1DDEh | 1DDFh | 1DE0h | 1DE1h | 1DE2h | 1DE3h |
05F0h | 1DE4h | 1DE5h | 1DE6h | 1DE7h | 1DE8h | 1DE9h | 1DEAh | 1DEBh |
05F8h | 1DECh | 1DEDh | 1DEEh | 1DEFh | 1DF0h | 1DF1h | 1DF2h | 1DF3h |
0600h | 1DF4h | 1DF5h | 1DF6h | 1DF7h | 1DF8h | 1DF9h | 1DFAh | 1DFBh |
0608h | 1DFCh | 1DFDh | 1DFEh | 1DFFh | 1E00h | 1E00h | 1E02h | 1E02h |
0610h | 1E04h | 1E04h | 1E06h | 1E06h | 1E08h | 1E08h | 1E0Ah | 1E0Ah |
0618h | 1E0Ch | 1E0Ch | 1E0Eh | 1E0Eh | 1E10h | 1E10h | 1E12h | 1E12h |
0620h | 1E14h | 1E14h | 1E16h | 1E16h | 1E18h | 1E18h | 1E1Ah | 1E1Ah |
0628h | 1E1Ch | 1E1Ch | 1E1Eh | 1E1Eh | 1E20h | 1E20h | 1E22h | 1E22h |
0630h | 1E24h | 1E24h | 1E26h | 1E26h | 1E28h | 1E28h | 1E2Ah | 1E2Ah |
0638h | 1E2Ch | 1E2Ch | 1E2Eh | 1E2Eh | 1E30h | 1E30h | 1E32h | 1E32h |
0640h | 1E34h | 1E34h | 1E36h | 1E36h | 1E38h | 1E38h | 1E3Ah | 1E3Ah |
0648h | 1E3Ch | 1E3Ch | 1E3Eh | 1E3Eh | 1E40h | 1E40h | 1E42h | 1E42h |
0650h | 1E44h | 1E44h | 1E46h | 1E46h | 1E48h | 1E48h | 1E4Ah | 1E4Ah |
0658h | 1E4Ch | 1E4Ch | 1E4Eh | 1E4Eh | 1E50h | 1E50h | 1E52h | 1E52h |
0660h | 1E54h | 1E54h | 1E56h | 1E56h | 1E58h | 1E58h | 1E5Ah | 1E5Ah |
0668h | 1E5Ch | 1E5Ch | 1E5Eh | 1E5Eh | 1E60h | 1E60h | 1E62h | 1E62h |
0670h | 1E64h | 1E64h | 1E66h | 1E66h | 1E68h | 1E68h | 1E6Ah | 1E6Ah |
0678h | 1E6Ch | 1E6Ch | 1E6Eh | 1E6Eh | 1E70h | 1E70h | 1E72h | 1E72h |
0680h | 1E74h | 1E74h | 1E76h | 1E76h | 1E78h | 1E78h | 1E7Ah | 1E7Ah |
0688h | 1E7Ch | 1E7Ch | 1E7Eh | 1E7Eh | 1E80h | 1E80h | 1E82h | 1E82h |
0690h | 1E84h | 1E84h | 1E86h | 1E86h | 1E88h | 1E88h | 1E8Ah | 1E8Ah |
0698h | 1E8Ch | 1E8Ch | 1E8Eh | 1E8Eh | 1E90h | 1E90h | 1E92h | 1E92h |
06A0h | 1E94h | 1E94h | 1E96h | 1E97h | 1E98h | 1E99h | 1E9Ah | 1E9Bh |
06A8h | 1E9Ch | 1E9Dh | 1E9Eh | 1E9Fh | 1EA0h | 1EA0h | 1EA2h | 1EA2h |
06B0h | 1EA4h | 1EA4h | 1EA6h | 1EA6h | 1EA8h | 1EA8h | 1EAAh | 1EAAh |
06B8h | 1EACh | 1EACh | 1EAEh | 1EAEh | 1EB0h | 1EB0h | 1EB2h | 1EB2h |
06C0h | 1EB4h | 1EB4h | 1EB6h | 1EB6h | 1EB8h | 1EB8h | 1EBAh | 1EBAh |
06C8h | 1EBCh | 1EBCh | 1EBEh | 1EBEh | 1EC0h | 1EC0h | 1EC2h | 1EC2h |
06D0h | 1EC4h | 1EC4h | 1EC6h | 1EC6h | 1EC8h | 1EC8h | 1ECAh | 1ECAh |
06D8h | 1ECCh | 1ECCh | 1ECEh | 1ECEh | 1ED0h | 1ED0h | 1ED2h | 1ED2h |
06E0h | 1ED4h | 1ED4h | 1ED6h | 1ED6h | 1ED8h | 1ED8h | 1EDAh | 1EDAh |
06E8h | 1EDCh | 1EDCh | 1EDEh | 1EDEh | 1EE0h | 1EE0h | 1EE2h | 1EE2h |
06F0h | 1EE4h | 1EE4h | 1EE6h | 1EE6h | 1EE8h | 1EE8h | 1EEAh | 1EEAh |
06F8h | 1EECh | 1EECh | 1EEEh | 1EEEh | 1EF0h | 1EF0h | 1EF2h | 1EF2h |
0700h | 1EF4h | 1EF4h | 1EF6h | 1EF6h | 1EF8h | 1EF8h | 1EFAh | 1EFBh |
0708h | 1EFCh | 1EFDh | 1EFEh | 1EFFh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0710h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0718h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0720h | 1F1Ch | 1F1Dh | 1F16h | 1F17h | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0728h | 1F1Ch | 1F1Dh | 1F1Eh | 1F1Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0730h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0738h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0740h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0748h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0750h | 1F4Ch | 1F4Dh | 1F46h | 1F47h | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0758h | 1F4Ch | 1F4Dh | 1F4Eh | 1F4Fh | 1F50h | 1F59h | 1F52h | 1F5Bh |
0760h | 1F54h | 1F5Dh | 1F56h | 1F5Fh | 1F58h | 1F59h | 1F5Ah | 1F5Bh |
0768h | 1F5Ch | 1F5Dh | 1F5Eh | 1F5Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0770h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0778h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1FBAh | 1FBBh | 1FC8h | 1FC9h |
0780h | 1FCAh | 1FCBh | 1FDAh | 1FDBh | 1FF8h | 1FF9h | 1FEAh | 1FEBh |
0788h | 1FFAh | 1FFBh | 1F7Eh | 1F7Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0790h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0798h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A0h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A8h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B0h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B8h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FB8h | 1FB9h | 1FB2h | 1FBCh |
07C0h | 1FB4h | 1FB5h | 1FB6h | 1FB7h | 1FB8h | 1FB9h | 1FBAh | 1FBBh |
07C8h | 1FBCh | 1FBDh | 1FBEh | 1FBFh | 1FC0h | 1FC1h | 1FC2h | 1FC3h |
07D0h | 1FC4h | 1FC5h | 1FC6h | 1FC7h | 1FC8h | 1FC9h | 1FCAh | 1FCBh |
07D8h | 1FC3h | 1FCDh | 1FCEh | 1FCFh | 1FD8h | 1FD9h | 1FD2h | 1FD3h |
07E0h | 1FD4h | 1FD5h | 1FD6h | 1FD7h | 1FD8h | 1FD9h | 1FDAh | 1FDBh |
07E8h | 1FDCh | 1FDDh | 1FDEh | 1FDFh | 1FE8h | 1FE9h | 1FE2h | 1FE3h |
07F0h | 1FE4h | 1FECh | 1FE6h | 1FE7h | 1FE8h | 1FE9h | 1FEAh | 1FEBh |
07F8h | 1FECh | 1FEDh | 1FEEh | 1FEFh | 1FF0h | 1FF1h | 1FF2h | 1FF3h |
0800h | 1FF4h | 1FF5h | 1FF6h | 1FF7h | 1FF8h | 1FF9h | 1FFAh | 1FFBh |
0808h | 1FF3h | 1FFDh | 1FFEh | 1FFFh | 2000h | 2001h | 2002h | 2003h |
0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
0818h | 200Ch | 200Dh | 200Eh | 200Fh | 2010h | 2011h | 2012h | 2013h |
0820h | 2014h | 2015h | 2016h | 2017h | 2018h | 2019h | 201Ah | 201Bh |
0828h | 201Ch | 201Dh | 201Eh | 201Fh | 2020h | 2021h | 2022h | 2023h |
0830h | 2024h | 2025h | 2026h | 2027h | 2028h | 2029h | 202Ah | 202Bh |
0838h | 202Ch | 202Dh | 202Eh | 202Fh | 2030h | 2031h | 2032h | 2033h |
0840h | 2034h | 2035h | 2036h | 2037h | 2038h | 2039h | 203Ah | 203Bh |
0848h | 203Ch | 203Dh | 203Eh | 203Fh | 2040h | 2041h | 2042h | 2043h |
0850h | 2044h | 2045h | 2046h | 2047h | 2048h | 2049h | 204Ah | 204Bh |
0858h | 204Ch | 204Dh | 204Eh | 204Fh | 2050h | 2051h | 2052h | 2053h |
0860h | 2054h | 2055h | 2056h | 2057h | 2058h | 2059h | 205Ah | 205Bh |
0868h | 205Ch | 205Dh | 205Eh | 205Fh | 2060h | 2061h | 2062h | 2063h |
0870h | 2064h | 2065h | 2066h | 2067h | 2068h | 2069h | 206Ah | 206Bh |
0878h | 206Ch | 206Dh | 206Eh | 206Fh | 2070h | 2071h | 2072h | 2073h |
0880h | 2074h | 2075h | 2076h | 2077h | 2078h | 2079h | 207Ah | 207Bh |
0888h | 207Ch | 207Dh | 207Eh | 207Fh | 2080h | 2081h | 2082h | 2083h |
0890h | 2084h | 2085h | 2086h | 2087h | 2088h | 2089h | 208Ah | 208Bh |
0898h | 208Ch | 208Dh | 208Eh | 208Fh | 2090h | 2091h | 2092h | 2093h |
08A0h | 2094h | 2095h | 2096h | 2097h | 2098h | 2099h | 209Ah | 209Bh |
08A8h | 209Ch | 209Dh | 209Eh | 209Fh | 20A0h | 20A1h | 20A2h | 20A3h |
08B0h | 20A4h | 20A5h | 20A6h | 20A7h | 20A8h | 20A9h | 20AAh | 20ABh |
08B8h | 20ACh | 20ADh | 20AEh | 20AFh | 20B0h | 20B1h | 20B2h | 20B3h |
08C0h | 20B4h | 20B5h | 20B6h | 20B7h | 20B8h | 20B9h | 20BAh | 20Bh |
08C8h | 20BCh | 20BDh | 20BEh | 20BFh | 20C0h | 20C1h | 20C2h | 20C3h |
08D0h | 20C4h | 20C5h | 20C6h | 20C7h | 20C8h | 20C9h | 20CAh | 20CBh |
08D8h | 20CCh | 20CDh | 20CEh | 20CFh | 20D0h | 20D1h | 20D2h | 20D3h |
08E0h | 20D4h | 20D5h | 20D6h | 20D7h | 20D8h | 20D9h | 20DAh | 20DBh |
08E8h | 20DCh | 20DDh | 20DEh | 20DFh | 20E0h | 20E1h | 20E2h | 20E3h |
08F0h | 20E4h | 20E5h | 20E6h | 20E7h | 20E8h | 20E9h | 20EAh | 20EBh |
08F8h | 20ECh | 20EDh | 20EEh | 20EFh | 20F0h | 20F1h | 20F2h | 20F3h |
0900h | 20F4h | 20F5h | 20F6h | 20F7h | 20F8h | 20F9h | 20FAh | 20FBh |
0908h | 20FCh | 20FDh | 20FEh | 20FH | 2100h | 2101h | 2102h | 2103h |
0910h | 2104h | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 2113h |
0920h | 2114h | 2115h | 2116h | 2117h | 2118h | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 2120h | 2121h | 2122h | 2123h |
0930h | 2124h | 2125h | 2126h | 2127h | 2128h | 2129h | 212Ah | 212Bh |
0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131h | 2132h | 2133h |
0940h | 2134h | 2135h | 2136h | 2137h | 2138h | 2139h | 213Ah | 213Bh |
0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
0950h | 2144h | 2145h | 2146h | 2147h | 2148h | 2149h | 214Ah | 214Bh |
0958h | 214Ch | 214Dh | 2132h | 214Fh | 2150h | 2151h | 2152h | 2153h |
0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
0968h | 215Ch | 215Dh | 215Eh | 215Fh | 2160h | 2161h | 2162h | 2163h |
0970h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160h | 2161h | 2162h | 2163h |
0980h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 24Bh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 0746h | 2C00h |
09B0h | 2C01h | 2C02h | 2C03h | 2C04h | 2C05h | 2C06h | 2C07h | 2C08h |
09B8h | 2C09h | 2C0Ah | 2C0Bh | 2C0Ch | 2C0Dh | 2C0Eh | 2C0Fh | 2C10h |
09C0h | 2C11h | 2C12h | 2C13h | 2C14h | 2C15h | 2C16h | 2C17h | 2C18h |
09C8h | 2C19h | 2C1Ah | 2C1Bh | 2C1Ch | 2C1Dh | 2C1Eh | 2C1Fh | 2C20h |
09D0h | 2C21h | 2C22h | 2C23h | 2C24h | 2C25h | 2C26h | 2C27h | 2C28h |
09D8h | 2C29h | 2C2Ah | 2C2Bh | 2C2Ch | 2C2Dh | 2C2Eh | 2C5Fh | 2C60h |
09E0h | 2C60h | 2C62h | 2C63h | 2C64h | 2C65h | 2C66h | 2C67h | 2C67h |
09E8h | 2C69h | 2C69h | 2C6Bh | 2C6Bh | 2C6Dh | 2C6Eh | 2C6Fh | 2C70h |
09F0h | 2C71h | 2C72h | 2C73h | 2C74h | 2C75h | 2C75h | 2C77h | 2C78h |
09F8h | 2C79h | 2C7Ah | 2C7Bh | 2C7Ch | 2C7Dh | 2C7Eh | 2C7Fh | 2C80h |
0A00h | 2C80h | 2C82h | 2C82h | 2C84h | 2C84h | 2C86h | 2C86h | 2C88h |
0A08h | 2C88h | 2C8Ah | 2C8Ah | 2C8Ch | 2C8Ch | 2C8Eh | 2C8Eh | 2C90h |
0A10h | 2C90h | 2C92h | 2C92h | 2C94h | 2C94h | 2C96h | 2C96h | 2C98h |
0A18h | 2C98h | 2C9Ah | 2C9Ah | 2C9Ch | 2C9Ch | 2C9Eh | 2C9Eh | 2CA0h |
0A20h | 2CA0h | 2CA2h | 2CA2h | 2CA4h | 2CA4h | 2CA6h | 2CA6h | 2CA8h |
0A28h | 2CA8h | 2CAAh | 2CAAh | 2CACh | 2CACh | 2CAEh | 2CAEh | 2CB0h |
0A30h | 2CB0h | 2CB2h | 2CB2h | 2CB4h | 2CB4h | 2CB6h | 2CB6h | 2CB8h |
0A38h | 2CB8h | 2CBAh | 2CBAh | 2CBCh | 2CBCh | 2CBEh | 2CBEh | 2CC0h |
0A40h | 2CC0h | 2CC2h | 2CC2h | 2CC4h | 2CC4h | 2CC6h | 2CC6h | 2CC8h |
0A48h | 2CC8h | 2CCAh | 2CCAh | 2CCCh | 2CCCh | 2CCEh | 2CCEh | 2CD0h |
0A50h | 2CD0h | 2CD2h | 2CD2h | 2CD4h | 2CD4h | 2CD6h | 2CD6h | 2CD8h |
0A58h | 2CD8h | 2CDAh | 2CDAh | 2CDCh | 2CDCh | 2CDEh | 2CDEh | 2CE0h |
0A60h | 2CE0h | 2CE2h | 2CE2h | 2CE4h | 2CE5h | 2CE6h | 2CE7h | 2CE8h |
0A68h | 2CE9h | 2CEAh | 2CEBh | 2CECh | 2CEDh | 2CEEh | 2CEFh | 2CF0h |
0A70h | 2CF1h | 2CF2h | 2CF3h | 2CF4h | 2CF5h | 2CF6h | 2CF7h | 2CF8h |
0A78h | 2CF9h | 2CFAh | 2CFBh | 2CFCh | 2CFDh | 2CFEh | 2CFFh | 10A0h |
0A80h | 10A1h | 10A2h | 10A3h | 10A4h | 10A5h | 10A6h | 10A7h | 10A8h |
0A88h | 10A9h | 10AAh | 10ABh | 10ACh | 10ADh | 10AEh | 10AFh | 10B0h |
0A90h | 10B1h | 10B2h | 10B3h | 10B4h | 10B5h | 10B6h | 10B7h | 10B8h |
0A98h | 10B9h | 10BAh | 10BBh | 10BCh | 10BDh | 10BEh | 10BFh | 10C0h |
0AA0h | 10C1h | 10C2h | 10C3h | 10C4h | 10C5h | FFFFh | D21Bh | FF21h |
0AA8h | FF22h | FF23h | FF24h | FF25h | FF26h | FF27h | FF28h | FF29h |
0AB0h | FF2Ah | FF2Bh | FF2Ch | FF2Dh | FF2Eh | FF2Fh | FF30h | FF31h |
0AB8h | FF32h | FF33h | FF34h | FF35h | FF36h | FF37h | FF38h | FF39h |
0AC0h | FF3Ah | FF5Bh | FF5Ch | FF5Dh | FF5Eh | FF5Fh | FF60h | FF61h |
0AC8h | FF62h | FF63h | FF64h | FF65h | FF66h | FF67h | FF68h | FF69h |
0AD0h | FF6Ah | FF6Bh | FF6Ch | FF6Dh | FF6Eh | FF6Fh | FF70h | FF71h |
0AD8h | FF72h | FF73h | FF74h | FF75h | FF76h | FF77h | FF78h | FF79h |
0AE0h | FF7Ah | FF7Bh | FF7Ch | FF7Dh | FF7Eh | FF7Fh | FF80h | FF81h |
0AE8h | FF82h | FF83h | FF84h | FF85h | FF86h | FF87h | FF88h | FF89h |
0AF0h | FF8Ah | FF8Bh | FF8Ch | FF8Dh | FF8Eh | FF8Fh | FF90h | FF91h |
0AF8h | FF92h | FF93h | FF94h | FF95h | FF96h | FF97h | FF98h | FF99h |
0B00h | FF9Ah | FF9Bh | FF9Ch | FF9Dh | FF9Eh | FF9Fh | FFA0h | FFA1h |
0B08h | FFA2h | FFA3h | FFA4h | FFA5h | FFA6h | FFA7h | FFA8h | FFA9h |
0B10h | FFAAh | FFABh | FFACh | FFADh | FFAEh | FFAFh | FFB0h | FFB1h |
0B18h | FFB2h | FFB3h | FFB4h | FFB5h | FFB6h | FFB7h | FFB8h | FFB9h |
0B20h | FFBAh | FFBBh | FFBCh | FFBDh | FFBEh | FFBFh | FFC0h | FFC1h |
0B28h | FFC2h | FFC3h | FFC4h | FFC5h | FFC6h | FFC7h | FFC8h | FFC9h |
0B30h | FFCAh | FFCBh | FFCCh | FFCDh | FFCEh | FFCFh | FFD0h | FFD1h |
0B38h | FFD2h | FFD3h | FFD4h | FFD5h | FFD6h | FFD7h | FFD8h | FFD9h |
0B40h | FFDAh | FFDBh | FFDCh | FFDDh | FFDEh | FFDFh | FFE0h | FFE1h |
0B48h | FFE2h | FFE3h | FFE4h | FFE5h | FFE6h | FFE7h | FFE8h | FFE9h |
0B50h | FFEAh | FFEBh | FFECh | FFEDh | FFEEh | FFEFh | FFF0h | FFF1h |
0B58h | FFF2h | FFF3h | FFF4h | FFF5h | FFF6h | FFF7h | FFF8h | FFF9h |
0B60h | FFFAh | FFFBh | FFFCh | FFFDh | FFFEh | FFFFh |
7.3 Entrada de directorio de etiquetas de volumen
La etiqueta de volumen es una cadena Unicode que permite a los usuarios finales distinguir sus volúmenes de almacenamiento. En el sistema de archivos exFAT, la etiqueta de volumen existe como una entrada de directorio principal crítica en el directorio raíz (consulte la tabla 26). El número válido de entradas de directorio de etiquetas de volumen oscila entre 0 y 1.
Tabla 26 Volume Label DirectoryEntry (Estructura)
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 7.3.1 define su contenido. |
CharacterCount | 1 | 1 | Este campo es obligatorio y la sección 7.3.2 define su contenido. |
VolumeLabel | 2 | 22 | Este campo es obligatorio y la sección 7.3.3 define su contenido. |
Reservado | 24 | 8 | Este campo es obligatorio y su contenido está reservado. |
Campo EntryType 7.3.1
El campo EntryType se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1).
Campo TypeCode 7.3.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.1).
Para la entrada del directorio Etiqueta de volumen, el valor válido para este campo es 3.
7.3.1.2 TypeImportance Field
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.2).
Para la entrada del directorio Etiqueta de volumen, el valor válido para este campo es 0.
7.3.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.3).
7.3.1.4 InUse field
El campo InUse se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.4).
Campo CharacterCount 7.3.2
El campo CharacterCount contendrá la longitud de la cadena Unicode que contiene el campo VolumeLabel.
El intervalo válido de valores para este campo será:
Al menos 0, lo que significa que la cadena Unicode tiene 0 caracteres (que es el equivalente de ninguna etiqueta de volumen)
Como máximo 11, lo que significa que la cadena Unicode tiene 11 caracteres de longitud
7.3.3 Campo VolumeLabel
El campo VolumeLabel contendrá una cadena Unicode, que es el nombre descriptivo del volumen. El campo VolumeLabel tiene el mismo conjunto de caracteres no válidos que el campo FileName de la entrada del directorio Nombre de archivo (vea sección 7.7.3).
7.4 Entrada del directorio de archivos
Las entradas del directorio de archivos describen archivos y directorios. Son entradas de directorio principal críticas y cualquier directorio puede contener cero o más entradas de directorio de archivos (consulte la tabla 27). Para que una entrada de directorio de archivo sea válida, exactamente una entrada de directorio de extensión de secuencia y al menos una entrada de directorio de nombre de archivo debe seguir inmediatamente la entrada del directorio de archivos (consulte la sección 7.6 y la sección 7.7, respectivamente).
Tabla 27 File DirectoryEntry
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 7.4.1 define su contenido. |
SecondaryCount | 1 | 1 | Este campo es obligatorio y la sección 7.4.2 define su contenido. |
SetChecksum | 2 | 2 | Este campo es obligatorio y la sección 7.4.3 define su contenido. |
FileAttributes | 4 | 2 | Este campo es obligatorio y la sección 7.4.4 define su contenido. |
Reserved1 | 6 | 2 | Este campo es obligatorio y su contenido está reservado. |
CreateTimestamp | 8 | 4 | Este campo es obligatorio y la sección 7.4.5 define su contenido. |
LastModifiedTimestamp | 12 | 4 | Este campo es obligatorio y la sección 7.4.6 define su contenido. |
LastAccessedTimestamp | 16 | 4 | Este campo es obligatorio y la sección 7.4.7 define su contenido. |
Create10msIncrement | 20 | 1 | Este campo es obligatorio y la sección 7.4.5 define su contenido. |
LastModified10msIncrement | 21 | 1 | Este campo es obligatorio y la sección 7.4.6 define su contenido. |
CreateUtcOffset | 22 | 1 | Este campo es obligatorio y la sección 7.4.5 define su contenido. |
LastModifiedUtcOffset | 23 | 1 | Este campo es obligatorio y la sección 7.4.6 define su contenido. |
LastAccessedUtcOffset | 24 | 1 | Este campo es obligatorio y la sección 7.4.7 define su contenido. |
Reserved2 | 25 | 7 | Este campo es obligatorio y su contenido está reservado. |
Campo EntryType 7.4.1
El campo EntryType se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1).
Campo TypeCode 7.4.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.1).
Para una entrada de directorio de archivos, el valor válido para este campo es 5.
7.4.1.2 Campo TypeImportance
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.2).
Para una entrada de directorio de archivos, el valor válido para este campo es 0.
7.4.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.3).
7.4.1.4 InUse field
El campo InUse se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.4).
7.4.2 Campo SecondaryCount
El campo SecondaryCount se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.2).
7.4.3 Campo SetChecksum
El campo SetChecksum se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.3).
7.4.4 Campo FileAttributes
El campo FileAttributes contiene marcas (vea la tabla 28).
Tabla 28 FileAttributes (estructura de campo)
Nombre del campo | Offset (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
ReadOnly | 0 | 1 | Este campo es obligatorio y se ajusta a la definición de MS-DOS. |
Hidden | 1 | 1 | Este campo es obligatorio y se ajusta a la definición de MS-DOS. |
Sistema | 2 | 1 | Este campo es obligatorio y se ajusta a la definición de MS-DOS. |
Reserved1 | 3 | 1 | Este campo es obligatorio y su contenido está reservado. |
Directorio | 4 | 1 | Este campo es obligatorio y se ajusta a la definición de MS-DOS. |
Archivo | 5 | 1 | Este campo es obligatorio y se ajusta a la definición de MS-DOS. |
Reserved2 | 6 | 10 | Este campo es obligatorio y su contenido está reservado. |
7.4.5 CreateTimestamp, Create10msIncrement y CreateUtcOffset Fields
En combinación, los campos CreateTimestamp y CreateTime10msIncrement describen la fecha y hora locales en que se creó el archivo o directorio especificados. El campo CreateUtcOffset describe el desplazamiento de la fecha y hora locales a partir de la hora UTC. Las implementaciones establecerán estos campos al crear el conjunto de entradas de directorio especificado.
Estos campos se ajustarán a las definiciones de los campos Timestamp, 10msIncrement y UtcOffset (consulte la sección 7.4.8, sección 7.4.9 y sección 7.4.10, respectivamente).
7.4.6 Campos LastModifiedTimestamp, LastModified10msIncrement y LastModifiedUtcOffset
En combinación, los campos LastModifiedTimestamp y LastModifiedTime10msIncrement describen la fecha y hora locales en que se modificó por última vez el contenido de cualquiera de los clústeres asociados a la entrada de directorio de extensión de stream especificada. El campo LastModifiedUtcOffset describe el desplazamiento de la fecha y hora locales a partir de la hora UTC. Las implementaciones actualizarán estos campos:
Después de modificar el contenido de cualquiera de los clústeres asociados a la entrada de directorio de extensión de stream especificada (excepto el contenido que existe más allá del punto que describe el campo ValidDataLength)
Al cambiar los valores de los campos ValidDataLength o DataLength
Estos campos se ajustarán a las definiciones de los campos Timestamp, 10msIncrement y UtcOffset (consulte la sección 7.4.8, sección 7.4.9 y sección 7.4.10, respectivamente).
7.4.7 Campos LastAccessedTimestamp y LastAccessedUtcOffset
El campo LastAccessedTimestamp describirá la fecha y hora locales en que se obtuvo acceso por última vez al contenido de cualquiera de los clústeres asociados a la entrada de directorio de extensión de stream especificada. El campo LastAccessedUtcOffset describe el desplazamiento de la fecha y hora locales a partir de la hora UTC. Las implementaciones actualizarán estos campos:
Después de modificar el contenido de cualquiera de los clústeres asociados a la entrada de directorio de extensión de stream especificada (excepto el contenido que existe más allá de ValidDataLength)
Al cambiar los valores de los campos ValidDataLength o DataLength
Las implementaciones deben actualizar estos campos después de leer el contenido de cualquiera de los clústeres asociados a la entrada de directorio de extensión de stream especificada.
Estos campos se ajustarán a las definiciones de los campos Timestamp y UtcOffset (consulte la sección 7.4.8 y la sección 7.4.10, respectivamente).
7.4.8 Campos de marca de tiempo
Los campos de marca de tiempo describen la fecha y hora locales, hasta una resolución de dos segundos (vea la tabla 29).
Tabla 29 Estructura de campo de marca de tiempo
Nombre del campo | Offset (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
DoubleSeconds | 0 | 5 | Este campo es obligatorio y la sección 7.4.8.1 define su contenido. |
Minuto | 5 | 6 | Este campo es obligatorio y la sección 7.4.8.2 define su contenido. |
Hora | 11 | 5 | Este campo es obligatorio y la sección 7.4.8.3 define su contenido. |
Día | 16 | 5 | Este campo es obligatorio y la sección 7.4.8.4 define su contenido. |
Month (Mes) | 21 | 4 | Este campo es obligatorio y la sección 7.4.8.5 define su contenido. |
Year | 25 | 7 | Este campo es obligatorio y la sección 7.4.8.6 define su contenido. |
7.4.8.1 Campo DoubleSeconds
El campo DoubleSeconds describirá la parte de segundos del campo Marca de tiempo, en múltiplos de dos segundos.
El intervalo válido de valores para este campo será:
0, que representa 0 segundos
29, que representa 58 segundos
Campo de 7.4.8.2 minutos
El campo Minuto describirá la parte de minutos del campo Marca de tiempo.
El intervalo válido de valores para este campo será:
0, que representa 0 minutos
59, que representa 59 minutos
Campo 7.4.8.3 hora
El campo Hora describirá la parte de horas del campo Marca de tiempo.
El intervalo válido de valores para este campo será:
0, que representa 00:00 horas
23, que representa las 23:00 horas
Campo 7.4.8.4 día
El campo Día describirá la parte del día del campo Marca de tiempo.
El intervalo válido de valores para este campo será:
1, que es el primer día del mes determinado
El último día del mes especificado (el mes especificado define el número de días válidos)
Campo 7.4.8.5 mes
El campo Mes describirá la parte del mes del campo Marca de tiempo.
El intervalo válido de valores para este campo será:
Al menos 1, que representa enero
Como máximo 12, que representa diciembre
Campo 7.4.8.6 Año
El campo Año describirá la parte del año del campo Marca de tiempo, con respecto al año 1980. Este campo representa el año 1980 con el valor 0 y el año 2107 con el valor 127.
Todos los valores posibles para este campo son válidos.
7.4.9 10msIncrement Fields
Los campos 10msIncrement proporcionarán resolución de tiempo adicional a sus correspondientes campos timestamp en múltiplos de diez milisegundos.
El intervalo válido de valores para estos campos será:
Al menos 0, que representa 0 milisegundos
Como máximo 199, que representa 1990 milisegundos
7.4.10 UtcOffset Fields
Los campos UtcOffset (consulte la tabla 30) describen el desplazamiento de UTC a la fecha local y la hora en que se describen sus campos Timestamp y 10msIncrement correspondientes. El desplazamiento de UTC a la fecha y hora local incluye los efectos de las zonas horarias y otros ajustes de fecha y hora, como el horario de verano y los cambios regionales de verano.
Tabla 30 UtcOffset (estructura de campo)
Nombre del campo | Offset (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
OffsetFromUtc | 0 | 7 | Este campo es obligatorio y la sección 7.4.10.1define su contenido. |
OffsetValid | 7 | 1 | Este campo es obligatorio y la sección 7.4.10.2 define su contenido. |
7.4.10.1 Campo OffsetFromUtc
El campo OffsetFromUtc describirá el desplazamiento desde utc de la fecha local y la hora en que contienen los campos Timestamp y 10msIncrement relacionados. En este campo se describe el desplazamiento de UTC en intervalos de 15 minutos (consulte la tabla 31).
Tabla 31 Significado de los valores del campo OffsetFromUtc
Valor | Equivalente decimal firmado | Descripción |
---|---|---|
3Fh | 63 | La fecha y hora locales son UTC + 15:45 |
3Eh | 62 | La fecha y hora locales son UTC + 15:30 |
. . . |
. . . |
. . . |
01h | 1 | La fecha y hora locales son UTC + 00:15 |
00h | 0 | La fecha y hora locales son UTC |
7Fh | -1 | La fecha y hora locales son UTC: 00:15 |
. . . |
. . . |
. . . |
41h | -63 | La fecha y hora locales son UTC: 15:45 |
40h | -64 | La fecha y hora locales son UTC: 16:00 |
Como indica la tabla anterior, todos los valores posibles para este campo son válidos. Sin embargo, las implementaciones solo deben registrar el valor 00h para este campo cuando:
La fecha y hora locales son realmente las mismas que las UTC, en cuyo caso el valor del campo OffsetValid será 1.
No se conoce la fecha y hora locales, en cuyo caso el valor del campo OffsetValid será 1 y las implementaciones considerarán UTC la fecha y hora locales.
No se conoce UTC, en cuyo caso el valor del campo OffsetValid será 0.
Si el desplazamiento de fecha y hora local de UTC no es un múltiplo de 15 minutos, las implementaciones registrarán 00h en el campo OffsetFromUtc y considerarán UTC la fecha y hora locales.
7.4.10.2 Campo OffsetValid
El campo OffsetValid describirá si el contenido del campo OffsetFromUtc es válido o no, como se indica a continuación:
0, lo que significa que el contenido del campo OffsetFromUtc no es válido
y serán 00h
1, lo que significa que el contenido del campo OffsetFromUtc es válido
Las implementaciones solo deben establecer este campo en el valor 0 cuando UTC no está disponible para calcular el valor del campo OffsetFromUtc. Si este campo contiene el valor 0, las implementaciones tratarán los campos Timestamp y 10msIncrement que tienen el mismo desplazamiento UTC que la fecha y hora locales actuales.
Entrada del directorio GUID de volumen 7.5
La entrada de directorio GUID de volumen contiene un GUID que permite a las implementaciones distinguir volúmenes de forma única y mediante programación. El GUID de volumen existe como una entrada de directorio principal benigna en el directorio raíz (consulte la tabla 32). El número válido de entradas de directorio GUID de volumen oscila entre 0 y 1.
Tabla 32 Volume GUID DirectoryEntry
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 7.5.1 define su contenido. |
SecondaryCount | 1 | 1 | Este campo es obligatorio y la sección 7.5.2 define su contenido. |
SetChecksum | 2 | 2 | Este campo es obligatorio y la sección 7.5.3 define su contenido. |
GeneralPrimaryFlags | 4 | 2 | Este campo es obligatorio y la sección 7.5.4 define su contenido. |
VolumeGuid | 6 | 16 | Este campo es obligatorio y la sección 7.5.5 define su contenido. |
Reservado | 22 | 10 | Este campo es obligatorio y su contenido está reservado. |
Campo EntryType 7.5.1
El campo EntryType se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1).
Campo TypeCode 7.5.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.1).
Para la entrada del directorio GUID de volumen, el valor válido para este campo es 0.
7.5.1.2 Campo TypeImportance
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.2).
Para la entrada de directorio GUID de volumen, el valor válido para este campo es 1.
7.5.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.3).
7.5.1.4 Campo de uso
El campo InUse se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1.4).
Campo SecondaryCount 7.5.2
El campo SecondaryCount se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.2).
Para la entrada del directorio GUID de volumen, el valor válido para este campo es 0.
7.5.3 Campo SetChecksum
El campo SetChecksum se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.3).
7.5.4 Campo GeneralPrimaryFlags
El campo GeneralPrimaryFlags se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.4) y define el contenido del campo CustomDefined que se va a reservar.
7.5.4.1 Campo AllocationPossible
El campo AllocationPossible se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.4.1).
Para la entrada del directorio GUID de volumen, el valor válido para este campo es 0.
7.5.4.2 Campo NoFatChain
El campo NoFatChain se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.4.2).
7.5.5 Campo VolumeGuid
El campo VolumeGuid contendrá un GUID que identifica de forma única el volumen especificado.
Todos los valores posibles para este campo son válidos, excepto el GUID nulo, que es {00000000-0000-0000-0000-000000000000}.
7.6 Entrada de directorio de extensión de stream
La entrada del directorio de extensión de stream es una entrada de directorio secundaria crítica en conjuntos de entradas de directorio de archivos (consulte la tabla 33). El número válido de entradas de directorio de extensión de stream en un conjunto de entradas de directorio de archivos es 1. Además, esta entrada de directorio solo es válida si sigue inmediatamente la entrada de directorio de archivos.
Tabla 33 Stream Extension DirectoryEntry
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 7.6.1 define su contenido. |
GeneralSecondaryFlags | 1 | 1 | Este campo es obligatorio y la sección 7.6.2 define su contenido. |
Reserved1 | 2 | 1 | Este campo es obligatorio y su contenido está reservado. |
NameLength | 3 | 1 | Este campo es obligatorio y la sección 7.6.3 define su contenido. |
NameHash | 4 | 2 | Este campo es obligatorio y la sección 7.6.4 define su contenido. |
Reserved2 | 6 | 2 | Este campo es obligatorio y su contenido está reservado. |
ValidDataLength | 8 | 8 | Este campo es obligatorio y la sección 7.6.5 define su contenido. |
Reservado3 | 16 | 4 | Este campo es obligatorio y su contenido está reservado. |
FirstCluster | 20 | 4 | Este campo es obligatorio y la sección 7.6.6 define su contenido. |
DataLength | 24 | 8 | Este campo es obligatorio y la sección 7.6.7 define su contenido. |
Campo EntryType 7.6.1
El campo EntryType se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1).
Campo TypeCode 7.6.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.1).
Para la entrada del directorio Extensión de secuencia, el valor válido para este campo es 0.
7.6.1.2 Campo TypeImportance
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.2).
Para la entrada del directorio Extensión de secuencia, el valor válido para este campo es 0.
7.6.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.3).
7.6.1.4 Campo InUse
El campo InUse se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.4).
7.6.2 Campo GeneralSecondaryFlags
El campo GeneralSecondaryFlags se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (consulte la sección 6.4.2) y define el contenido del campo CustomDefined que se va a reservar.
7.6.2.1 Campo AllocationPossible
El campo AllocationPossible se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.2.1).
Para la entrada del directorio Extensión de secuencia, el valor válido para este campo es 1.
7.6.2.2 Campo NoFatChain
El campo NoFatChain se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.2.2).
7.6.3 Campo NameLength
El campo NameLength contendrá la longitud de la cadena Unicode las entradas de directorio de nombre de archivo subsiguientes (consulte la sección 7.7) que contienen colectivamente.
El intervalo válido de valores para este campo será:
Al menos 1, que es el nombre de archivo más corto posible
Como máximo 255, que es el nombre de archivo más largo posible
El valor del campo NameLength también afecta al número Entradas de directorio de nombre de archivo (consulte la sección 7.7).
7.6.4 Campo NameHash
El campo NameHash contendrá un hash de 2 bytes (vea la figura 4) del nombre de archivo con mayúsculas y minúsculas. Esto permite que las implementaciones realicen una comparación rápida al buscar un archivo por nombre. Lo importante es que NameHash proporciona una comprobación segura de un error de coincidencia. Las implementaciones comprobarán todas las coincidencias de NameHash con una comparación del nombre de archivo con mayúsculas y minúsculas.
Figura 4 Cálculo de nameHash
UInt16 NameHash
(
WCHAR * FileName, // points to an in-memory copy of the up-cased file name
UCHAR NameLength
)
{
UCHAR * Buffer = (UCHAR *)FileName;
UInt16 NumberOfBytes = (UInt16)NameLength * 2;
UInt16 Hash = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
Hash = ((Hash&1) ? 0x8000 : 0) + (Hash>>1) + (UInt16)Buffer[Index];
}
return Hash;
}
7.6.5 Campo ValidDataLength
El campo ValidDataLength describirá hasta qué punto se han escrito los datos de usuario del flujo de datos. Las implementaciones actualizarán este campo a medida que escriban datos más allá en el flujo de datos. En los medios de almacenamiento, los datos entre la longitud de datos válida y la longitud de los datos del flujo de datos no están definidos. Las implementaciones devolverán ceros para las operaciones de lectura más allá de la longitud de datos válida.
Si la entrada del directorio de archivos correspondiente describe un directorio, el único valor válido para este campo es igual al valor del campo DataLength. De lo contrario, el intervalo de valores válidos para este campo será:
Al menos 0, lo que significa que no se ha escrito ningún dato de usuario en el flujo de datos.
Como máximo DataLength, lo que significa que los datos de usuario se han escrito en toda la longitud del flujo de datos.
7.6.6 Campo FirstCluster
El campo FirstCluster se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.3).
Este campo contendrá el índice del primer clúster del flujo de datos, que hospeda los datos del usuario.
7.6.7 Campo DataLength
El campo DataLength se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.4).
Si la entrada del directorio de archivos correspondiente describe un directorio, el valor válido para este campo es el tamaño completo de la asignación asociada, en bytes, que puede ser 0. Además, para los directorios, el valor máximo de este campo es de 256 MB.
7.7 Entrada de directorio de nombre de archivo
Las entradas de directorio de nombre de archivo son entradas de directorio secundaria críticas en conjuntos de entradas de directorio de archivos (consulte la tabla 34). El número válido de entradas de directorio de nombre de archivo en un conjunto de entradas de directorio de archivos es NameLength / 15, redondeado hasta el entero más cercano. Además, las entradas de directorio de nombre de archivo solo son válidas si siguen inmediatamente la entrada del directorio de extensión de secuencia como una serie consecutiva. Las entradas del directorio nombre de archivo se combinan para formar el nombre de archivo del conjunto de entradas del directorio de archivos.
Todos los elementos secundarios de una entrada de directorio determinada tendrán conjuntos de entradas de directorio de nombre de archivo únicos. Es decir, no puede haber nombres de archivo o directorio duplicados después de mayúsculas y minúsculas dentro de un directorio.
Tabla 34 File Name DirectoryEntry
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 7.7.1 define su contenido. |
GeneralSecondaryFlags | 1 | 1 | Este campo es obligatorio y la sección 7.7.2 define su contenido. |
FileName | 2 | 30 | Este campo es obligatorio y la sección 7.7.3 define su contenido. |
Campo EntryType 7.7.1
El campo EntryType se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1).
Campo TypeCode 7.7.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.1).
Para la entrada del directorio Nombre de archivo, el valor válido para este campo es 1.
7.7.1.2 Campo TypeImportance
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (consulte la sección 6.4.1.2).
Para la entrada del directorio Nombre de archivo, el valor válido para este campo es 0.
7.7.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (vea la sección 6.4.1.3).
7.7.1.4 InUse field
El campo InUse se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (consulte la sección 6.4.1.4).
7.7.2 Campo GeneralSecondaryFlags
El campo GeneralSecondaryFlags se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (consulte la sección 6.4.2) y define el contenido del campo CustomDefined que se va a reservar.
7.7.2.1 Campo AllocationPossible
El campo AllocationPossible se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (consulte la sección 6.4.2.1).
Para la entrada del directorio Extensión de secuencia, el valor válido para este campo es 0.
7.7.2.2 Campo NoFatChain
El campo NoFatChain se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (consulte la sección 6.4.2.2).
7.7.3 Campo FileName
El campo FileName contendrá una cadena Unicode, que es una parte del nombre de archivo. En el orden en que existen entradas de directorio de nombre de archivo en un conjunto de entradas de directorio de archivos, los campos FileName se concatenan para formar el nombre de archivo para el conjunto de entradas del directorio de archivos. Dada la longitud del campo FileName, 15 caracteres y el número máximo de entradas del directorio nombre de archivo, 17, la longitud máxima del nombre de archivo final concatenado es 255.
El nombre de archivo concatenado tiene el mismo conjunto de caracteres no válidos que otros sistemas de archivos basados en FAT (vea la tabla 35). Las implementaciones deben establecer los caracteres no usados de los campos FileName en el valor 0000h.
Tabla 35 Caracteres FileName no válidos
Código de caracteres | Descripción | Código de caracteres | Descripción | Código de caracteres | Descripción |
---|---|---|---|---|---|
0000h | Código de control | 0001h | Código de control | 0002h | Código de control |
0003h | Código de control | 0004h | Código de control | 0005h | Código de control |
0006h | Código de control | 0007h | Código de control | 0008h | Código de control |
0009h | Código de control | 000Ah | Código de control | 000Bh | Código de control |
000Ch | Código de control | 000Dh | Código de control | 000Eh | Código de control |
000Fh | Código de control | 0010h | Código de control | 0011h | Código de control |
0012h | Código de control | 0013h | Código de control | 0014h | Código de control |
0015h | Código de control | 0016h | Código de control | 0017h | Código de control |
0018h | Código de control | 0019h | Código de control | 001Ah | Código de control |
001Bh | Código de control | 001Ch | Código de control | 001Dh | Código de control |
001Eh | Código de control | 001Fh | Código de control | 0022h | Comillas |
002Ah | Asterisk | 002Fh | Barra diagonal | 003Ah | Dos puntos |
003Ch | Signo de menor que | 003Eh | Signo de mayor que | 003Fh | Signo de interrogación |
005Ch | Barra diagonal inversa | 007Ch | Barra vertical |
Los nombres de archivo "." y ".." tienen el significado especial de "this directory" y "containing directory", respectivamente. Las implementaciones no registrarán ninguno de estos nombres de archivo reservados en el campo FileName. Sin embargo, las implementaciones pueden generar estos dos nombres de archivo en listas de directorios para hacer referencia al directorio que se muestra y al directorio contenedor.
Es posible que las implementaciones quieran restringir los nombres de archivo y directorio solo al juego de caracteres ASCII. Si es así, deben limitar su uso de caracteres al intervalo de caracteres válidos en las primeras 128 entradas Unicode. Todavía deben almacenar nombres de archivo y directorio en Unicode en el volumen y traducirlos a/desde ASCII/Unicode al interactuar con el usuario.
7.8 Entrada de directorio de extensión de proveedor
La entrada de directorio de extensión de proveedor es una entrada de directorio secundaria benigna en conjuntos de entradas de directorio de archivos (consulte la tabla 36). Un conjunto de entradas de directorio de archivos puede contener cualquier número de entradas de directorio de extensión de proveedor, hasta el límite de entradas de directorio secundario, menos el número de otras entradas de directorio secundario. Además, las entradas de directorio de la extensión del proveedor solo son válidas si no preceden a las entradas de directorio de extensión de secuencia y nombre de archivo necesarias.
Las entradas de directorio de la extensión de proveedor permiten a los proveedores tener entradas de directorio únicas específicas del proveedor en conjuntos de entradas de directorio de archivos individuales a través del campo VendorGuid (consulte la tabla 36). Las entradas de directorio únicas permiten a los proveedores ampliar eficazmente el sistema de archivos exFAT. Los proveedores pueden definir el contenido del campo VendorDefined (consulte la tabla 36). Las implementaciones del proveedor pueden mantener el contenido del campo VendorDefined y pueden proporcionar funcionalidad específica del proveedor.
Las implementaciones que no reconocen el GUID de una entrada de directorio de extensión de proveedor tratarán la entrada de directorio igual que cualquier otra entrada de directorio secundario benigna no reconocida (consulte la sección 8.2).
Tabla 36 Directorio de extensiones de proveedorEntry
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 7.8.1 define su contenido. |
GeneralSecondaryFlags | 1 | 1 | Este campo es obligatorio y la sección 7.8.2 define su contenido. |
VendorGuid | 2 | 16 | Este campo es obligatorio y la sección 7.8.3 define su contenido. |
VendorDefined | 18 | 14 | Este campo es obligatorio y los proveedores pueden definir su contenido. |
Campo EntryType 7.8.1
El campo EntryType se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1).
Campo TypeCode 7.8.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.1).
Para la entrada del directorio Extensión de proveedor, el valor válido para este campo es 0.
7.8.1.2 Campo TypeImportance
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.2).
Para la entrada del directorio Extensión de proveedor, el valor válido para este campo es 1.
7.8.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.3).
7.8.1.4 Campo InUse
El campo InUse se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.4).
7.8.2 Campo GeneralSecondaryFlags
El campo GeneralSecondaryFlags se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (consulte la sección 6.4.2) y define el contenido del campo CustomDefined que se va a reservar.
7.8.2.1 Campo AllocationPossible
El campo AllocationPossible se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.2.1).
Para la entrada del directorio Extensión de proveedor, el valor válido para este campo es 0.
7.8.2.2 Campo NoFatChain
El campo NoFatChain se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.2.2).
Campo VendorGuid 7.8.3
El campo VendorGuid contendrá un GUID que identifique de forma única la extensión de proveedor especificada.
Todos los valores posibles para este campo son válidos, excepto el GUID nulo, que es {00000000-0000-0000-0000-000000000000}. Sin embargo, los proveedores deben usar una herramienta de generación de GUID, como GuidGen.exe, para seleccionar un GUID al definir sus extensiones.
El valor de este campo determina la estructura específica del proveedor del campo VendorDefined.
7.9 Entrada del directorio de asignación de proveedores
La entrada del directorio Asignación de proveedores es una entrada de directorio secundaria benigna en conjuntos de entradas de directorio de archivos (consulte la tabla 37). Un conjunto de entradas de directorio de archivos puede contener cualquier número de entradas de directorio de asignación de proveedores, hasta el límite de entradas de directorio secundario, menos el número de otras entradas de directorio secundario. Además, las entradas de directorio de asignación de proveedores solo son válidas si no preceden a las entradas de directorio de extensión de secuencia y nombre de archivo necesarias.
Las entradas del directorio de asignación de proveedores permiten a los proveedores tener entradas de directorio únicas específicas del proveedor en conjuntos de entradas de directorio de archivos individuales a través del campo VendorGuid (consulte la tabla 37). Las entradas de directorio únicas permiten a los proveedores ampliar eficazmente el sistema de archivos exFAT. Los proveedores pueden definir el contenido de los clústeres asociados, si existe alguno. Las implementaciones del proveedor pueden mantener el contenido de los clústeres asociados, si los hay, y pueden proporcionar funcionalidad específica del proveedor.
Las implementaciones que no reconocen el GUID de una entrada de directorio de asignación de proveedores tratarán la entrada de directorio igual que cualquier otra entrada de directorio secundario benigna no reconocida (consulte la sección 8.2).
Tabla 37 Directorio de asignación de proveedoresEntry
Nombre del campo | Offset (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
EntryType | 0 | 1 | Este campo es obligatorio y la sección 7.9.1 define su contenido. |
GeneralSecondaryFlags | 1 | 1 | Este campo es obligatorio y la sección 7.9.2 define su contenido. |
VendorGuid | 2 | 16 | Este campo es obligatorio y la sección 7.9.3 define su contenido. |
VendorDefined | 18 | 2 | Este campo es obligatorio y los proveedores pueden definir su contenido. |
FirstCluster | 20 | 4 | Este campo es obligatorio y la sección 7.9.4 define su contenido. |
DataLength | 24 | 8 | Este campo es obligatorio y la sección 7.9.5 define su contenido. |
Campo EntryType 7.9.1
El campo EntryType se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1).
Campo TypeCode 7.9.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.1).
Para la entrada del directorio Asignación de proveedores, el valor válido para este campo es 1.
7.9.1.2 Campo TypeImportance
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.2).
Para la entrada del directorio Asignación de proveedores, el valor válido para este campo es 1.
7.9.1.3 Campo TypeCategory
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.3).
7.9.1.4 Campo InUse
El campo InUse se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1.4).
7.9.2 Campo GeneralSecondaryFlags
El campo GeneralSecondaryFlags se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (consulte la sección 6.4.2) y define el contenido del campo CustomDefined que se va a reservar.
7.9.2.1 Campo AllocationPossible
El campo AllocationPossible se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.2.1).
Para la entrada del directorio Asignación de proveedores, el valor válido para este campo es 1.
7.9.2.2 Campo NoFatChain
El campo NoFatChain se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.2.2).
Campo VendorGuid 7.9.3
El campo VendorGuid contendrá un GUID que identifique de forma única la asignación de proveedor especificada.
Todos los valores posibles para este campo son válidos, excepto el GUID nulo, que es {00000000-0000-0000-0000-000000000000}. Sin embargo, los proveedores deben usar una herramienta de generación de GUID, como GuidGen.exe, para seleccionar un GUID al definir sus extensiones.
El valor de este campo determina la estructura específica del proveedor del contenido de los clústeres asociados, si existe alguno.
7.9.4 Campo FirstCluster
El campo FirstCluster se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.3).
7.9.5 Campo DataLength
El campo DataLength se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.4).
7.10 Entrada de directorio de relleno de TexFAT
Esta especificación, exFAT Revision 1.00 File System Basic Specification, no define la entrada del directorio TexFAT Padding. Sin embargo, su código de tipo es 1 y su importancia de tipo es 1. Las implementaciones de esta especificación tratarán las entradas del directorio padding de TexFAT de la misma manera que cualquier otra entrada de directorio principal benigna no reconocida, las implementaciones no moverán las entradas del directorio de relleno de TexFAT.
8 Notas de implementación
8.1 Ordenación de escritura recomendada
Las implementaciones deben asegurarse de que el volumen sea lo más resistente posible a los errores de energía y a otros errores inevitables. Al crear nuevas entradas de directorio o modificar las asignaciones de clúster, las implementaciones suelen seguir este orden de escritura:
Establezca el valor del campo VolumeDirty en 1.
Actualice el FAT activo, si es necesario.
Actualizar el mapa de bits de asignación activo
Cree o actualice la entrada del directorio, si es necesario.
Borre el valor del campo VolumeDirty en 0, si su valor anterior al primer paso era 0.
Al eliminar entradas de directorio o liberar asignaciones de clúster, las implementaciones deben seguir este orden de escritura:
Establezca el valor del campo VolumeDirty en 1.
Elimine o actualice la entrada del directorio, si es necesario.
Actualice el FAT activo, si es necesario.
Actualizar el mapa de bits de asignación activo
Borre el valor del campo VolumeDirty en 0, si su valor anterior al primer paso era 0.
8.2 Implicaciones de entradas de directorio no reconocidas
Las especificaciones exFAT futuras del mismo número de revisión principal, 1 y número de revisión menor superior a 0, pueden definir nuevas entradas de directorio secundaria benignas, secundarias críticas y secundarias benignas. Solo las especificaciones exFAT de un número de revisión mayor mayor pueden definir nuevas entradas críticas del directorio principal. Las implementaciones de esta especificación, exFAT Revision 1.00 File System Basic Specification, deben ser capaces de montar y acceder a cualquier volumen exFAT del número de revisión principal 1 y cualquier número de revisión menor. Esto presenta escenarios en los que una implementación puede encontrar entradas de directorio que no reconoce. A continuación se describen las implicaciones de estos escenarios:
La presencia de entradas de directorio principal críticas no reconocidas en el directorio raíz representa el volumen no válido. La presencia de cualquier entrada de directorio principal crítica, excepto entradas de directorio de archivos, en cualquier directorio no raíz, representa el directorio de hospedaje no válido.
Las implementaciones no modificarán las entradas de directorio principal benignas no reconocidas ni sus asignaciones de clúster asociadas. Sin embargo, al eliminar un directorio y solo al eliminar un directorio, las implementaciones eliminarán las entradas de directorio principal benignas no reconocidas y liberarán todas las asignaciones de clúster asociadas, si las hay.
Las implementaciones no modificarán las entradas de directorio secundarias críticas no reconocidas ni sus asignaciones de clúster asociadas. La presencia de una o varias entradas de directorio secundario críticas no reconocidas en un conjunto de entradas de directorio representa todo el conjunto de entradas de directorio no reconocido. Al eliminar un conjunto de entradas de directorio que contenga una o varias entradas de directorio secundarias críticas no reconocidas, las implementaciones liberarán todas las asignaciones de clústeres, si las hay, asociadas a entradas de directorio secundarias críticas no reconocidas. Además, si el conjunto de entradas de directorio describe un directorio, las implementaciones pueden:
Recorrido en el directorio
Enumerar las entradas de directorio que contiene
Eliminación de entradas de directorio independientes
Mover entradas de directorio independiente a un directorio diferente
Sin embargo, las implementaciones no harán lo siguiente:
Modificar entradas de directorio independientes, excepto eliminar, como se indica
Crear nuevas entradas de directorio independiente
Abra entradas de directorio independientes, excepto recorrer y enumerar, como se indica.
Las implementaciones no modificarán las entradas de directorio secundaria benignas no reconocidas ni sus asignaciones de clúster asociadas. Las implementaciones deben omitir las entradas de directorio secundario benignas no reconocidas. Al eliminar un conjunto de entradas de directorio, las implementaciones liberarán todas las asignaciones de clúster, si las hay, asociadas a entradas de directorio secundaria benignas no reconocidas.
9 Límites del sistema de archivos
9.1 Límites de tamaño del sector
El campo BytesPerSectorShift define los límites de tamaño del sector inferior y superior (que se evalúa como límite inferior: 512 bytes; límite superior: 4096 bytes).
9.2 Límites de tamaño del clúster
El campo SectoresPerClusterShift define los límites de tamaño de clúster inferior y superior (límite inferior: 1 sector; límite superior: 25 -- BytesPerSectorShift, que se evalúa como 32 MB).
9.3 Límites de tamaño del montón del clúster
El montón del clúster contendrá al menos espacio suficiente para hospedar las siguientes estructuras básicas del sistema de archivos: el directorio raíz, todos los mapas de bits de asignación y la tabla de mayúsculas y minúsculas.
El límite inferior de tamaño del montón de clústeres es una función del límite de tamaño inferior de cada una de las estructuras básicas del sistema de archivos que residen en el montón del clúster. Incluso dado el clúster más pequeño posible (512 bytes), cada una de las estructuras básicas del sistema de archivos no necesita más de un clúster. Por lo tanto, el límite inferior es: 2 + Clústeres NumberOfFats, que se evalúan como 3 o 4 clústeres, dependiendo del valor del campo NumberOfFats.
El límite superior de tamaño del montón de clústeres es una función sencilla del número máximo posible de clústeres, que el campo ClusterCount define (límite superior: 2 clústeres de32 a 11). Independientemente del tamaño del clúster, este montón de clúster tiene suficiente espacio para hospedar al menos las estructuras básicas del sistema de archivos.
9.4 Límites de tamaño del volumen
El campo VolumeLength define los límites de tamaño de volumen inferior y superior (límite inferior: 2 20/ 2bytesPerSectorShift, que se evalúa como 1 MB; límite superior: 264- 1 sectores, que, dada la mayor tamaño posible del sector, se evalúa como aproximadamente 64ZB). Sin embargo, esta especificación no recomienda más de2 clústeres de 24 a 2 en el montón de clústeres (consulte la sección 3.1.9). Por lo tanto, el límite superior recomendado de un volumen es: ClusterHeapOffset + (2 24- 2) * 2SectoresPerClusterShift. Dado el mayor tamaño posible del clúster, 32 MB y suponiendo que ClusterHeapOffset es de 96 MB (espacio suficiente para las regiones de arranque principal y de copia de seguridad y solo el primer FAT), el límite superior recomendado de un volumen se evalúa como aproximadamente 512 TB.
9.5 Límites de tamaño de directorio
El campo DataLength de la entrada del directorio Extensión de secuencia define los límites de tamaño de directorio inferior y superior (límite inferior: 0 bytes; límite superior: 256 MB). Esto significa que un directorio puede hospedar hasta 8.388.608 entradas de directorio (cada entrada de directorio consume 32 bytes). Dado el conjunto de entradas de directorio de archivos más pequeño posible, tres entradas de directorio, un directorio puede hospedar hasta 2.796.202 archivos.
10 Apéndice
10.1 Identificadores únicos globales (GUID)
Un GUID es la implementación de Microsoft de un identificador único universal. Un GUID es un valor de 128 bits que consta de un grupo de 8 dígitos hexadecimales, seguido de tres grupos de 4 dígitos hexadecimales cada uno y seguidos de un grupo de 12 dígitos hexadecimales, por ejemplo {6B29FC40-CA47-1067-B31D-00DD010662DA}, (consulte la tabla 38).
Tabla 38 Estructura GUID
Nombre del campo | Offset (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
Data1 | 0 | 4 | Este campo es obligatorio y contiene los cuatro bytes del primer grupo del GUID (6B29FC40h del ejemplo). |
Data2 | 4 | 2 | Este campo es obligatorio y contiene los dos bytes del segundo grupo del GUID (CA47h del ejemplo). |
Data3 | 6 | 2 | Este campo es obligatorio y contiene los dos bytes del tercer grupo del GUID (1067h del ejemplo). |
Data4[0] | 8 | 1 | Este campo es obligatorio y contiene el byte más significativo del cuarto grupo del GUID (B3h del ejemplo). |
Data4[1] | 9 | 1 | Este campo es obligatorio y contiene el byte menos significativo del cuarto grupo del GUID (1Dh del ejemplo). |
Data4[2] | 10 | 1 | Este campo es obligatorio y contiene el primer byte del quinto grupo del GUID (00h del ejemplo). |
Data4[3] | 11 | 1 | Este campo es obligatorio y contiene el segundo byte del quinto grupo del GUID (DDh del ejemplo). |
Data4[4] | 12 | 1 | Este campo es obligatorio y contiene el tercer byte del quinto grupo del GUID (01h del ejemplo). |
Data4[5] | 13 | 1 | Este campo es obligatorio y contiene el cuarto byte del quinto grupo del GUID (06h del ejemplo). |
Data4[6] | 14 | 1 | Este campo es obligatorio y contiene el quinto byte del quinto grupo del GUID (62h del ejemplo). |
Data4[7] | 15 | 1 | Este campo es obligatorio y contiene el sexto byte del quinto grupo del GUID (DAh del ejemplo). |
10.2 Tablas de particiones
Para garantizar la interoperabilidad de volúmenes exFAT en un amplio conjunto de escenarios de uso, las implementaciones deben usar el tipo de partición 07h para el almacenamiento con particiones MBR y el GUID de partición {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} para el almacenamiento con particiones GPT.
11 Historial de cambios de documentación
En la tabla 39 se describe el historial de liberación de, correcciones, adiciones, eliminaciones y aclaraciones de este documento.
Tabla 39 Historial de cambios de documentación
Fecha | Descripción del cambio |
---|---|
08-Ene-2008 | Primera versión de la especificación básica, que incluye: Sección 1, Introducción Sección 2, Sección 3, Regiones de arranque principal y de copia de seguridad Sección 4, Región de la tabla de asignación de archivos Sección 5, Región de datos Sección 6, Estructura de directorios Sección 7, Definiciones de entrada de directorio Sección 8, Notas de implementación Sección 9, Límites del sistema de archivos Sección 10, Apéndice |
08-jun-2008 | Segunda versión de la especificación básica, que incluye los siguientes cambios: Adición de la sección 11, Adición de las entradas del directorio Extensión del proveedor y asignación de proveedores en las secciones 7.8 y 7.9 Adición de la tabla up case recomendada en las secciones 7.2.5 y 7.2.5.1 Adición de los campos UtcOffset en la sección 7.4 y adición del acrónimo UTC en la sección 1.3 Corrección del tamaño del campo CustomDefined en la tabla 19 Corrección del intervalo válido de valores NameLength en la sección 7.6.3 Corrección y aclaración de los campos Timestamp y 10msIncrement de la sección 7.4 Aclaración de la estructura De parámetros NULL en la sección 3.3 Aclaración del significado de los valores del campo NoFatChain en la sección 6.3.4.2 Aclaración del significado de los valores del campo DataLength de la sección 6.2.3 Aclaración del campo VolumeDirty de la sección 3.1.13.2 y ordenación de escritura recomendada en la sección 8.1 Aclaración del campo MediaFailure de la sección 3.1.13.3 |
01-oct-2008 | Tercera versión de la especificación básica, que incluye los siguientes cambios: Adición de DEBE, DEBE y MAY A las explicaciones de campo Adición de la definición UTC en la tabla 2 sección 1.3 Se han modificado las secciones 1.5 para garantizar la alineación con el documento de especificación TexFAT. Se ha aclarado la restricción que solo Microsoft puede definir el diseño de las entradas de directorio en la sección 6.2 Se agregó una aclaración de que firstCluster Field debe ser cero si DataLength es cero y NoFatChain se establece en sección 6.3.5 y sección 6.4.3 Se han aclarado los requisitos para las entradas válidas del directorio de archivos en la sección 7.4 Se ha agregado el requisito de nombres de archivo y directorio únicos a la sección 7.7 Se agregó una nota de implementación para ASCII al final de la sección 7.7.3 |
01-ene-2009 | Cuarta versión de la especificación básica, que incluye los siguientes cambios: Se han quitado las referencias a las entradas de Windows CE Access Control Se ha agregado una aclaración a la sección 7.2.5.1 para requerir explícitamente una tabla completa de mayúsculas y minúsculas. |
02-sep-2009 | Quinta versión de la especificación básica, que incluye los siguientes cambios: Cambios de formato de documento para permitir una mejor conversión de PDF |
24 de febrero de 2010 | Sexta versión de la especificación básica, que incluye los siguientes cambios: Instrucción incorrecta modificada: "FirstCluster Field debe ser cero si DataLength es cero y NoFatChain está establecido" en la sección 6.3.5 y sección 6.4.3 a "Si el bit NoFatChain es 1, FirstCluster debe apuntar a un clúster válido en el montón del clúster" para aclarar que debe haber una asignación válida si se establece el bit NoFatChain. Se ha agregado "Si el bit NoFatChain es 1, DataLength no debe ser cero. Si el campo FirstCluster es cero, DataLength también debe ser cero" a sección 6.3.6 y sección 6.4.4 para aclarar que debe haber una asignación válida si se establece el bit NoFatChain. Aviso de copyright actualizado a 2010 |
26 de agosto de 2019 | Séptima versión de la especificación básica, que incluye los siguientes cambios: Se han actualizado los términos legales relativos a la especificación, entre los que se incluyen: Eliminación del aviso confidencial de Microsoft Eliminación de la sección Contrato de licencia de documentación técnica de Microsoft Corporation Aviso de copyright actualizado a 2019 |