Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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).
Conserve 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 simplicidad relativa y facilidad de implementación. En el espíritu de sus predecesores, los implementadores deben encontrar exFAT relativamente simple 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 a las 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.
Incorporar extensibilidad de cara a 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 la tabla 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 llevan un significado muy específico
término | Definición |
---|---|
Deberá | Esta especificación usa el término "debe" para describir un comportamiento que es obligatorio. |
Debería | Esta especificación usa el término "should" para describir un comportamiento que recomienda encarecidamente, pero no hace obligatorio. |
Mayo | Esta especificación usa el término "may" para describir un comportamiento que es opcional. |
Obligatorio | Este término describe un campo o estructura que una implementación modificará e interpretará como se describe en esta especificación. |
Opcional | Este término describe un campo o 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. |
Indefinido | Este término describe el contenido del campo o de la 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 de un campo o estructura que implementan:
|
1.3 Texto completo de acrónimos comunes
Esta especificación usa acrónimos en uso común en el sector del equipo personal (consulte la tabla 2).
Tabla 2 Texto completo de acrónimos comunes
Acrónimo | Texto completo |
---|---|
ASCII | Código estándar estadounidense para intercambio de información |
BIOS | Sistema básico de salida de entrada |
Unidad Central de Procesamiento (CPU) | Unidad de procesamiento central |
exFAT | Tabla extensible de asignación de archivos |
GORDO | 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 (en inglés) | Tabla de particiones GUID |
Identificador Único Global (GUID) | Identificador único global (consulte la sección 10.1) |
INT | Interrumpir |
MBR | Registro de arranque maestro |
texFAT | ExFAT seguro para transacciones |
Tiempo Universal Coordinado (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 (vea la lista siguiente), a menos que la especificación tenga en cuenta lo contrario.
No están firmados
Use notación decimal para describir valores, donde no se indique lo contrario; esta especificación usa la letra "h" como sufijo para denotar números hexadecimales y encierra los GUIDs 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. Windows CE usa TexFAT. TexFAT requiere el uso de las dos FTS y mapas de bits de asignación para su uso en transacciones. También define varias estructuras adicionales, como descriptores de relleno y descriptores de seguridad.
Estructura de 2 Volúmenes
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 (vea la tabla 3).
Estructura de volumen de la tabla 3
Nombre de la subregión | de desplazamiento (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 extendidos | 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. |
Reservado Principal | 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 los sectores de arranque extendidos | 13 | 8 | Esta subregión es obligatoria y la sección 3.2 define su contenido. |
Parámetros de OEM de copia de seguridad | Veintiuno | 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 copia de seguridad de arranque | 23 | 1 | Esta subregión es obligatoria y la sección 3.4 define su contenido. |
Región FAT | |||
Alineación FAT | veinticuatro | 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 | DesplazamientoGrasa + LongitudGrasa | LongitudGrasa * (NúmeroDeGrasas – 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 valores 1 y 2. |
Región de datos | |||
Alineación del montón del clúster | DesplazamientoDeGrasa + LongitudDeGrasa * NúmeroDeGrasas | 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 principal y de arranque de copia de seguridad contienen los campos ClusterHeapOffset, ClusterCount y SectorsPerClusterShift. |
Exceso de espacio | ClusterHeapOffset + ClusterCount * 2SectoresPerClusterShift | LongitudDelVolumen: (ClusterHeapOffset + ClusterCount * 2SectoresPorDesplazamientoDeClúster) | 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 ClusterHeapOffset, ClusterCount, SectorsPerClusterShift y VolumeLength. |
3 Regiones de arranque principal y de copia de seguridad
La región de arranque principal proporciona todas las instrucciones necesarias para la configuración de arranque, la información de identificación y los parámetros del sistema de archivos para habilitar que una implementación lleve a cabo lo siguiente:
- Arrancar un sistema informático desde 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 respaldo es un respaldo 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 inconsistente. Excepto en circunstancias poco frecuentes, como actualizar instrucciones de arranque inicial, las implementaciones no deben modificar el contenido de la región de arranque de copia de seguridad.
3.1 Subregiones del sector de arranque principal y de copia de seguridad
El sector de arranque principal contiene código para el salto de arranque desde un volumen exFAT y parámetros exFAT fundamentales que describen la estructura del volumen (consulte la tabla 4). BIOS, MBR u otros agentes de carga de arranque pueden inspeccionar este sector y cargar y ejecutar las instrucciones 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 la 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 de arranque principal y de respaldo
Nombre del campo | de desplazamiento (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
JumpBoot | 0 | 3 | Este campo es obligatorio y la sección 3.1.1 define su contenido. |
NombreDelSistemaDeArchivos | 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. |
Desplazamiento de Partición | 64 | 8 | Este campo es obligatorio y la sección 3.1.4 define su contenido. |
Longitud del Volumen | 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. |
Contador de Clústeres | 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. |
Número de serie del volumen | 100 | 4 | Este campo es obligatorio y la sección 3.1.11 define su contenido. |
Revisión del Sistema de Archivos | 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. |
DesplazamientoDeBytesPorSector | 108 | 1 | Este campo es obligatorio y la sección 3.1.14 define su contenido. |
DesplazamientoDeSectoresPorCluster | 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. |
PorcentajeEnUso | 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. |
Código de Arranque | 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. |
3.1.1 Campo JumpBoot
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 de orden 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 PartitionOffset (campo)
El campo PartitionOffset describirá el desplazamiento del sector relativo al medio de la partición que hospeda el volumen exFAT especificado. Este campo ayuda a arrastrar el arranque desde el volumen mediante INT 13h extendido 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 Campo VolumeLength
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 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) *2SectorsPerClusterShift.
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, teniendo en cuenta los sectores que consumen las regiones de arranque principal y de arranque de copia de seguridad
- A lo sumo ClusterHeapOffset - (FatLength * NumberOfFats), que representa los sectores que consume el área 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) *2 2/ 2BytesPerSectorShiftredondeado hasta el 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 redondeados hacia abajo hasta el entero más cercano, lo que garantiza que existen las FT antes del montón de clústeres.
Este campo puede contener un valor superior a 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 a las implementaciones alinear 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), lo que resulte en el cálculo 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 del clúster 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 en la acumulación de clústeres aumentando el tamaño del clúster (a través del campo SectoresPerClusterShift). Esta especificación no recomienda más de2 clústeres de 24 a 2 en el montón de clústeres. Sin embargo, las implementaciones deberán ser capaces de manejar volúmenes con hasta 2^32 - 11 clústeres en el montón de clústeres.
3.1.10 Campo Primer Clúster del Directorio Raíz
El campo FirstClusterOfRootDirectory contendrá el índice de clúster del primer clúster del directorio raíz. Las implementaciones deben hacer todo lo posible para 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 (campo)
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 fecha y 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 alto 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 mayor 1 y no montarán ningún volumen exFAT con ningún otro número de revisión principal. 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 su correspondiente suma de comprobación 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.
Tabla 5 Estructura del campo VolumeFlags
Nombre del campo | de desplazamiento (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
ActiveFat | 0 | 1 | Este campo es obligatorio y la sección 3.1.13.1 define su contenido. |
VolumenSucio | 1 | 1 | Este campo es obligatorio y la sección 3.1.13.2 define su contenido. |
Fallo de medios | 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é FAT y qué mapa de bits de asignación están activos (que deben usar las implementaciones), como se indica a continuación:
- 0, lo que significa que la Primera FAT y el mapa de bits de primera asignación están activos
- 1, lo que significa que el FAT secundario y el segundo mapa de bits de asignación están activos y solo es posible cuando el campo NumberOfFats contiene el valor 2
Las implementaciones tendrán en cuenta el FAT inactivo y el mapa de bits de asignación 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 garantizar que el sistema de archivos esté 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 después, 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 multimedia o no, como se indica a continuación:
- 0, lo que significa que los medios de alojamiento no han informado fallos o que los fallos conocidos ya se han registrado en el FAT como clústeres "defectuosos".
- 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 falla en los intentos de acceso a cualquier área 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 de errores multimedia y registran todos los errores como clústeres "incorrectos" en FAT (o, de lo contrario, 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 particular
- 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 log2(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 de 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 en forma de logaritmo base 2(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, lo que se calcula como un tamaño de clúster de 32 MB
3.1.16 Campo NumberOfFats
El campo NumberOfFats describirá el número de FATs y mapas de bits de asignación que el volumen contiene.
El intervalo válido de valores para este campo será:
- 1, que indica que el volumen solo contiene el First FAT y el First Allocation Bitmap.
- 2, que indica que el volumen contiene el Primer FAT, Segundo FAT, Primer mapa de bits de asignación y Segundo mapa de bits de asignación; este valor solo es válido para volúmenes de TexFAT.
3.1.17 Campo DriveSelect
El campo DriveSelect deberá contener el número de unidad INT 13h extendido, que facilita el arranque de este volumen mediante INT 13h extendido en ordenadores 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 PorcentajeEnUso
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 de clústeres, redondeado hacia abajo hasta el entero más cercano.
- FFh exactamente, que indica el porcentaje de clústeres asignados en el montón de clústeres no está disponible.
Las implementaciones deberán cambiar el valor de este campo para reflejar los cambios en la asignación de clústeres en la pila de clústeres o deberán cambiarlo a FFh.
Las implementaciones no incluirán este campo al calcular su correspondiente suma de comprobación 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 salto 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 autoinicialización deberán inicializar cada byte de este campo a F4h (la instrucción de detención para CPUs comunes en PCs 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 en este campo invalida el sector de arranque correspondiente. Las implementaciones deben verificar el contenido de este campo antes de depender de cualquier otro campo en su respectivo sector de arranque.
3.2 Sectores de arranque extendido principales y de respaldo subregiones
Cada sector de los sectores de arranque principales extendidos tiene la misma estructura; sin embargo, cada sector puede contener instrucciones de arranque distintas (consulte la tabla 6). Los agentes de arranque, como las instrucciones de arranque en el sector de arranque principal, las implementaciones alternativas del BIOS o el firmware de un sistema embebido, 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 sectores principales de arranque extendido y tienen la misma estructura (consulte la tabla 6).
Antes de ejecutar las instrucciones de los sectores principal o de arranque extendido 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 inicializará el contenido de los sectores de arranque principal y extendido de copia de seguridad, las implementaciones pueden actualizar estos sectores (y también actualizarán la suma de comprobación de arranque correspondiente) según sea necesario.
Tabla 6 Estructura del sector de arranque extendido
Nombre del campo | de desplazamiento (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
Código de Inicio Extendido | 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. |
FirmaDeArranqueExtendida | 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 CódigoExtendidoDeArranque
El campo ExtendedBootCode contendrá instrucciones 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 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 dado es que sea un "Sector de Arranque Extendido" o no.
El valor válido para este campo es AA550000h. Cualquier otro valor en este campo invalida su respectivo Sector de arranque principal o Sector de arranque extendido de respaldo. Las implementaciones deben verificar el contenido de este campo antes de depender de cualquier otro campo en su sector de arranque extendido respectivo.
3.3 Subregiones principales y de copia de seguridad de parámetros OEM
La subregión Parámetros principales del 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 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 propia 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 OEM de Respaldo son un respaldo de los Parámetros Principales del OEM y tienen la misma estructura (consulte Tabla 7).
Antes de usar el contenido de los parámetros 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 main y backup 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 OEM de Main y Backup.
Las implementaciones pueden actualizar los Parámetros OEM principales y de copia de seguridad cuando sea necesario (y también actualizarán la suma de comprobación de arranque correspondiente).
Tabla 7 Estructura de parámetros de OEM
Nombre del campo | de desplazamiento (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 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 (vea 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 | de desplazamiento (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 (vea la tabla 9). Al crear o actualizar la estructura parámetros de OEM, las implementaciones rellenarán los campos Parameters sin usar con la estructura Parámetros NULL. Además, al crear o actualizar la estructura parámetros de 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 oem.
La compatibilidad con la estructura De parámetros NULL es obligatoria.
Tabla 9 Estructura de parámetros NULL
Nombre del campo | de desplazamiento (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
Guía de Parámetros | 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 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 durante 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 | de desplazamiento (byte) |
Tamaño (bytes) |
Comentarios |
---|---|---|---|
ParametersGuid | 0 | 16 | Este campo es obligatorio y la sección 3.3.4.1 define su contenido. |
TamañoDeBloqueDeBorrado | 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 | veinticuatro | 4 | Este campo es obligatorio y la sección 3.3.4.4 define su contenido. |
Tiempo de Acceso Aleatorio | 28 | 4 | Este campo es obligatorio y la sección 3.3.4.5 define su contenido. |
TiempoDeProgramación | 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 Parámetros Campo Guid
El campo ParametersGuid se ajustará a la definición proporcionada en 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 {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 Tamaño de página
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 debe describir el número de sectores que la memoria flash tiene disponible para sus operaciones internas de reserva.
3.3.4.5 Campo RandomAccessTime
El campo RandomAccessTime describirá el promedio de tiempo de acceso aleatorio del medio flash, en nanosegundos.
3.3.4.6 Campo Tiempo de Programación
El campo ProgrammingTime describirá el tiempo medio de programación de los medios flash, en nanosegundos.
3.3.4.7 Campo ReadCycle
El campo ReadCycle describirá el tiempo medio de lectura promedio 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-regiones de suma de comprobación de arranque principales y de copia de seguridad
Las sumas de comprobación de arranque principal y de respaldo contienen cada una un patrón repetitivo de la suma de comprobación de cuatro bytes del contenido de todas las demás sub-regiones en 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 subregiones de las regiones Principal o de Respaldo de Arranque, las implementaciones comprobarán su contenido mediante la validación de su suma de comprobación de arranque respectiva.
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 de sus respectivas regiones de arranque.
Figura 1 Cálculo del checksum 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 la Tabla de Asignación de Archivos
La región Tabla de Asignación de Archivos (FAT) puede contener hasta dos FAT, uno en la subregión del Primer FAT y otro en la subregión del Segundo FAT. El campo NumberOfFats describe cuántos 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 una FAT. Si el campo NumberOfFats es dos, la segunda subregión FAT también contiene una 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 inactiva y el cambio entre sistemas FAT es específico de la implementación.
4.1 Primera y Segunda Subregiones de FAT
Una 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 enlazada singular 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 | de desplazamiento (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án definidos. 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 más bajo) 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 usar este campo para ningún propósito. Las implementaciones no deben interpretar este campo y conservarán su contenido en todas las operaciones que modifiquen 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, inclusive, que apunta al siguiente FatEntry en la cadena de clústeres especificada; el objeto FatEntry dado no señalará a fatEntry que lo precede en la cadena de clústeres dada.
- 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 la última fatEntry de cualquier cadena de clúster determinada.
5 Región de datos
La región 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 del clúster es muy sencilla (consulte la tabla 12); cada serie consecutiva de sectores describe un clúster, como define el campo SectorsPerClusterShift. Importantemente, 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. Esta es 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 del montón de clústeres.
Tabla 12 Estructura del montón de clústeres
Nombre del campo | de desplazamiento (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 principal y de arranque de copia de seguridad contienen los campos ClusterCount, ClusterHeapOffset y SectorsPerClusterShift. |
5.1.1 Clúster[2] ... Clúster[ClusterCount+1] Campos
Cada campo Clúster de esta matriz es una serie de sectores contiguos, cuyo tamaño se define mediante el campo SectoresPerClusterShift.
Estructura de directorios 6
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 del á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 forma enlazada individualmente.
Cada directorio consta de una serie de entradas de directorio (vea 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 | de desplazamiento (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érica (consulte sección 6.2).
6.2 Plantilla genérica de entrada de directorio
La plantilla DirectoryEntry genérico 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 las definidas en la sección 7.8 y la sección 7.9). La capacidad de interpretar la plantilla Generic DirectoryEntry es obligatoria.
Tabla 14 Plantilla de DirectoryEntry genérica
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 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. |
Longitud de Datos | veinticuatro | 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 siguientes condiciones:
- 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 inclusive, que es un marcador de entrada de directorio sin usar y se aplican las condiciones siguientes:
- Todos los demás campos de 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 (consulte la sección 6.2.1.4) que contiene el valor 0.
- Entre 81h y FFh inclusive, se trata de una entrada de directorio regular y las siguientes condiciones se aplican:
- 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 (consulte la sección 6.2.1.4) que contiene el valor 1.
Para evitar que modificaciones en el campo InUse (vea la sección 6.2.1.4) resulten erróneamente en un marcador de fin de directorio, el valor 80h no es válido.
Estructura de campo EntryType genérica de la tabla 15
Nombre del campo | de desplazamiento (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
Código de Tipo | 0 | 5 | Este campo es obligatorio y la sección 6.2.1.1 define su contenido. |
TipoImportancia | 5 | 1 | Este campo es obligatorio y la sección 6.2.1.2 define su contenido. |
TipoCategoría | 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. |
6.2.1.1 Campo TypeCode
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 (consulte la sección 6.2.1.2 y la 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 especificada 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 dada es benigna (consulte la sección 6.3.1.2.2 y la sección 6.4.1.2.2 para las entradas benignas del directorio principal e benigno, 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 InUse field
El campo InUse describirá si la entrada de directorio especificada está 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 normal.
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 LongitudDeDatos
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 * 2 SectoresPerClusterShift * 2 BytesPerSectorShift
Las estructuras que derivan de esta plantilla pueden volver a definir los campos FirstCluster y DataLength, si una asignación de clúster no es posible para la estructura derivada.
6.3 Plantilla genérica de entrada principal del directorio
La primera entrada de directorio de 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 del directorio principal derivan de la plantilla de Entrada del Directorio Principal Genérica (consulte la tabla 16), que se deriva de la plantilla de Entrada del Directorio Genérica (consulte la sección 6.2).
Tabla 16 Plantilla de directorio principal genéricoEntry
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 0 | 1 | Este campo es obligatorio y la sección 6.3.1 define su contenido. |
Cuenta secundaria | 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. |
BanderasPrimariasGenerales | 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. |
Longitud de Datos | veinticuatro | 8 | Este campo es obligatorio y la sección 6.3.6 define su contenido. |
6.3.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).
6.3.1.1 Campo Código de Tipo
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 ImportanciaTipo
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, consulte sección 7.4).
La definición de entradas críticas del directorio principal se correlaciona con el número de revisión 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 define esta especificación.
6.3.1.2.2 Entradas de directorio principal benignas
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 menor. La compatibilidad con cualquier entrada de directorio principal benigna esta especificación, o cualquier especificación posterior, define es opcional. Una entrada benigna no reconocida del directorio principal convierte todo el conjunto de entradas de directorio en no reconocidas (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 Campo InUse
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 (checksum) de todas las entradas de directorio en el conjunto especificado de entradas de directorio. 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 determinado.
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 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 de entrada de directorio principal críticas que derivan de esta plantilla pueden redefinir este campo.
Tabla 17 Estructura de campo genérica de GeneralPrimaryFlags
Nombre del campo | de desplazamiento (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 no es posible una asignación asociada de clústeres 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 hasta el 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 Campo FirstCluster
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, entonces FirstCluster debe apuntar a un clúster válido en la pila de clústeres.
Las estructuras de entrada de directorio principal críticas 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 LongitudDeDatos (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 de entrada de directorio principal críticas 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 Genérica de Entrada de Directorio Secundario
El propósito central de las entradas del 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 y benignas se correlaciona con el número de revisión menor de exFAT. La compatibilidad con cualquier entrada de directorio secundaria crítica o benigna esta especificación, o especificaciones posteriores, define es opcional.
Todas las estructuras de entrada de directorio secundaria derivan de la plantilla DirectoryEntry secundaria genérica (consulte la tabla 18), que se deriva de la plantilla DirectoryEntry genérica (consulte la sección 6.2).
Tabla 18 Plantilla de entrada de directorio secundaria genérica
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 0 | 1 | Este campo es obligatorio y la sección 6.4.1 define su contenido. |
BanderasSecundariasGenerales | 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. |
Longitud de Datos | veinticuatro | 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).
6.4.1.1 Campo TypeCode
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 Campo TipoImportancia
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 asignación asociada a ninguna entrada de directorio del conjunto de entradas de directorio contiene (las entradas del directorio de archivos son una excepción, consulte sección 7.4).
6.4.1.2.2 Entradas de directorio secundario benignas
Las entradas secundarias benignas del directorio contienen información adicional que puede resultar útil para gestionar su conjunto de registros de directorio. 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 reconocidos.
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érica (consulte la sección 6.2.1.3).
Para esta plantilla, el valor válido para este campo es 1.
6.4.1.4 Campo EnUso
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 GeneralSecondaryFlags (estructura de campo)
Nombre del campo | de desplazamiento (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
AsignaciónPosible | 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 campo del mismo nombre en la plantilla de DirectoryEntry Principal Genérico (consulte la sección 6.3.4.1).
6.4.2.2 Campo NoFatChain
El campo NoFatChain tendrá la misma definición que el campo del mismo nombre en la plantilla Entry Directorio Primario Genérico (consulte la sección 6.3.4.2).
6.4.3 Campo FirstCluster
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, entonces FirstCluster debe apuntar a un clúster válido en la pila de clústeres.
6.4.4 Campo Longitud de Datos
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:
- Primario crítico
- Mapa de bits de asignación (sección 7.1)
- Tabla de mayúsculas (sección 7.2)
- Etiqueta de volumen (sección 7.3)
- Archivo (sección 7.4)
- Benigno primario
- 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, una FAT no describe el estado de asignación de los clústeres; en su lugar, un mapa de bits de asignación sí lo hace. 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 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 del mapa de bits de asignación solo son válidas si una describe el mapa de bits de primera asignación y la otra describe el mapa de bits de segunda asignación.
Tabla 20 Asignación Directorio de mapa de bitsRegistro
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 0 | 1 | Este campo es obligatorio y la sección 7.1.1 define su contenido. |
Banderas de Bitmap | 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. |
Longitud de Datos | veinticuatro | 8 | Este campo es obligatorio y la sección 7.1.4 define su contenido. |
Campo EntryType 7.1.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.1.1.1
El campo TypeCode se ajustará a la definición proporcionada en la plantilla de entrada de directorio principal genérico (consulte la sección 6.3.1.1).
Para una entrada de directorio de asignación de mapa de bits, 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 de Directorio Principal Genérico (consulte la sección 6.3.1.2).
Para una entrada de directorio de un mapa de bits de asignación, el valor válido para este campo es 0.
7.1.1.3 Campo TypeCategory
El campo TypeCategory deberá ajustarse a la definición proporcionada en la plantilla de Entrada de Directorio Primario Genérico (consulte la sección 6.3.1.3).
7.1.1.4 Campo InUse
El campo InUse debe ajustarse a la definición proporcionada en la plantilla de Entrada de Directorio Genérico Principal (consulte la sección 6.3.1.4).
7.1.2 Campo BitmapFlags
El campo BitmapFlags contiene marcas (vea la tabla 21).
Tabla 21 Estructura de campo BitmapFlags
Nombre del campo | de desplazamiento (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 usarán el mapa de bits de segunda asignación junto con la Segunda FAT. El campo ActiveFat indica qué FAT y mapa de bits de asignación 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 debe ajustarse a la definición proporcionada en la plantilla Entrada de Directorio Primario Genérico (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 de entrada del Directorio Principal Genérico (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 del mapa de bits de asignación
Nombre del campo | de desplazamiento (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 | Contador de Clústeres | (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 puede 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 caracteres en minúsculas a mayúsculas. Esto es importante debido a que la entrada del directorio para el nombre del archivo (consulte la sección 7.7) que usa caracteres Unicode y el sistema de archivos exFAT no distingue entre mayúsculas y minúsculas y las conserva. La tabla up-case 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 de mayúsculas es 1.
Debido a la relación entre la tabla de mayúsculas y los nombres de archivo, las implementaciones no deben modificar la tabla de mayúsculas, excepto como resultado de las operaciones de formato.
Tabla 23 Estructura de directorio de tabla de mayúsculas
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 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. |
Reservado2 | 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. |
Longitud de Datos | veinticuatro | 8 | Este campo es obligatorio y la sección 7.2.4 define su contenido. |
7.2.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).
7.2.1.1 Campo TypeCode
El campo TypeCode se ajustará a la definición proporcionada en la plantilla de entrada de directorio principal genérico (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 TipoImportancia
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla de Directorio Principal Genérico (consulte la sección 6.3.1.2).
Para la entrada del directorio Tabla de mayúsculas, el valor válido para este campo es 0.
7.2.1.3 Campo TypeCategory
El campo TypeCategory deberá ajustarse a la definición proporcionada en la plantilla de Entrada de Directorio Primario Genérico (consulte la sección 6.3.1.3).
7.2.1.4 Campo InUse
El campo InUse debe ajustarse a la definición proporcionada en la plantilla de Entrada de Directorio Genérico Principal (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 (descrita por 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.
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 debe ajustarse a la definición proporcionada en la plantilla Entrada de Directorio Primario Genérico (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 de entrada del Directorio Principal Genérico (consulte la sección 6.3.6).
7.2.5 Tabla de conversión a mayú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, en el que el índice del campo en la tabla de mayúsculas representa el carácter Unicode que se va a convertir a mayúsculas, y el campo de 2 bytes representa el carácter Unicode convertido a mayúsculas.
Los primeros 128 caracteres Unicode tienen asignaciones obligatorias (consulte la tabla 24). Una tabla de mayúsculas que tenga cualquier otra asignación de caracteres para los primeros 128 caracteres Unicode es invá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. Estas 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). Al convertir en mayúsculas nombres de archivo existentes, estas implementaciones no convertirán en mayúsculas los caracteres del rango de asignación no obligatorio, sino que los dejarán intactos en el nombre de archivo resultante en mayúsculas (esto es un uso parcial de mayúsculas). Al comparar nombres de archivos, estas implementaciones considerarán equivalentes los nombres de archivos que difieran del nombre en comparación únicamente por caracteres Unicode dentro del intervalo de asignación no obligatoria. Aunque estos nombres de archivo solo son potencialmente equivalentes, estas implementaciones no pueden garantizar que el nombre de archivo completamente en mayúsculas no entre en conflicto con el nombre con el que se compara.
Tabla 24 Entradas obligatorias de las primeras 128 mayúsculas en la tabla
Tabla de índices | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 00:00 h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 00:09 h | 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 no idénticas están en negrita)
Al dar formato a un volumen, las implementaciones pueden generar una tabla de caracteres en mayúsculas en un formato comprimido mediante la compresión de mapeo de identidades, ya que una gran parte del espacio de caracteres Unicode no tiene ningún concepto de mayúscula o minúscula (lo que significa que los caracteres "minúsculas" y "mayúsculas" son equivalentes). Las implementaciones comprimen una tabla de mayú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 los primeros 100 mapeos de caracteres (64h) con las ocho entradas siguientes de una tabla de mayúsculas comprimida.
FFFFh, 0061h, 0041h, 0042h, 0043h
Las dos primeras entradas indican que los primeros 97 (61h) caracteres (de 0000h a 0060h) tienen mapeos de identidad. Los caracteres subsecuentes, desde 0061h hasta 0063h, se corresponden con los caracteres 0041h hasta 0043h, respectivamente.
La capacidad de proporcionar una tabla de mayúsculas y minúsculas comprimidas al dar formato a un volumen es opcional. Sin embargo, la capacidad de interpretar tanto una tabla de mayúsculas sin comprimir como una comprimida es obligatoria. El valor del campo TableChecksum siempre se ajusta a cómo existe la tabla de caracteres en mayúsculas en el volumen, que puede estar en formato comprimido o descomprimido.
7.2.5.1 Tabla de mayúsculas recomendada
Al aplicar formato a un volumen, las implementaciones deben registrar la tabla de mayúsculas y minúsculas recomendada en formato comprimido (vea 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, comprimida o sin comprimir, esa tabla abarcará el intervalo de caracteres Unicode completo (desde códigos de caracteres 0000h hasta FFFFh inclusive).
Tabla 25 Tabla de mayúsculas recomendada en formato comprimido
Offset bruto | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 00:00 h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 00:09 h | 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 | 01:00 h | 01:02 h | 01:02 h | 0104h | 0104h | 0106h | 0106h |
0108h | 01:08 h | 01:08 h | 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 | 01:26 h | 01:26 h |
0128h | 0128h | 0128h | 012Ah | 012Ah | 012Ch | 012Ch | 012Eh | 012Eh |
0130h | 0130h | 01:31 horas | 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 | 01:70 horas | 01:70 horas | 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 | 02:00 h | 0202h | 0202h | 02:04 h | 02:04 h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 02:14 h | 0216h | 0216h |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 02:24 horas | 02:24 horas | 0226h | 0226h |
0228h | 02:28 h | 02:28 h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 02:34 h | 0235h | 02:36h | 0237h |
0238h | 0238h | 02:39 h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 02:44h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 02:50 horas | 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 | 0285 horas | 0286h | 0287h |
0288h | 01AEh | 02:44h | 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 | 02D1 horas | 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 | 02FFh |
0300h | 0300 horas | 0301h | 03:02 horas | 0303h | 0304h | 0305h | 03:06 h | 03:07 h |
0308h | 03:08h | 03:09 horas | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 03:12 h | 0313h | 0314h | 0315h | 0316h | 03:17h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 03:21h | 0322h | 03:23 h | 0324h | 0325h | 0326 h | 0327h |
0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 0332h | 03:33h | 0334h | 0335h | 0336h | 0337h |
0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 03:46h | 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 | 03:84 h | 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 | 04:00 h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0408h | 04:08h | 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 | 04:23 h | 0424h | 0425h | 0426h | 0427h |
0428h | 04:28 horas | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0430h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0438h | 04:18 h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0440h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0448h | 04:28 horas | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0450h | 04:00 horas | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0458h | 04:08h | 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 | 0474 horas | 0474 horas | 04:76 h | 04:76 h |
0478h | 0478h | 0478h | 047Ah | 047Ah | 047Ch | 047Ch | 047Eh | 047Eh |
0480h | 0480h | 0480h | 0482h | 0483h | 0484h | 0485 h | 0486h | 0487h |
0488h | 0488 horas | 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 | 05:00 horas | 05:00 horas | 0502h | 0502h | 0504h | 05:04 h | 05:06 h | 05:06 h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h | 0510h | 05:10 h | 0512h | 0512h | 0514h | 0515h | 05:16 h | 0517h |
0518h | 05:18 h | 05:19 h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 05:21 h | 05:22 a.m. | 05:23 h | 0524h | 0525h | 0526h | 0527h |
0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
0530h | 0530h | 0531h | 05:32 h | 0533h | 05:34 h | 0535h | 0536h | 05:37 h |
0538h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0540h | 0540h | 0541h | 0542h | 0543h | 05:44 hrs | 0545h | 0546h | 0547h |
0548h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0550h | 0550h | 0551h | 05:52 horas | 0553h | 0554h | 0555h | 0556h | 0557h |
0558h | 0558h | 0559h | 055Ah | 055Bh | 055Ch | 055Dh | 055Eh | 055Fh |
0560h | 0560h | 0531h | 05:32 h | 0533h | 05:34 h | 0535h | 0536h | 05:37 h |
0568h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0570h | 0540h | 0541h | 0542h | 0543h | 05:44 hrs | 0545h | 0546h | 0547h |
0578h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0580h | 0550h | 0551h | 05:52 horas | 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 | 1 día y 98 horas | 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 | 1D1H | 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 | 1E20 horas | 1E20 horas | 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 | Fuerza Aérea de Chile (1FACh) | 1FADh | 1FAEh | 1FAFh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B8h | Fuerza Aérea de Chile (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 | 2002 h | 2003h |
0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
0818h | 200Ch | 200Dh | 200Eh | 200Fh | 20:10 horas | 2011h | 2012h | 2013h |
0820h | 2014h | 2015h | 2016h | 2017h | 2018h | 2019h | 201Ah | 201Bh |
0828h | 201Ch | 201Dh | 201Eh | 201Fh | 2020h | 2021h | 2022h | 2023h |
0830h | 2024h | 20:25 horas | 2026h | 2027h | 2028h | 2029h | 202Ah | 202Bh |
0838h | 202Ch | 202Dh | 202Eh | 202Fh | 20:30 | 2031h | 2032h | 20:33 h |
0840h | 2034h | 2035h | 2036h | 2037h | 2038h | 2039h | 203Ah | 203Bh |
0848h | 203Ch | 203Dh | 203Eh | 203Fh | 20:40 | 2041h | 2042h | 2043h |
0850h | 20:44 | 2045h | 2046h | 20:47 | 2048h | 2049h | 204Ah | 204Bh |
0858h | 204Ch | 204Dh | 204Eh | 204Fh | 20:50 h | 20:51 h | 2052h | 2053h |
0860h | 2054h | 2055h | 20:56 | 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 | 2070 horas | 2071h | 2072h | 2073h |
0880h | 2074h | 2075h | 2076h | 2077h | 2078h | 2079h | 207Ah | 207Bh |
0888h | 207Ch | 207Dh | 207Eh | 207Fh | 2080h | 2081 horas | 2082h | 2083h |
0890h | 2084h | 2085h | 2086h | 2087h | 2088h | 2089h | 208Ah | 208Bh |
0898h | 208Ch | 208Dh | 208Eh | 208Fh | 2090h | 2091h | 2092h | 2093h |
08A0h | 2094h | 20:95 horas | 2096h | 2097h | 2098 h | 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 | 20BBh |
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 | 20 días y 4 horas | 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 | 20FFh | 21:00 | 21:01 h | 2102h | 2103h |
0910h | 2104h | 21:05 h | 21:06 | 2107h | 21:08 | 2109 h | 210Ah | 210Bh |
0918h | 210Ch | 210 dírhams | 210Eh | 210Fh | 21:10 | 2111h | 21:12 | 2113 h |
0920h | 21:14 | 21:15 | 2116 h | 21:17 | 21:18 h | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 21:20 h | 2121 h | 21:22 | 2123h |
0930h | 2124h | 21:25 h | 2126h | 2127 horas | 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 | 21:47 | 2148h | 2149h | 214Ah | 214Bh |
0958h | 214Ch | 214Dh | 2132h | 214Fh | 2150h | 21:51 h | 21:52 h | 2153h |
0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
0968h | 215Ch | 215Dh | 215Eh | 215Fh | 2160 horas | 2161 h | 2162h | 2163h |
0970h | 2164h | 21:65 h | 2166h | 2167h | 2168 horas | 2169h | 216Ah | 216Bh |
0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160 horas | 2161 h | 2162h | 2163h |
0980h | 2164h | 21:65 h | 2166h | 2167h | 2168 horas | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 24BBh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 07:46 | 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 | Fuerza Aérea de Chile (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 Estructura de la Entrada de Directorio de la Etiqueta de Volumen
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 0 | 1 | Este campo es obligatorio y la sección 7.3.1 define su contenido. |
Contador de Caracteres | 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 | veinticuatro | 8 | Este campo es obligatorio y su contenido está reservado. |
7.3.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).
7.3.1.1 Campo TypeCode
El campo TypeCode se ajustará a la definición proporcionada en la plantilla de entrada de directorio principal genérico (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 Campo ImportanciaDeTipo
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla de Directorio Principal Genérico (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 TipoCategoría
El campo TypeCategory deberá ajustarse a la definición proporcionada en la plantilla de Entrada de Directorio Primario Genérico (consulte la sección 6.3.1.3).
7.3.1.4 Campo InUse
El campo InUse debe ajustarse a la definición proporcionada en la plantilla de Entrada de Directorio Genérico Principal (consulte la sección 6.3.1.4).
7.3.2 Campo CharacterCount
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 de 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 flujo y al menos una entrada de directorio de nombre de archivo debe seguir inmediatamente la entrada de directorio de archivo (consulte Sección 7.6 y Sección 7.7, respectivamente).
Tabla 27 Entrada de directorio de archivo
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 0 | 1 | Este campo es obligatorio y la sección 7.4.1 define su contenido. |
Cuenta secundaria | 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. |
MarcaTemporalDeÚltimaModificación | 12 | 4 | Este campo es obligatorio y la sección 7.4.6 define su contenido. |
Marca de tiempo de último acceso | 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 | Veintiuno | 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. |
DesplazamientoUtcÚltimaModificación | 23 | 1 | Este campo es obligatorio y la sección 7.4.6 define su contenido. |
ÚltimoAccesoDesplazamientoUTC | veinticuatro | 1 | Este campo es obligatorio y la sección 7.4.7 define su contenido. |
Reservado2 | 25 | 7 | Este campo es obligatorio y su contenido está reservado. |
7.4.1 Campo Tipo de Entrada
El campo EntryType se ajustará a la definición proporcionada en la plantilla Directorio principal genéricoEntry (consulte la sección 6.3.1).
7.4.1.1 Campo TypeCode
El campo TypeCode se ajustará a la definición proporcionada en la plantilla de entrada de directorio principal genérico (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 ImportanciaDeTipo
El campo TypeImportance se ajustará a la definición proporcionada en la plantilla de Directorio Principal Genérico (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 CategoríaDeTipo
El campo TypeCategory deberá ajustarse a la definición proporcionada en la plantilla de Entrada de Directorio Primario Genérico (consulte la sección 6.3.1.3).
7.4.1.4 Campo InUse
El campo InUse debe ajustarse a la definición proporcionada en la plantilla de Entrada de Directorio Genérico Principal (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 de Entrada del directorio primario genérico (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 | de desplazamiento (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
ReadOnly | 0 | 1 | Este campo es obligatorio y se ajusta a la definición de MS-DOS. |
Oculto | 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. |
Reservado2 | 6 | 10 | Este campo es obligatorio y su contenido está reservado. |
7.4.5 Campos CreateTimestamp, Create10msIncrement y CreateUtcOffset
En combinación, los campos CreateTimestamp y CreateTime10msIncrement describirán 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 con respecto a UTC. Las implementaciones establecerán estos campos al crear el conjunto de entrada 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 describirán la fecha y hora local 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 desde 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 flujo dada (excepto el contenido que existe más allá del punto que describe el campo ValidDataLength)
- Al cambiar los valores de cualquiera 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 local en que se accedió 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 la extensión de flujo dada (excepto para el contenido existente más allá del ValidDataLength)
- Al cambiar los valores de cualquiera 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 flujo dada.
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 (consulte la tabla 29).
Tabla 29 Estructura de campo de marca de tiempo
Nombre del campo | de desplazamiento (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. |
Mes | Veintiuno | 4 | Este campo es obligatorio y la sección 7.4.8.5 define su contenido. |
Año | 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últiplo de dos segundos.
El intervalo válido de valores para este campo será:
- 0, que representa 0 segundos
- 29, que representa 58 segundos
7.4.8.2 Campo de minuto
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
7.4.8.3 Campo de 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
7.4.8.4 Campo de 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 dado
- El último día del mes dado (el mes especificado define el número de días válidos)
Campo del mes 7.4.8.5
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
7.4.8.6 Campo de año
El campo Año describirá la parte del año del campo Marca de tiempo, en relación con el 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 Campos de Incremento de 10ms
Los campos 10msIncrement proporcionarán una resolución de tiempo adicional a sus correspondientes campos de marca de tiempo 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 Campos de UtcOffset
Los campos UtcOffset (consulte la Tabla 30) deben describir el desfase de UTC a la fecha y la hora local que describen los campos correspondientes de Timestamp y 10msIncrement. 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 en el horario de verano.
Tabla 30 UtcOffset (estructura de campo)
Nombre del campo | de desplazamiento (bit) |
Tamaño (bits) |
Comentarios |
---|---|---|---|
OffsetFromUtc | 0 | 7 | Este campo es obligatorio y la sección 7.4.10.1define su contenido. |
DesplazamientoVálido | 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 y hora locales que contienen los campos relacionados Timestamp y 10msIncrement. 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 |
. . . |
. . . |
. . . |
01 hora | 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 |
. . . |
. . . |
. . . |
41 horas | -63 | La fecha y hora locales son UTC: 15:45 |
40 horas | -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.
- La fecha y hora locales no se conocen, en cuyo caso el valor del campo OffsetValid será 1 y las implementaciones considerarán UTC como 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 intervalos de 15 minutos, las implementaciones deben registrar 00h en el campo OffsetFromUtc y deben considerar UTC como 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
deberán ser 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 como teniendo el mismo offset UTC que la fecha y hora locales actuales.
7.5 Entrada de directorio GUID de volumen
La entrada del directorio del volumen GUID contiene un GUID que permite a las implementaciones distinguir los volúmenes de manera única y programática. El Volumen GUID existe como una entrada primaria de directorio benigna en el directorio raíz (consulte la Tabla 32). El número permitido de entradas en el directorio GUID de volumen varía de 0 a 1.
Tabla 32 Entrada del Directorio GUID de Volumen
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 0 | 1 | Este campo es obligatorio y la sección 7.5.1 define su contenido. |
Cuenta secundaria | 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. |
BanderasPrimariasGenerales | 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. |
7.5.1 El 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).
7.5.1.1 Campo TypeCode
El campo TypeCode se ajustará a la definición proporcionada en la plantilla de entrada de directorio principal genérico (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 de Directorio Principal Genérico (consulte la sección 6.3.1.2).
Para la entrada del directorio GUID de volumen, el valor válido para este campo es 1.
7.5.1.3 Campo CategoríaTipo
El campo TypeCategory deberá ajustarse a la definición proporcionada en la plantilla de Entrada de Directorio Primario Genérico (consulte la sección 6.3.1.3).
7.5.1.4 Campo EnUso
El campo InUse debe ajustarse a la definición proporcionada en la plantilla de Entrada de Directorio Genérico Principal (consulte la sección 6.3.1.4).
7.5.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).
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 de Entrada del directorio primario genérico (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 DirectorioEntry genérico principal (consulte la sección 6.3.4) y define el contenido del campo CustomDefined que se debe reservar.
7.5.4.1 Campo AllocationPossible
El campo AllocationPossible se ajustará a la definición proporcionada en la plantilla de Entry de Directorio principal genérico (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 identifique de forma única el volumen especificado.
Todos los valores posibles para este campo son válidos, excepto el GUID null, que es {00000000-0000-0000-0000-000000000000}.
7.6 Entrada de directorio de extensión de flujo
La entrada de directorio de extensión de flujo 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 del 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 del directorio Archivo.
Tabla 33 Entrada del directorio de extensión de secuencia
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 0 | 1 | Este campo es obligatorio y la sección 7.6.1 define su contenido. |
BanderasSecundariasGenerales | 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. |
Longitud del Nombre | 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. |
Reservado2 | 6 | 2 | Este campo es obligatorio y su contenido está reservado. |
LongitudDeDatosValida | 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. |
Longitud de Datos | veinticuatro | 8 | Este campo es obligatorio y la sección 7.6.7 define su contenido. |
7.6.1 Campo EntryType
El campo EntryType se ajustará a la definición proporcionada en la plantilla DirectoryEntry secundaria genérica (consulte la sección 6.4.1).
7.6.1.1 Campo TypeCode
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 ImportanciaDelTipo
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 Categoría de Tipo
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (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 de Entrada del Directorio Secundario Genérico (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 'Generic Secondary DirectoryEntry' (consulte la sección 6.4.2.1).
Para la entrada de directorio Stream Extension, 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 que colectivamente contienen las entradas de directorio de Nombre de archivo posteriores (consulte la sección 7.7).
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 de entradas de directorio de nombre de archivo (vea 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 en mayúsculas. Esto permite que las implementaciones realicen una comparación rápida al buscar un archivo por nombre. Importantemente, NameHash proporciona una comprobación segura de un error de coincidencia. Las implementaciones verificarán todas las coincidencias de NameHash mediante una comparación del nombre de archivo en mayú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 escriben datos más allá en el flujo de datos. En el medio 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 han escrito datos 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 Longitud de Datos
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 directorios, el valor máximo de este campo es de 256 MB.
7.7 Entrada de nombre de archivo en el directorio
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 nombres de archivos en un conjunto de entradas de directorio de archivos es NameLength / 15, redondeado al entero más cercano. Además, las entradas del directorio de Nombre de Archivo solo son válidas si siguen inmediatamente a la entrada de directorio de Extensión de Flujo como serie consecutiva. Las entradas del directorio de nombres de archivo se combinan para formar el nombre de archivo del conjunto de entradas del directorio.
Todas las entradas secundarias de una entrada de directorio determinada tendrán conjuntos de entradas de directorio con nombres de archivo únicos. Es decir, no puede haber nombres de archivo o directorio duplicados después de convertir a mayúsculas dentro de cualquier directorio.
Tabla 34 Nombre de Archivo Entrada de Directorio
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 0 | 1 | Este campo es obligatorio y la sección 7.7.1 define su contenido. |
BanderasSecundariasGenerales | 1 | 1 | Este campo es obligatorio y la sección 7.7.2 define su contenido. |
NombreDeArchivo | 2 | 30 | Este campo es obligatorio y la sección 7.7.3 define su contenido. |
7.7.1 Campo EntryType
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 ImportanciaTipo
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 Nombre de archivo, el valor válido para este campo es 0.
7.7.1.3 Campo TipoCategoría
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (consulte la sección 6.4.1.3).
7.7.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.7.2 Campo de Indicadores Secundarios Generales
El campo GeneralSecondaryFlags se ajustará a la definición proporcionada en la plantilla de Entrada del Directorio Secundario Genérico (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 'Generic Secondary DirectoryEntry' (consulte la sección 6.4.2.1).
Para la entrada del directorio Nombre de archivo, 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 DirectoryEntry secundaria genérica (consulte la sección 6.4.2.2).
7.7.3 Campo NombreDeArchivo
El campo FileName contendrá una cadena Unicode, que es una parte del nombre de archivo. En el orden en que las entradas de nombre de archivo existen en un conjunto de entradas de directorio de archivos, los campos de FileName se concatenan para formar el nombre del archivo del conjunto de entradas de directorio. 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 (consulte la tabla 35). Las implementaciones deben establecer los caracteres no usados de los campos FileName en el valor 0000h.
Tabla 35 Caracteres de Nombre de Archivo no válidos
Código de caracteres | Descripción | Código de caracteres | Descripción | Código de caracteres | Descripción |
---|---|---|---|---|---|
00:00 h | 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 |
00:09 h | 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 | Asterisco | 002Fh | Barra inclinada | 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 "este directorio" y "directorio contenedor", 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. 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 del directorio de extensión del proveedor es una entrada secundaria benigna en conjuntos de entradas del 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 del directorio secundario, menos el número de otras entradas del directorio secundario. Además, las entradas del directorio de 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 del directorio de 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 eficazmente a los proveedores ampliar 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 secundaria benigna no reconocida (consulte la sección 8.2).
Tabla 36 Directorio de Extensión del Proveedor
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 0 | 1 | Este campo es obligatorio y la sección 7.8.1 define su contenido. |
BanderasSecundariasGenerales | 1 | 1 | Este campo es obligatorio y la sección 7.8.2 define su contenido. |
Guía del Vendedor | 2 | 16 | Este campo es obligatorio y la sección 7.8.3 define su contenido. |
Definido por el proveedor | 18 | 14 | Este campo es obligatorio y los proveedores pueden definir su contenido. |
7.8.1 Campo EntryType
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 ImportanciaDelTipo
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 CategoríaTipo
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (consulte la sección 6.4.1.3).
7.8.1.4 Campo EnUso
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 BanderasSecundariasGenerales
El campo GeneralSecondaryFlags se ajustará a la definición proporcionada en la plantilla de Entrada del Directorio Secundario Genérico (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 'Generic Secondary DirectoryEntry' (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).
7.8.3 Campo VendorGuid
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 null, 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 de 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 proveedor, hasta el límite de entradas del directorio secundario, menos el número de otras entradas del directorio secundario. Además, las entradas del directorio de asignación de proveedor solo son válidas si no preceden a las entradas de directorio necesarias de extensión de flujo y nombre de archivo.
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 eficazmente a los proveedores ampliar 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 proveedor tratarán la entrada del directorio igual que cualquier otra entrada de directorio secundaria benigna no reconocida (consulte la sección 8.2).
Tabla 37 Directorio de asignación de proveedoresEntry
Nombre del campo | de desplazamiento (byte) |
Tamaño (byte) |
Comentarios |
---|---|---|---|
Tipo de Entrada | 0 | 1 | Este campo es obligatorio y la sección 7.9.1 define su contenido. |
BanderasSecundariasGenerales | 1 | 1 | Este campo es obligatorio y la sección 7.9.2 define su contenido. |
Guía del Vendedor | 2 | 16 | Este campo es obligatorio y la sección 7.9.3 define su contenido. |
Definido por el proveedor | 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. |
Longitud de Datos | veinticuatro | 8 | Este campo es obligatorio y la sección 7.9.5 define su contenido. |
7.9.1 Campo EntryType
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 De asignación de proveedores, el valor válido para este campo es 1.
7.9.1.2 Campo ImportanciaDelTipo
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 De asignación de proveedores, el valor válido para este campo es 1.
7.9.1.3 Campo TipoCategoría
El campo TypeCategory se ajustará a la definición proporcionada en la plantilla Directorio secundario genéricoEntry (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 de indicadores generales secundarios
El campo GeneralSecondaryFlags se ajustará a la definición proporcionada en la plantilla de Entrada del Directorio Secundario Genérico (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 'Generic Secondary DirectoryEntry' (consulte la sección 6.4.2.1).
Para la entrada del directorio De 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).
7.9.3 Campo VendorGuid
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 null, 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).
Campo LongitudDeDatos
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 de relleno de TexFAT iguales que las demás entradas de directorio principal benignas no reconocidas, las implementaciones no moverán las entradas del directorio TexFAT Padding.
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 asignaciones de clúster, las implementaciones normalmente deben 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 futuras de exFAT del mismo número de revisión principal, 1, y un número de revisión menor superior a 0, pueden definir nuevas entradas de directorio primarias benignas, secundarias críticas y secundarias benignas. Solo las especificaciones exFAT de un número de revisión mayor pueden definir nuevas entradas críticas de directorio principal. Las implementaciones de esta especificación, exFAT Revision 1.00 File System Basic Specification, deben poder 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 principales críticas no reconocidas en el directorio raíz hace que el volumen sea inválido. La presencia de cualquier entrada de directorio principal crítica, excepto las entradas del 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 hubiera.
Las implementaciones no modificarán las entradas de directorio secundaria críticas no reconocidas ni sus asignaciones de clúster asociadas. La presencia de una o varias entradas de directorio secundarias críticas no reconocidas en un conjunto de entradas de directorio hace que todo el conjunto de entradas de directorio no sea reconocido. Al eliminar un conjunto de entradas de directorio que contiene una o varias entradas de directorio secundaria críticas no reconocidas, las implementaciones liberarán todas las asignaciones de clúster, si las hay, asociadas a entradas de directorio secundaria críticas no reconocidas. Además, si el conjunto de entradas de directorio describe un directorio, las implementaciones pueden:
- Accede al directorio
- Enumerar las entradas del directorio que contiene
- Eliminación de entradas de directorio contenidas
- Mover las entradas de directorio contenidas a un directorio diferente
Sin embargo, las implementaciones no deben:
- Modificar las entradas de directorio contenidas, excepto eliminar, como se indica
- Creación de nuevas entradas de directorio contenidas
- Abra entradas de directorio contenidas, excepto para 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 de 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 SectorsPerClusterShift define los límites de tamaño de clúster inferior y superior (límite inferior: 1 sector; límite superior: 25 -- sectores BytesPerSectorShift, que se evalúa como 32 MB).
9.3 Límites de tamaño del montón del clúster
El montón de clústeres contendrá al menos el espacio suficiente para alojar 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.
El límite de tamaño del montón de clúster inferior 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 de clústeres. 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 + número de clústeres de grasas, lo que se evalúa en 3 o 4 clústeres, según el 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: 2clústeres de 32 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 de volumen
El campo VolumeLength define los límites de tamaño de volumen inferior y superior (límite inferior: 220/ 2BytesPerSectorShift sectores, que equivale a 1 MB; límite superior: 264- 1 sectores, que, dado el mayor tamaño posible del sector, equivale a aproximadamente 64ZB). Sin embargo, esta especificación recomienda no más de 2^24 - 2 clústeres 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 + (224 - 2) * 2SectoresPerClusterShift. Dado el tamaño de clúster más grande posible, 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 de directorio de extensión de flujo 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 universalmente. 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 seguido de un grupo de 12 dígitos hexadecimales, por ejemplo {6B29FC40-CA47-1067-B31D-00DD010662DA}, (consulte la tabla 38).
Estructura GUID de la tabla 38
Nombre del campo | de desplazamiento (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 versiones de, correcciones, adiciones, eliminaciones y aclaraciones de este documento.
Tabla 39 Historial de cambios de documentación
Fecha | Descripción del cambio |
---|---|
08 de enero de 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 de directorio de extensión de proveedor y asignación de proveedores en las secciones 7.8 y 7.9 Adición de la tabla de mayúsculas 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 Marca temporal 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 en 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: La adición de DEBERÁ, DEBERÍA y PUEDE a las explicaciones de los campos. Adición de la definición UTC en la tabla 2 sección 1.3 Se modificaron las secciones 1.5 para garantizar la alineación con el documento de especificación TexFAT. Se ha aclarado la restricción de que solo Microsoft pueda 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 ha agregado una nota de implementación para ASCII al final de la sección 7.7.3 |
01-Enero-2009 | Cuarta versión de la especificación básica, que incluye los siguientes cambios: Se han quitado las referencias a las entradas de Control de acceso de Windows CE Se agregó 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 en la sección 6.3.5 y en la sección 6.4.3 de "FirstCluster Field debe ser cero si DataLength es cero y NoFatChain está establecido" a "Si el bit NoFatChain es 1, FirstCluster debe apuntar a un clúster válido en la pila de clústeres" 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" en la sección 6.3.6 y la sección 6.4.4 para aclarar que debe haber una asignación válida si se establece el bit NoFatChain. Se actualizó el aviso de copyright a 2010 |
26-ago-2019 | Séptima versión de la especificación básica, que incluye los siguientes cambios: Se actualizaron 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 Se actualizó el aviso de copyright a 2019 |