Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
1 Introduction
Le système de fichiers exFAT est le successeur de FAT32 dans la famille FAT des systèmes de fichiers. Cette spécification décrit le système de fichiers exFAT et fournit toutes les informations nécessaires à l’implémentation du système de fichiers exFAT.
1.1 Objectifs de conception
Le système de fichiers exFAT a trois objectifs de conception centraux (voir la liste ci-dessous).
Conserver la simplicité des systèmes de fichiers basés sur FAT.
Deux des points forts des systèmes de fichiers basés sur FAT sont leur simplicité relative et leur facilité d’implémentation. Dans l’esprit de ses prédécesseurs, les implémenteurs devraient trouver exFAT relativement simple et facile à implémenter.
Activer des fichiers et des périphériques de stockage très volumineux.
Le système de fichiers exFAT utilise 64 bits pour décrire la taille de fichier, ce qui permet aux applications qui dépendent de fichiers très volumineux. Le système de fichiers exFAT permet également des clusters aussi volumineux que 32 Mo, ce qui permet efficacement des périphériques de stockage très volumineux.
Incorporer l’extensibilité pour l’innovation future.
Le système de fichiers exFAT intègre l’extensibilité dans sa conception, ce qui permet au système de fichiers de suivre les innovations dans le stockage et les changements d’utilisation.
1.2 Terminologie spécifique
Dans le contexte de cette spécification, certains termes (voir Tableau 1) portent une signification spécifique pour la conception et l’implémentation du système de fichiers exFAT.
tableau 1 définition des termes qui portent une signification très spécifique
terme | définition |
---|---|
Est | Cette spécification utilise le terme « doit » pour décrire un comportement obligatoire. |
Devoir | Cette spécification utilise le terme « doit » pour décrire un comportement qu’il recommande fortement, mais ne rend pas obligatoire. |
Mai | Cette spécification utilise le terme « may » pour décrire un comportement facultatif. |
Obligatoire | Ce terme décrit un champ ou une structure qu’une implémentation doit modifier et interpréter comme décrit cette spécification. |
Optionnel | Ce terme décrit un champ ou une structure qu’une implémentation peut ou non prendre en charge. Si une implémentation prend en charge un champ ou une structure facultatif donné, elle doit modifier et interpréter le champ ou la structure comme décrit cette spécification. |
Indéfini | Ce terme décrit le contenu de champ ou de structure qu’une implémentation peut modifier si nécessaire (c’est-à-dire effacer sur zéro lors de la définition de champs ou de structures environnants) et ne doit pas interpréter pour contenir une signification spécifique. |
Réservé | Ce terme décrit le contenu du champ ou de la structure que les implémentations :
|
1.3 Texte intégral d’acronymes communs
Cette spécification utilise des acronymes en usage courant dans le secteur de l’ordinateur personnel (voir Tableau 2).
tableau 2 texte intégral des acronymes communs
acronyme | de texte intégral |
---|---|
ASCII | Code standard américain pour l’échange d’informations |
BIOS | Système de sortie d’entrée de base |
CPU | Unité de traitement centralisée |
exFAT | table d’allocation de fichiers extensible |
GRAISSE | Table d’allocation de fichiers |
FAT12 | Table d’allocation de fichiers, index de cluster 12 bits |
FAT16 | Table d’allocation de fichiers, index de cluster 16 bits |
FAT32 | Table d’allocation de fichiers, index de cluster 32 bits |
GPT | Table de partition GUID |
GUID | Identificateur global unique (voir section 10.1) |
INT | Interrompre |
MBR | Enregistrement de démarrage principal |
texFAT | ExFAT sécurisé pour les transactions |
UTC | Temps universel coordonné |
1.4 Qualificateurs de champ et de structure par défaut
Les champs et les structures de cette spécification ont les qualificateurs suivants (voir la liste ci-dessous), sauf indication contraire de la spécification.
Ne sont pas signés
Utilisez la notation décimale pour décrire les valeurs, où elles ne sont pas notées ; cette spécification utilise la lettre post-fix « h » pour indiquer les nombres hexadécimaux et placer les GUID dans des accolades
Sont au format little-endian
Ne pas nécessiter de caractère de fin null pour les chaînes
1.5 Windows CE et TexFAT
TexFAT est une extension à exFAT qui ajoute la sémantique opérationnelle sécurisée par transaction au-dessus du système de fichiers de base. TexFAT est utilisé par Windows CE. TexFAT nécessite l’utilisation des deux images bitmap d’allocation et des deux fats pour une utilisation dans les transactions. Il définit également plusieurs structures supplémentaires, notamment les descripteurs de remplissage et les descripteurs de sécurité.
Structure de volume 2
Un volume est l’ensemble de toutes les structures et espaces de données du système de fichiers nécessaires pour stocker et récupérer les données utilisateur. Tous les volumes exFAT contiennent quatre régions (voir Tableau 3).
tableau 3 structure de volume
nom de sous-région | offset (secteur) |
taille (secteurs) |
commentaires |
---|---|---|---|
région de démarrage principale | |||
Secteur de démarrage principal | 0 | 1 | Cette sous-région est obligatoire et section 3.1 définit son contenu. |
Principaux secteurs de démarrage étendus | 1 | 8 | Cette sous-région est obligatoire et section 3.2) définit son contenu. |
Principaux paramètres OEM | 9 | 1 | Cette sous-région est obligatoire et section 3.3 définit son contenu. |
Principal réservé | 10 | 1 | Cette sous-région est obligatoire et son contenu est réservé. |
Somme de contrôle de démarrage principale | 11 | 1 | Cette sous-région est obligatoire et section 3.4 définit son contenu. |
région de démarrage de sauvegarde | |||
Secteur de démarrage de la sauvegarde | 12 | 1 | Cette sous-région est obligatoire et section 3.1 définit son contenu. |
Secteurs de démarrage étendus de sauvegarde | 13 | 8 | Cette sous-région est obligatoire et section 3.2 définit son contenu. |
Paramètres OEM de sauvegarde | Vingt-et-un | 1 | Cette sous-région est obligatoire et section 3.3 définit son contenu. |
Sauvegarde réservée | 22 | 1 | Cette sous-région est obligatoire et son contenu est réservé. |
Somme de contrôle de démarrage de sauvegarde | 23 | 1 | Cette sous-région est obligatoire et section 3.4 définit son contenu. |
de la région FAT | |||
Alignement FAT | Vingt-quatre | FatOffset – 24 | Cette sous-région est obligatoire et son contenu, le cas échéant, ne sont pas définis. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent tous deux le champ FatOffset. |
Première FAT | FatOffset | LongueurGrasse | Cette sous-région est obligatoire et section 4.1 définit son contenu. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent les champs FatOffset et FatLength. |
Deuxième FAT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | Cette sous-région est obligatoire et section 4.1 définit son contenu, le cas échéant. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent les champs FatOffset, FatLength et NumberOfFats. Le champ NumberOfFats ne peut contenir que les valeurs 1 et 2. |
région de données | |||
Alignement du tas de cluster | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | Cette sous-région est obligatoire et son contenu, le cas échéant, ne sont pas définis. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent les champs FatOffset, FatLength, NumberOfFats et ClusterHeapOffset. Les valeurs valides du champ NumberOfFats sont 1 et 2. |
Tas de cluster | ClusterHeapOffset | ClusterCount * 2 secteursPerClusterShift | Cette sous-région est obligatoire et section 5.1 définit son contenu. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent tous deux les champs ClusterHeapOffset, ClusterCount et SectorsPerClusterShift. |
Espace excédentaire | ClusterHeapOffset + ClusterCount * 2 secteursPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift) | Cette sous-région est obligatoire et son contenu, le cas échéant, ne sont pas définis. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent tous deux les champs ClusterHeapOffset, ClusterCount, SectorsPerClusterShift et VolumeLength. |
3 régions de démarrage principales et de sauvegarde
La région principale de démarrage fournit toutes les instructions de sanglage de démarrage nécessaires, l’identification des informations et les paramètres du système de fichiers pour permettre à une implémentation d’effectuer les opérations suivantes :
- Sangle de démarrage un système informatique à partir d’un volume exFAT.
- Identifiez le système de fichiers sur le volume comme exFAT.
- Découvrez l’emplacement des structures du système de fichiers exFAT.
La région de démarrage de sauvegarde est une sauvegarde de la région de démarrage principale. Il facilite la récupération du volume exFAT en cas de région principale de démarrage dans un état incohérent. Sauf dans des circonstances peu fréquentes, telles que la mise à jour des instructions de sanglage de démarrage, les implémentations ne doivent pas modifier le contenu de la région de démarrage de sauvegarde.
3.1 Sous-régions du secteur de démarrage principal et de sauvegarde
Le secteur de démarrage principal contient du code pour le sanglage de démarrage à partir d’un volume exFAT et des paramètres exFAT fondamentaux qui décrivent la structure du volume (voir Tableau 4). BIOS, MBR ou d’autres agents de sanglage de démarrage peuvent inspecter ce secteur et peuvent charger et exécuter toutes les instructions de sangles de démarrage contenues dans ce secteur.
Le secteur de démarrage de sauvegarde est une sauvegarde du secteur de démarrage principal et a la même structure (voir Tableau 4). Le secteur de démarrage de sauvegarde peut aider les opérations de récupération ; toutefois, les implémentations traitent le contenu des champs VolumeFlags et PercentInUse comme obsolètes.
Avant d’utiliser le contenu du secteur de démarrage principal ou de sauvegarde, les implémentations vérifient leur contenu en validant leur somme de contrôle de démarrage respective et en veillant à ce que tous leurs champs se trouvent dans leur plage de valeurs valide.
Bien que l’opération de mise en forme initiale initial initialise le contenu des secteurs de démarrage principal et de sauvegarde, les implémentations peuvent mettre à jour ces secteurs (et mettent également à jour leur somme de contrôle de démarrage respective) si nécessaire. Toutefois, les implémentations peuvent mettre à jour les champs VolumeFlags ou PercentInUse sans mettre à jour leur somme de contrôle de démarrage respective (la somme de contrôle exclut spécifiquement ces deux champs).
Table 4 Structure du secteur de démarrage principal et de sauvegarde
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
JumpBoot | 0 | 3 | Ce champ est obligatoire et section 3.1.1 définit son contenu. |
NomDuSystèmeDeFichiers | 3 | 8 | Ce champ est obligatoire et section 3.1.2 définit son contenu. |
MustBeZero | 11 | 53 | Ce champ est obligatoire et section 3.1.3 définit son contenu. |
PartitionOffset | 64 | 8 | Ce champ est obligatoire et section 3.1.4 définit son contenu. |
LongueurVolume | 72 | 8 | Ce champ est obligatoire et section 3.1.5 définit son contenu. |
FatOffset | 80 | 4 | Ce champ est obligatoire et section 3.1.6 définit son contenu. |
LongueurGrasse | 84 | 4 | Ce champ est obligatoire et section 3.1.7 définit son contenu. |
ClusterHeapOffset | 88 | 4 | Ce champ est obligatoire et section 3.1.8 définit son contenu. |
Nombre de Clusters | 92 | 4 | Ce champ est obligatoire et section 3.1.9 définit son contenu. |
FirstClusterOfRootDirectory | 96 | 4 | Ce champ est obligatoire et section 3.1.10 définit son contenu. |
VolumeSerialNumber | 100 | 4 | Ce champ est obligatoire et section 3.1.11 définit son contenu. |
Révision du système de fichiers | 104 | 2 | Ce champ est obligatoire et section 3.1.12 définit son contenu. |
VolumeFlags | 01:23:06 AM | 2 | Ce champ est obligatoire et section 3.1.13 définit son contenu. |
BytesPerSectorShift | 108 | 1 | Ce champ est obligatoire et section 3.1.14 définit son contenu. |
SectorsPerClusterShift | 109 | 1 | Ce champ est obligatoire et section 3.1.15 définit son contenu. |
NumberOfFats | 110 | 1 | Ce champ est obligatoire et section 3.1.16 définit son contenu. |
DriveSelect | 111 | 1 | Ce champ est obligatoire et section 3.1.17 définit son contenu. |
PourcentageUtilisé | 112 | 1 | Ce champ est obligatoire et section 3.1.18 définit son contenu. |
Réservé | 113 | 7 | Ce champ est obligatoire et son contenu est réservé. |
BootCode | 120 | 390 | Ce champ est obligatoire et section 3.1.19 définit son contenu. |
BootSignature | 510 | 2 | Ce champ est obligatoire et section 3.1.20 définit son contenu. |
ExcessSpace | 512 | 2BytesPerSectorShift – 512 | Ce champ est obligatoire et son contenu, le cas échéant, ne sont pas définis. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent tous deux le champ BytesPerSectorShift. |
3.1.1 Champ JumpBoot
Le champ JumpBoot contient l’instruction de saut pour les processeurs communs aux ordinateurs personnels, qui, lorsqu’ils sont exécutés, « saute » l’UC pour exécuter les instructions de démarrage dans le champ BootCode.
La valeur valide de ce champ est (dans l’ordre d’octets de bas ordre en octets de haut ordre) EBh 76h 90h.
3.1.2 Champ FileSystemName
Le champ FileSystemName doit contenir le nom du système de fichiers sur le volume.
La valeur valide de ce champ est, en caractères ASCII, « EXFAT », qui comprend trois espaces blancs de fin.
3.1.3 Champ MustBezero
Le champ MustBeZero correspond directement à la plage d’octets que le bloc de paramètres BIOS packé consomme sur les volumes FAT12/16/32.
La valeur valide de ce champ est 0, ce qui permet d’empêcher les implémentations FAT12/16/32 de monter par erreur un volume exFAT.
3.1.4 Champ PartitionOffset
Le champ PartitionOffset décrit le décalage du secteur relatif du média de la partition qui héberge le volume exFAT donné. Ce champ permet de sangler le démarrage à partir du volume à l’aide d’INT étendu 13h sur les ordinateurs personnels.
Toutes les valeurs possibles pour ce champ sont valides ; toutefois, la valeur 0 indique que les implémentations doivent ignorer ce champ.
3.1.5 Champ VolumeLength
Le champ VolumeLength décrit la taille du volume exFAT donné dans les secteurs.
La plage de valeurs valide pour ce champ doit être :
Au moins 220/ 2BytesPerSectorShift, ce qui garantit que le plus petit volume n’est pas inférieur à 1 Mo
Au plus 264- 1, la plus grande valeur que ce champ peut décrire.
Toutefois, si la taille de la sous-région Espace excédentaire est 0, la plus grande valeur de ce champ est ClusterHeapOffset + (232- 11) *2SectorsPerClusterShift.
3.1.6 Champ FatOffset
Le champ FatOffset décrit le décalage du secteur relatif au volume du premier FAT. Ce champ permet aux implémentations d’aligner le premier fat sur les caractéristiques du support de stockage sous-jacent.
La plage de valeurs valide pour ce champ doit être :
- Au moins 24, qui comptent pour les secteurs que les régions de démarrage principal et de démarrage de sauvegarde consomment
- Au maximum ClusterHeapOffset - (FatLength * NumberOfFats), qui compte pour les secteurs que le tas de cluster consomme
3.1.7 Champ FatLength
Le champ FatLength décrit la longueur, dans les secteurs, de chaque table FAT (le volume peut contenir jusqu’à deux FAT).
La plage de valeurs valide pour ce champ doit être :
- Au moins (ClusterCount + 2) * 22/ 2BytesPerSectorShiftarrondi à l’entier le plus proche, ce qui garantit que chaque FAT dispose d’un espace suffisant pour décrire tous les clusters dans le tas de cluster
- Au maximum (ClusterHeapOffset - FatOffset) / NumberOfFats arrondi à l’entier le plus proche, ce qui garantit que les fats existent avant le tas de cluster
Ce champ peut contenir une valeur supérieure à sa limite inférieure (comme décrit ci-dessus) pour permettre au second FAT, le cas échéant, d’être aligné sur les caractéristiques du support de stockage sous-jacent. Le contenu de l’espace qui dépasse ce que nécessite la FAT elle-même, le cas échéant, n’est pas défini.
3.1.8 Champ ClusterHeapOffset
Le champ ClusterHeapOffset décrit le décalage du secteur relatif au volume du tas de cluster. Ce champ permet aux implémentations d’aligner le tas de cluster sur les caractéristiques du support de stockage sous-jacent.
La plage de valeurs valide pour ce champ doit être :
- Au moins FatOffset + FatLength * NumberOfFats, pour tenir compte des secteurs que toutes les régions précédentes consomment
- Au plus 232- 1 ou VolumeLength - (ClusterCount * 2SectorsPerClusterShift), quel que soit le calcul est inférieur
3.1.9 Champ ClusterCount
Le champ ClusterCount décrit le nombre de clusters que contient le tas de clusters.
La valeur valide pour ce champ doit être la moins élevée de ce qui suit :
- (VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShiftarrondi à l’entier le plus proche, qui correspond exactement au nombre de clusters qui peuvent correspondre entre le début du tas de cluster et la fin du volume
- 232- 11, c’est-à-dire le nombre maximal de clusters qu’un FAT peut décrire
La valeur du champ ClusterCount détermine la taille minimale d’un FAT. Pour éviter des TFF extrêmement volumineuses, les implémentations peuvent contrôler le nombre de clusters dans le tas de clusters en augmentant la taille du cluster (via le champ SectorsPerClusterShift). Cette spécification recommande pas plus de 224 clusters- 2 dans le tas de cluster. Toutefois, les implémentations peuvent gérer des volumes avec jusqu’à 232- 11 clusters dans le tas de cluster.
3.1.10 Champ FirstClusterOfRootDirectory
Le champ FirstClusterOfRootDirectory doit contenir l’index de cluster du premier cluster du répertoire racine. Les implémentations doivent effectuer tous les efforts pour placer le premier cluster du répertoire racine dans le premier cluster non incorrect une fois les clusters consommés par la bitmap d’allocation et la table de cas d’allocation.
La plage de valeurs valide pour ce champ doit être :
- Au moins 2, l’index du premier cluster dans le tas de cluster
- Au maximum ClusterCount + 1, index du dernier cluster dans le tas de cluster
3.1.11 Champ VolumeSerialNumber
Le champ VolumeSerialNumber doit contenir un numéro de série unique. Cela aide les implémentations à distinguer les différents volumes exFAT. Les implémentations doivent générer le numéro de série en combinant la date et l’heure de la mise en forme du volume exFAT. Le mécanisme de combinaison de date et d’heure pour former un numéro de série est spécifique à l’implémentation.
Toutes les valeurs possibles pour ce champ sont valides.
3.1.12 Champ FileSystemRevision
Le champ FileSystemRevision décrit les numéros de révision majeurs et mineurs des structures exFAT sur le volume donné.
L’octet à ordre élevé est le numéro de révision principal et l’octet de bas ordre est le numéro de révision mineure. Par exemple, si l’octet de classement élevé contient la valeur 01h et si l’octet de faible ordre contient la valeur 05h, le champ FileSystemRevision décrit le numéro de révision 1.05. De même, si l’octet de classement élevé contient la valeur 0Ah et si l’octet de faible ordre contient la valeur 0Fh, le champ FileSystemRevision décrit le numéro de révision 10.15.
La plage de valeurs valide pour ce champ doit être :
- Au moins 0 pour l’octet de bas ordre et 1 pour l’octet de haut ordre
- Au plus 99 pour les octets de bas ordre et 99 pour l’octet de haut ordre
Le numéro de révision d’exFAT décrit cette spécification est 1.00. Les implémentations de cette spécification doivent monter n’importe quel volume exFAT avec le numéro de révision principal 1 et ne monter aucun volume exFAT avec un autre numéro de révision majeur. Les implémentations respectent le numéro de révision mineure et n’effectuent pas d’opérations ni ne créent aucune structure de système de fichiers non décrite dans la spécification correspondante du numéro de révision secondaire donné.
3.1.13 Champ VolumeFlags
Le champ VolumeFlags doit contenir des indicateurs qui indiquent l’état de diverses structures de système de fichiers sur le volume exFAT (voir Tableau 5).
Les implémentations ne doivent pas inclure ce champ lors de l’informatique de sa somme de contrôle principale de démarrage ou de région de démarrage de sauvegarde respective. Lorsque vous faites référence au secteur de démarrage de la sauvegarde, les implémentations traitent ce champ comme obsolète.
Tableau 5 Structure de champ VolumeFlags
nom de champ | offset (bit) |
taille (bits) |
commentaires |
---|---|---|---|
ActiveFat | 0 | 1 | Ce champ est obligatoire et section 3.1.13.1 définit son contenu. |
VolumeDirty | 1 | 1 | Ce champ est obligatoire et section 3.1.13.2 définit son contenu. |
Échec des médias | 2 | 1 | Ce champ est obligatoire et section 3.1.13.3 définit son contenu. |
ClearToZero | 3 | 1 | Ce champ est obligatoire et section 3.1.13.4 définit son contenu. |
Réservé | 4 | 12 | Ce champ est obligatoire et son contenu est réservé. |
3.1.13.1 Champ ActiveFat
Le champ ActiveFat décrit les images FAT et Allocation Bitmap actives (et les implémentations doivent être utilisées), comme suit :
- 0, ce qui signifie que la première image bitmap FAT et First Allocation sont actives
- 1, ce qui signifie que le second fat et la bitmap d’allocation de seconde sont actifs et est possible uniquement lorsque le champ NumberOfFats contient la valeur 2
Les implémentations doivent considérer les images FAT et Bitmap d’allocation inactives comme obsolètes. Seules les implémentations prenant en charge TexFAT changent les bitmaps fat et d’allocation actives (consultez section 7.1).
3.1.13.2 Champ VolumeDirty
Le champ VolumeDirty décrit si le volume est sale ou non, comme suit :
- 0, ce qui signifie que le volume est probablement dans un état cohérent
- 1, ce qui signifie que le volume est probablement dans un état incohérent
Les implémentations doivent définir la valeur de ce champ sur 1 lors de la rencontre d’incohérences de métadonnées du système de fichiers qu’elles ne résolvent pas. Si, lors du montage d’un volume, la valeur de ce champ est 1, seules les implémentations qui résolvent les incohérences de métadonnées du système de fichiers peuvent effacer la valeur de ce champ à 0. Ces implémentations ne doivent effacer la valeur de ce champ qu’à 0 après avoir vérifié que le système de fichiers est dans un état cohérent.
Si, lors du montage d’un volume, la valeur de ce champ est 0, les implémentations doivent définir ce champ sur 1 avant de mettre à jour les métadonnées du système de fichiers et effacer ce champ sur 0 par la suite, comme dans l’ordre d’écriture recommandé décrit dans section 8.1.
3.1.13.3 Champ MediaFailure
Le champ MediaFailure décrit si une implémentation a détecté des échecs multimédias ou non, comme suit :
- 0, ce qui signifie que le média d’hébergement n’a pas signalé d’échecs ou d’échecs connus sont déjà enregistrés dans le FAT en tant que clusters « incorrects »
- 1, ce qui signifie que le support d’hébergement a signalé des échecs (c’est-à-dire que les opérations de lecture ou d’écriture ont échoué)
Une implémentation doit définir ce champ sur 1 lorsque :
- Le média d’hébergement ne parvient pas à accéder à n’importe quelle région du volume
- L’implémentation a épuisé les algorithmes de nouvelle tentative d’accès, le cas échéant
Si, lors du montage d’un volume, la valeur de ce champ est 1, les implémentations qui analysent l’intégralité du volume pour détecter les défaillances multimédias et enregistrent tous les échecs en tant que clusters « incorrects » dans le fat (ou résolvent les échecs multimédias) peuvent effacer la valeur de ce champ à 0.
3.1.13.4 Champ ClearToZero
Le champ ClearToZero n’a pas de signification significative dans cette spécification.
Les valeurs valides pour ce champ sont les suivantes :
- 0, qui n’a aucune signification particulière
- 1, ce qui signifie que les implémentations effacent ce champ sur 0 avant de modifier les structures, répertoires ou fichiers du système de fichiers
3.1.14 Champ BytesPerSectorShift
Le champ BytesPerSectorShift décrit les octets par secteur exprimés sous forme de journal2(N), où N correspond au nombre d’octets par secteur. Par exemple, pour 512 octets par secteur, la valeur de ce champ est 9.
La plage de valeurs valide pour ce champ doit être :
- Au moins 9 (taille du secteur de 512 octets), qui est le plus petit secteur possible pour un volume exFAT
- Au maximum 12 (taille du secteur de 4 096 octets), qui correspond à la taille de page mémoire des processeurs courants dans les ordinateurs personnels
3.1.15 SectorsPerClusterShift Field
Le champ SectorsPerClusterShift décrit les secteurs par cluster exprimés sous forme de journal2(N), où N est le nombre de secteurs par cluster. Par exemple, pour 8 secteurs par cluster, la valeur de ce champ est 3.
La plage de valeurs valide pour ce champ doit être :
- Au moins 0 (1 secteur par cluster), qui est le plus petit cluster possible
- Au maximum 25 - BytesPerSectorShift, qui correspond à une taille de cluster de 32 Mo
3.1.16 Champ NumberOfFats
Le champ NumberOfFats décrit le nombre de faTs et de bitmaps d’allocation que contient le volume.
La plage de valeurs valide pour ce champ doit être :
- 1, ce qui indique que le volume contient uniquement le premier fichier FAT et la première image bitmap d’allocation
- 2, qui indique que le volume contient le premier fat, le deuxième fat, la bitmap d’allocation de première et la deuxième image bitmap d’allocation ; cette valeur est valide uniquement pour les volumes TexFAT
3.1.17 Champ DriveSelect
Le champ DriveSelect doit contenir le numéro de lecteur INT 13h étendu, qui aide le sanglage de démarrage à partir de ce volume à l’aide d’INT étendu 13h sur les ordinateurs personnels.
Toutes les valeurs possibles pour ce champ sont valides. Les champs similaires dans les systèmes de fichiers fat précédents contenaient fréquemment la valeur 80h.
3.1.18 Champ PourcentageUtilisation
Le champ PercentInUse décrit le pourcentage de clusters dans le tas de clusters qui sont alloués.
La plage de valeurs valide pour ce champ doit être :
- Entre 0 et 100 inclus, qui est le pourcentage de clusters alloués dans le tas de cluster, arrondi à l’entier le plus proche
- Exactement FFh, ce qui indique que le pourcentage de clusters alloués dans le tas de clusters n’est pas disponible
Les implémentations modifient la valeur de ce champ pour refléter les modifications apportées à l’allocation de clusters dans le tas de cluster ou la remplacer par FFh.
Les implémentations ne doivent pas inclure ce champ lors de l’informatique de sa somme de contrôle principale de démarrage ou de région de démarrage de sauvegarde respective. Lorsque vous faites référence au secteur de démarrage de la sauvegarde, les implémentations traitent ce champ comme obsolète.
3.1.19 Champ BootCode
Le champ BootCode doit contenir des instructions de sangle de démarrage. Les implémentations peuvent remplir ce champ avec les instructions du processeur nécessaires pour le démarrage d’un système informatique. Les implémentations qui ne fournissent pas d’instructions de sanglage de démarrage doivent initialiser chaque octet dans ce champ sur F4h (l’instruction d’arrêt pour les processeurs communs dans les ordinateurs personnels) dans le cadre de leur opération de format.
3.1.20 Champ BootSignature
Le champ BootSignature doit décrire si l’intention d’un secteur donné est qu’il s’agit d’un secteur de démarrage ou non.
La valeur valide de ce champ est AA55h. Toute autre valeur de ce champ invalide son secteur de démarrage respectif. Les implémentations doivent vérifier le contenu de ce champ avant de dépendre d’un autre champ dans son secteur de démarrage respectif.
3.2 Secteurs de démarrage étendu principal et de sauvegarde sous-régions
Chaque secteur des principaux secteurs de démarrage étendu a la même structure ; toutefois, chaque secteur peut contenir des instructions distinctes de sangles de démarrage (voir le tableau 6). Les agents de sanglage de démarrage, tels que les instructions de sanglage de démarrage dans le secteur de démarrage principal, les implémentations de BIOS alternatives ou le microprogramme d’un système incorporé, peuvent charger ces secteurs et exécuter les instructions qu’ils contiennent.
Les secteurs de démarrage étendu de sauvegarde sont une sauvegarde des principaux secteurs de démarrage étendu et ont la même structure (voir Tableau 6).
Avant d’exécuter les instructions des secteurs de démarrage étendu principal ou de sauvegarde, les implémentations doivent vérifier leur contenu en s’assurant que le champ ExtendedBootSignature de chaque secteur contient sa valeur prescrite.
Bien que l’opération de format initiale initialise le contenu des secteurs de démarrage étendu principal et de sauvegarde, les implémentations peuvent mettre à jour ces secteurs (et mettent également à jour leur somme de contrôle de démarrage respective) si nécessaire.
tableau 6 structure du secteur de démarrage étendu
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | Ce champ est obligatoire et section 3.2.1 définit son contenu. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent tous deux le champ BytesPerSectorShift. |
ExtendedBootSignature | 2OctetsPerSectorShift – 4 | 4 | Ce champ est obligatoire et section 3.2.2 définit son contenu. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent tous deux le champ BytesPerSectorShift. |
3.2.1 Champ ExtendedBootCode
Le champ ExtendedBootCode doit contenir des instructions de sangle de démarrage. Les implémentations peuvent remplir ce champ avec les instructions du processeur nécessaires pour le démarrage d’un système informatique. Les implémentations qui ne fournissent pas d’instructions de sanglage de démarrage doivent initialiser chaque octet dans ce champ à 00h dans le cadre de leur opération de mise en forme.
3.2.2 Champ ExtendedBootSignature
Le champ ExtendedBootSignature doit décrire si l’intention du secteur donné est qu’il s’agit d’un secteur de démarrage étendu ou non.
La valeur valide de ce champ est AA550000h. Toute autre valeur de ce champ invalide son secteur de démarrage principal ou de sauvegarde respectif. Les implémentations doivent vérifier le contenu de ce champ avant de dépendre d’un autre champ dans son secteur de démarrage étendu respectif.
3.3 Sous-régions principales et de sauvegarde des paramètres OEM
La sous-région Paramètres OEM principal contient dix structures de paramètres qui peuvent contenir des informations spécifiques au fabricant (voir Tableau 7). Chacune des dix structures de paramètres dérive du modèle Paramètres génériques (voir section 3.3.2). Les fabricants peuvent dériver leurs propres structures de paramètres personnalisés à partir du modèle Paramètres génériques. Cette spécification définit elle-même deux structures de paramètres : Paramètres Null (voir Section 3.3.3) et Paramètres Flash (voir Section 3.3.4).
Les paramètres OEM de sauvegarde sont une sauvegarde des paramètres OEM principaux et ont la même structure (voir Tableau 7).
Avant d’utiliser le contenu des paramètres OEM principal ou de sauvegarde, les implémentations vérifient leur contenu en validant leur somme de contrôle de démarrage respective.
Les fabricants doivent remplir les paramètres OEM Main et Backup avec leurs propres structures de paramètres personnalisées, le cas échéant, et d’autres structures de paramètres. Les opérations de format suivantes conservent le contenu des paramètres OEM principal et de sauvegarde.
Les implémentations peuvent mettre à jour les paramètres OEM principaux et de sauvegarde en fonction des besoins (et doivent également mettre à jour leur somme de contrôle de démarrage respective).
Tableau 7, structure des paramètres OEM
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Paramètres[0] | 0 | 48 | Ce champ est obligatoire et section 3.3.1 définit son contenu. |
. . . |
. . . |
. . . |
. . . |
Paramètres[9] | 432 | 48 | Ce champ est obligatoire et section 3.3.1 définit son contenu. |
Réservé | 480 | 2BytesPerSectorShift – 480 | Ce champ est obligatoire et son contenu est réservé. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent tous deux le champ BytesPerSectorShift. |
3.3.1 Paramètres[0] ... Paramètres[9]
Chaque champ Paramètres de ce tableau contient une structure de paramètres, qui dérive du modèle Paramètres génériques (voir Section 3.3.2). Tout champ Paramètres inutilisés doit être décrit comme contenant une structure de paramètres Null (voir section 3.3.3).
3.3.2 Modèle de paramètres génériques
Le modèle Paramètres génériques fournit la définition de base d’une structure de paramètres (voir Tableau 8). Toutes les structures de paramètres dérivent de ce modèle. La prise en charge de ce modèle de paramètres génériques est obligatoire.
modèle de paramètres génériques tableau 8
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
ParametersGuid | 0 | 16 | Ce champ est obligatoire et section 3.3.2.1 définit son contenu. |
CustomDefined | 16 | 32 | Ce champ est obligatoire et les structures dérivées de ce modèle définissent son contenu. |
3.3.2.1 Champ ParametersGuid
Le champ ParametersGuid décrit un GUID, qui détermine la disposition du reste de la structure de paramètres donnée.
Toutes les valeurs possibles pour ce champ sont valides ; Toutefois, les fabricants doivent utiliser un outil de génération GUID, tel que GuidGen.exe, pour sélectionner un GUID lors de la dérivation de structures de paramètres personnalisées à partir de ce modèle.
3.3.3 Paramètres Null
La structure paramètres Null dérive du modèle Paramètres génériques (voir section 3.3.2) et décrit un champ Paramètres inutilisés (voir Tableau 9). Lors de la création ou de la mise à jour de la structure des paramètres OEM, les implémentations remplissent les champs Paramètres inutilisés avec la structure Paramètres Null. En outre, lors de la création ou de la mise à jour de la structure des paramètres OEM, les implémentations doivent consolider les structures de paramètres Null à la fin du tableau, laissant ainsi toutes les autres structures de paramètres au début de la structure paramètres OEM.
La prise en charge de la structure des paramètres Null est obligatoire.
table 9 de la structure des paramètres Null
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
ParametersGuid | 0 | 16 | Ce champ est obligatoire et section 3.3.3.1 définit son contenu. |
Réservé | 16 | 32 | Ce champ est obligatoire et son contenu est réservé. |
3.3.3.1 Champ ParametersGuid
Le champ ParametersGuid doit être conforme à la définition fournie par le modèle Paramètres génériques (voir section 3.3.2.1).
La valeur valide pour ce champ, en notation GUID, est {00000000-0000-0000-0000-000000000000}.
3.3.4 Paramètres flash
La structure des paramètres Flash dérive du modèle Paramètres génériques (voir Section 3.3.2) et contient des paramètres pour le support flash (voir Tableau 10). Les fabricants d’appareils de stockage flash peuvent remplir un champ Paramètres (de préférence le champ Parameters[0] ) avec cette structure de paramètres. Les implémentations peuvent utiliser les informations de la structure Paramètres Flash pour optimiser les opérations d’accès pendant les lectures/écritures et pour l’alignement des structures de système de fichiers pendant la mise en forme du média.
La prise en charge de la structure des paramètres Flash est facultative.
tableau 10 de la structure des paramètres flash
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
ParametersGuid | 0 | 16 | Ce champ est obligatoire et section 3.3.4.1 définit son contenu. |
EraseBlockSize | 16 | 4 | Ce champ est obligatoire et section 3.3.4.2 définit son contenu. |
Pagesize | 20 | 4 | Ce champ est obligatoire et section 3.3.4.3 définit son contenu. |
Secteurs de réserve | Vingt-quatre | 4 | Ce champ est obligatoire et section 3.3.4.4 définit son contenu. |
Temps d'Accès Aléatoire | 28 | 4 | Ce champ est obligatoire et section 3.3.4.5 définit son contenu. |
Temps de Programmation | 32 | 4 | Ce champ est obligatoire et section 3.3.4.6 définit son contenu. |
ReadCycle | 36 | 4 | Ce champ est obligatoire et section 3.3.4.7 définit son contenu. |
WriteCycle | 40 | 4 | Ce champ est obligatoire et section 3.3.4.8 définit son contenu. |
Réservé | 44 | 4 | Ce champ est obligatoire et son contenu est réservé. |
Toutes les valeurs possibles pour tous les champs Paramètres Flash, à l’exception du champ ParametersGuid, sont valides. Toutefois, la valeur 0 indique que le champ n’a pas de signification (les implémentations ignorent le champ donné).
3.3.4.1 Champ ParametersGuid
Le champ ParametersGuid doit être conforme à la définition fournie dans le modèle Paramètres génériques (voir section 3.3.2.1).
La valeur valide pour ce champ, en notation GUID, est {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.
3.3.4.2 EraseBlockSize Field
Le champ EraseBlockSize décrit la taille, en octets, du bloc d’effacement du média flash.
3.3.4.3 Champ PageSize
Le champ PageSize décrit la taille, en octets de la page du média flash.
3.3.4.4 Champ SpareSectors
Le champ SpareSectors décrit le nombre de secteurs que le média flash a disponibles pour ses opérations internes d’épargne.
3.3.4.5 Champ RandomAccessTime
Le champ RandomAccessTime décrit le temps d’accès aléatoire moyen du média flash, en nanosecondes.
3.3.4.6 Champ ProgrammingTime
Le champ ProgrammingTime décrit le temps de programmation moyen du média flash, en nanosecondes.
3.3.4.7 Champ ReadCycle
Le champ ReadCycle décrit le temps moyen de cycle de lecture du média flash, en nanosecondes.
3.3.4.8 Champ WriteCycle
Le champ WriteCycle décrit le temps moyen de cycle d’écriture, en nanosecondes.
3.4 Sous-régions de somme de contrôle de démarrage principale et de sauvegarde
Les sommes de contrôle de démarrage principales et de sauvegarde contiennent chacune un modèle répétitif de la somme de contrôle de quatre octets du contenu de toutes les autres sous-régions de leurs régions de démarrage respectives. Le calcul de somme de contrôle n’inclut pas les champs VolumeFlags et PercentInUse dans leur secteur de démarrage respectif (voir Figure 1). Le modèle répétitif de la somme de contrôle de quatre octets remplit sa sous-région de somme de contrôle de démarrage respective du début à la fin de la sous-région.
Avant d’utiliser le contenu de l’une des autres sous-régions dans les régions de démarrage principal ou de sauvegarde, les implémentations vérifient leur contenu en validant leur somme de contrôle de démarrage respective.
Bien que l’opération de format initiale remplisse les sommes de contrôle de démarrage principales et de sauvegarde avec le modèle de somme de contrôle répétée, les implémentations mettent à jour ces secteurs à mesure que le contenu des autres secteurs de leurs régions de démarrage respectives change.
Figure 1 Calcul de somme de contrôle de démarrage
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 Région de la table d’allocation de fichiers
La région FAT (File Allocation Table) peut contenir jusqu’à deux FAT, une dans la première sous-région FAT et une autre dans la deuxième sous-région FAT. Le champ NumberOfFats décrit le nombre de fats que contient cette région. Les valeurs valides pour le champ NumberOfFats sont 1 et 2. Par conséquent, la sous-région FIRST FAT contient toujours un FAT. Si le champ NumberOfFats est deux, la deuxième sous-région FAT contient également une valeur FAT.
Le champ ActiveFat du champ VolumeFlags décrit le fat actif. Seul le champ VolumeFlags du secteur de démarrage principal est actif. Les implémentations doivent traiter le FAT qui n’est pas actif comme obsolète. L’utilisation des fat inactifs et le basculement entre les faTs est spécifique à l’implémentation.
4.1 Première et deuxième sous-régions FAT
Un fat décrit les chaînes de cluster dans le tas de cluster (voir Tableau 11). Une chaîne de cluster est une série de clusters qui fournissent de l’espace pour enregistrer le contenu des fichiers, des répertoires et d’autres structures de système de fichiers. Un FAT représente une chaîne de cluster sous la forme d’une liste d’index de cluster liée de manièreing. À l’exception des deux premières entrées, chaque entrée d’un fat représente exactement un cluster.
structure de table d’allocation de fichiers tableau 11
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
FatEntry[0] | 0 | 4 | Ce champ est obligatoire et section 4.1.1 définit son contenu. |
FatEntry[1] | 4 | 4 | Ce champ est obligatoire et section 4.1.2 définit son contenu. |
FatEntry[2] | 8 | 4 | Ce champ est obligatoire et section 4.1.3 définit son contenu. |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | Ce champ est obligatoire et section 4.1.3 définit son contenu. ClusterCount + 1 ne peut jamais dépasser FFFFFFF6h. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent tous deux le champ ClusterCount. |
ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4) | Ce champ est obligatoire et son contenu, le cas échéant, ne sont pas définis. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent les champs ClusterCount, FatLength et BytesPerSectorShift. |
4.1.1 FatEntry[0] Champ
Le champ FatEntry[0] décrit le type de média dans le premier octet (octet de l’ordre le plus bas) et doit contenir FFh dans les trois octets restants.
Le type de média (le premier octet) doit être F8h.
4.1.2 FatEntry[1] Champ
Le champ FatEntry[1] existe uniquement en raison de la précédence historique et ne décrit rien d’intéressant.
La valeur valide de ce champ est FFFFFFFFh. Les implémentations initialisent ce champ à sa valeur prescrite et ne doivent pas utiliser ce champ à des fins quelconques. Les implémentations ne doivent pas interpréter ce champ et conserver leur contenu entre les opérations qui modifient les champs environnants.
4.1.3 FatEntry[2] ... Champs FatEntry[ClusterCount+1]
Chaque champ FatEntry de ce tableau doit représenter un cluster dans le tas de cluster. FatEntry[2] représente le premier cluster dans le tas de cluster et FatEntry[ClusterCount+1] représente le dernier cluster du tas de cluster.
La plage de valeurs valide pour ces champs doit être :
- Entre 2 et ClusterCount + 1, inclus, qui pointe vers la prochaine FatEntry dans la chaîne de cluster donnée ; le FatEntry donné ne pointe vers aucune FatEntry qui la précède dans la chaîne de cluster donnée
- Exactement FFFFFFF7h, qui marque le cluster correspondant de FatEntry donné comme « mauvais »
- Exactement FFFFFFFFh, qui marque le cluster correspondant de FatEntry donné comme dernier cluster d’une chaîne de cluster ; il s’agit de la seule valeur valide pour le dernier FatEntry d’une chaîne de cluster donnée
5 Région de données
La région de données contient le tas de clusters, qui fournit de l’espace managé pour les structures, répertoires et fichiers du système de fichiers.
5.1 Sous-région de tas de cluster
La structure du tas de cluster est très simple (voir Tableau 12) ; chaque série consécutive de secteurs décrit un cluster, comme le champ SectorsPerClusterShift définit. Il est important de noter que le premier cluster du tas de cluster a l’index deux, qui correspond directement à l’index de FatEntry[2].
Dans un volume exFAT, une bitmap d’allocation (voir section 7.1.5) conserve l’enregistrement de l’état d’allocation de tous les clusters. Il s’agit d’une différence significative par rapport aux prédécesseurs d’exFAT (FAT12, FAT16 et FAT32), dans lesquelles un FAT a conservé un enregistrement de l’état d’allocation de tous les clusters dans le tas de cluster.
Table 12 de structure de tas de cluster
nom de champ | offset (secteur) |
taille (secteurs) |
commentaires |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2 secteursPerClusterShift | Ce champ est obligatoire et section 5.1.1 définit son contenu. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent les champs ClusterHeapOffset et SectorsPerClusterShift. |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2SectorsPerClusterShift | 2 secteursPerClusterShift | Ce champ est obligatoire et section 5.1.1 définit son contenu. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent les champs ClusterCount, ClusterHeapOffset et SectorsPerClusterShift. |
5.1.1 Cluster[2] ... Champs Cluster[ClusterCount+1]
Chaque champ cluster de ce tableau est une série de secteurs contigus, dont la taille est définie par le champ SectorsPerClusterShift.
6 Structure de répertoires
Le système de fichiers exFAT utilise une approche d’arborescence de répertoires pour gérer les structures et fichiers du système de fichiers qui existent dans le tas de cluster. Les répertoires ont une relation un-à-plusieurs entre parent et enfant dans l’arborescence d’annuaires.
Le répertoire auquel le champ FirstClusterOfRootDirectory fait référence est la racine de l’arborescence de répertoires. Tous les autres répertoires descendent du répertoire racine de manière singly-linked.
Chaque répertoire se compose d’une série d’entrées de répertoire (voir Tableau 13).
Une ou plusieurs entrées de répertoire se combinent dans un jeu d’entrées d’annuaire qui décrit quelque chose d’intéressant, tel qu’une structure de système de fichiers, un sous-répertoire ou un fichier.
table 13, structure de répertoires
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
DirectoryEntry[0] | 0 | 32 | Ce champ est obligatoire et section 6.1 définit son contenu. |
. . . |
. . . |
. . . |
. . . |
DirectoryEntry[N-1] | (N – 1) * 32 | 32 | Ce champ est obligatoire et section 6.1 définit son contenu. N, le nombre de champs DirectoryEntry est la taille, en octets, de la chaîne de cluster qui contient le répertoire donné, divisé par la taille d’un champ DirectoryEntry, 32 octets. |
6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]
Chaque champ DirectoryEntry de ce tableau dérive du modèle Generic DirectoryEntry (voir section 6.2).
6.2 Modèle DirectoryEntry générique
Le modèle Generic DirectoryEntry fournit la définition de base des entrées d’annuaire (voir Tableau 14). Toutes les structures d’entrée d’annuaire dérivent de ce modèle et seules les structures d’entrée de répertoire définies par Microsoft sont valides (exFAT ne dispose pas de dispositions pour les structures d’entrée de répertoire définies par le fabricant, sauf définies dans section 7.8 et section 7.9). La possibilité d’interpréter le modèle Generic DirectoryEntry est obligatoire.
tableau 14 de modèle DirectoryEntry générique
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 6.2.1 définit son contenu. |
CustomDefined | 1 | 19 | Ce champ est obligatoire et les structures dérivées de ce modèle peuvent définir son contenu. |
FirstCluster | 20 | 4 | Ce champ est obligatoire et section 6.2.2 définit son contenu. |
LongueurDesDonnées | Vingt-quatre | 8 | Ce champ est obligatoire et section 6.2.3 définit son contenu. |
6.2.1 Champ EntryType
Le champ EntryType a trois modes d’utilisation que la valeur du champ définit (voir la liste ci-dessous).
- 00h, qui est un marqueur de fin de répertoire et les conditions suivantes s’appliquent :
- Tous les autres champs de l’annuaire donné sont en fait réservés
- Toutes les entrées de répertoire suivantes dans le répertoire donné sont également des marqueurs de fin de répertoire
- Les marqueurs de fin de répertoire ne sont valides qu’en dehors des jeux d’entrées d’annuaire
- Les implémentations peuvent remplacer les marqueurs de fin de répertoire si nécessaire
- Entre 01h et 7Fh inclus, un marqueur d'entrée d'annuaire inutilisé est présent, et les conditions suivantes s'appliquent :
- Tous les autres champs dans directoryEntry donnés ne sont pas définis
- Les entrées d’annuaire inutilisées ne sont valides qu’en dehors des jeux d’entrées d’annuaire
- Les implémentations peuvent remplacer les entrées d’annuaire inutilisées si nécessaire
- Cette plage de valeurs correspond au champ InUse (voir Section 6.2.1.4) contenant la valeur 0
- Entre 81h et FFh inclus, cela représente une entrée de répertoire standard et les conditions suivantes s'appliquent :
- Le contenu du champ EntryType (voir Tableau 15) détermine la disposition du reste de la structure DirectoryEntry
- Cette plage de valeurs, et uniquement cette plage de valeurs, sont valides à l’intérieur d’un jeu d’entrées de répertoire
- Cette plage de valeurs correspond directement au champ InUse (voir Section 6.2.1.4) contenant la valeur 1
Pour empêcher les modifications apportées au champ InUse (voir section 6.2.1.4) entraînant une erreur résultant d’un marqueur de fin de répertoire, la valeur 80h n’est pas valide.
tableau 15, structure de champ EntryType générique
nom de champ | offset (bit) |
taille (bits) |
commentaires |
---|---|---|---|
TypeCode | 0 | 5 | Ce champ est obligatoire et section 6.2.1.1 définit son contenu. |
TypeImportance | 5 | 1 | Ce champ est obligatoire et la section section 6.2.1.2 définit son contenu. |
TypeCatégorie | 6 | 1 | Ce champ est obligatoire et section 6.2.1.3 définit son contenu. |
InUse | 7 | 1 | Ce champ est obligatoire et section 6.2.1.4 définit son contenu. |
6.2.1.1 Champ TypeCode
Le champ TypeCode décrit partiellement le type spécifique de l’entrée de répertoire donnée. Ce champ, ainsi que les champs TypeImportance et TypeCategory (voir section 6.2.1.2 et section 6.2.1.3, respectivement) identifient de manière unique le type de l’entrée de répertoire donnée.
Toutes les valeurs possibles de ce champ sont valides, sauf si les champs TypeImportance et TypeCategory contiennent toutes les deux la valeur 0 ; dans ce cas, la valeur 0 n’est pas valide pour ce champ.
6.2.1.2 Champ TypeImportance
Le champ TypeImportance décrit l’importance de l’entrée de répertoire donnée.
Les valeurs valides pour ce champ doivent être les suivantes :
- 0, ce qui signifie que l’entrée de répertoire donnée est critique (voir section 6.3.1.2.1 et section 6.4.1.2.1 pour les entrées de répertoire secondaire primaire et critique critiques, respectivement)
- 1, ce qui signifie que l’entrée d’annuaire donnée est bénigne (voir section 6.3.1.2.2 et section 6.4.1.2.2 pour les entrées de répertoire secondaire primaire et bénin, respectivement)
6.2.1.3 Champ TypeCategory
Le champ TypeCategory décrit la catégorie de l’entrée de répertoire donnée.
Les valeurs valides pour ce champ doivent être les suivantes :
- 0, ce qui signifie que l’entrée de répertoire donnée est primaire (voir section 6.3)
- 1, ce qui signifie que l’entrée de répertoire donnée est secondaire (voir section 6.4)
6.2.1.4 Champ InUse
Le champ InUse décrit si l’entrée d’annuaire donnée en cours d’utilisation ou non.
Les valeurs valides pour ce champ doivent être les suivantes :
- 0, ce qui signifie que l’entrée de répertoire donnée n’est pas utilisée ; cela signifie que la structure donnée est en fait une entrée d’annuaire inutilisée
- 1, ce qui signifie que l’entrée de répertoire donnée est en cours d’utilisation ; cela signifie que la structure donnée est une entrée de répertoire standard
6.2.2 Champ FirstCluster
Le champ FirstCluster doit contenir l’index du premier cluster d’une allocation dans le tas de cluster associé à l’entrée de répertoire donnée.
La plage de valeurs valide pour ce champ doit être :
- Exactement 0, ce qui signifie qu’aucune allocation de cluster n’existe
- Entre 2 et ClusterCount + 1, qui est la plage d’index de cluster valides
Les structures qui dérivent de ce modèle peuvent redéfinir les champs FirstCluster et DataLength, si une allocation de cluster n’est pas compatible avec la structure dérivée.
6.2.3 Champ DataLength
Le champ DataLength décrit la taille, en octets, des données que contient l’allocation de cluster associée.
La plage de valeurs valide pour ce champ est la suivante :
- Au moins 0 ; si le champ FirstCluster contient la valeur 0, la seule valeur valide de ce champ est 0
- Au plus ClusterCount * 2SectorsPerClusterShift* 2BytesPerSectorShift
Les structures qui dérivent de ce modèle peuvent redéfinir les champs FirstCluster et DataLength, si une allocation de cluster n’est pas possible pour la structure dérivée.
6.3 Modèle d’annuaire principal générique
La première entrée de répertoire dans un jeu d’entrées d’annuaire doit être une entrée de répertoire primaire. Toutes les entrées de répertoire suivantes, le cas échéant, dans le jeu d’entrées d’annuaire doivent être des entrées de répertoire secondaire (voir section 6.4).
La possibilité d’interpréter le modèle Primary DirectoryEntry générique est obligatoire.
Toutes les structures d’entrée de répertoire primaire dérivent du modèle Generic Primary DirectoryEntry (voir Tableau 16), qui dérive du modèle Generic DirectoryEntry (voir Section 6.2).
tableau 16 modèle Primary DirectoryEntry générique
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 6.3.1 définit son contenu. |
CompteSecondaire | 1 | 1 | Ce champ est obligatoire et section 6.3.2 définit son contenu. |
SetChecksum | 2 | 2 | Ce champ est obligatoire et section 6.3.3 définit son contenu. |
DrapeauxGénérauxPrimaires | 4 | 2 | Ce champ est obligatoire et section 6.3.4 définit son contenu. |
CustomDefined | 6 | 14 | Ce champ est obligatoire et les structures dérivées de ce modèle définissent son contenu. |
FirstCluster | 20 | 4 | Ce champ est obligatoire et section 6.3.5 définit son contenu. |
LongueurDonnees | Vingt-quatre | 8 | Ce champ est obligatoire et section 6.3.6 définit son contenu. |
6.3.1 Champ EntryType
Le champ EntryType doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.1).
6.3.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.1.1).
6.3.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.1.2).
6.3.1.2.1 Entrées de répertoire principal critiques
Les entrées de répertoire principal critiques contiennent des informations essentielles à la gestion appropriée d’un volume exFAT. Seul le répertoire racine contient des entrées de répertoire primaire critiques (les entrées de répertoire de fichiers sont une exception, consultez section 7.4).
La définition des entrées de répertoire principal critiques est corrélée au numéro de révision exFAT principal. Les implémentations prennent en charge toutes les entrées de répertoire principal critiques et enregistrent uniquement les structures d’entrée de répertoire primaire critiques définies par cette spécification.
6.3.1.2.2 Entrées de répertoire principal bénins
Les entrées de répertoire principal bénignes contiennent des informations supplémentaires qui peuvent être utiles pour la gestion d’un volume exFAT. Tout répertoire peut contenir des entrées de répertoire primaire sans gravité.
La définition d’entrées de répertoire principal sans gravité est corrélée au numéro de révision exFAT mineur. La prise en charge de n’importe quelle entrée de répertoire primaire sans gravité, cette spécification ou toute spécification ultérieure, est facultative. Une entrée de répertoire primaire non reconnue non reconnue restitue l’ensemble de l’entrée de répertoire définie comme non reconnue (au-delà de la définition des modèles d’entrée de répertoire applicables).
6.3.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.1.3).
Pour ce modèle, la valeur valide de ce champ doit être 0.
6.3.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.1.4).
6.3.2 Champ SecondaryCount
Le champ SecondaryCount décrit le nombre d’entrées de répertoire secondaire qui suivent immédiatement l’entrée de répertoire primaire donnée. Ces entrées de répertoire secondaire, ainsi que l’entrée de répertoire primaire donnée, comprennent le jeu d’entrées d’annuaire.
La plage de valeurs valide pour ce champ doit être :
- Au moins 0, ce qui signifie que cette entrée de répertoire primaire est la seule entrée dans le jeu d’entrées d’annuaire
- Au maximum 255, ce qui signifie que les 255 entrées de répertoire suivantes et cette entrée de répertoire primaire comprennent le jeu d’entrées d’annuaire
Les structures d’entrée de répertoire principal critiques qui dérivent de ce modèle peuvent redéfinir les champs SecondaryCount et SetChecksum.
6.3.3 Champ SetChecksum
Le champ SetChecksum doit contenir la somme de contrôle de toutes les entrées d’annuaire dans le jeu d’entrées d’annuaire donné. Toutefois, la somme de contrôle exclut ce champ (voir Figure 2). Les implémentations vérifient que le contenu de ce champ est valide avant d’utiliser toute autre entrée de répertoire dans le jeu d’entrées d’annuaire donné.
Les structures d’entrée de répertoire principal critiques qui dérivent de ce modèle peuvent redéfinir les champs SecondaryCount et SetChecksum.
Figure 2 Calcul de l'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 Champ IndicateursPrimairesGénéraux
Le champ GeneralPrimaryFlags contient des indicateurs (voir Tableau 17).
Les structures d’entrée de répertoire principal critiques qui dérivent de ce modèle peuvent redéfinir ce champ.
Tableau 17 GénéralPrimaryFlags générique
nom de champ | offset (bit) |
taille (bits) |
commentaires |
---|---|---|---|
AllocationPossible | 0 | 1 | Ce champ est obligatoire et section 6.3.4.1 définit son contenu. |
NoFatChain | 1 | 1 | Ce champ est obligatoire et section 6.3.4.2 définit son contenu. |
CustomDefined | 2 | 14 | Ce champ est obligatoire et les structures dérivées de ce modèle peuvent définir ce champ. |
6.3.4.1 Champ AllocationPossible
Le champ AllocationPossible indique si une allocation dans le tas de cluster est possible pour l’entrée de répertoire donnée.
Les valeurs valides pour ce champ doivent être les suivantes :
- 0, ce qui signifie qu’une allocation associée de clusters n’est pas possible et que les champs FirstCluster et DataLength ne sont pas définis (les structures dérivées de ce modèle peuvent redéfinir ces champs)
- 1, ce qui signifie qu’une allocation associée de clusters est possible et que les champs FirstCluster et DataLength sont définis comme définis
6.3.4.2 Champ NoFatChain
Le champ NoFatChain indique si le fat actif décrit ou non la chaîne de cluster de l’allocation donnée.
Les valeurs valides pour ce champ doivent être les suivantes :
- 0, ce qui signifie que les entrées FAT correspondantes pour la chaîne de cluster de l’allocation sont valides et les implémentations doivent les interpréter ; si le champ AllocationPossible contient la valeur 0, ou si le champ AllocationPossible contient la valeur 1 et le champ FirstCluster contient la valeur 0, la seule valeur valide de ce champ est 0.
- 1, ce qui signifie que l’allocation associée est une série contiguë de clusters ; les entrées FAT correspondantes pour les clusters ne sont pas valides et les implémentations ne les interprètent pas ; les implémentations peuvent utiliser l’équation suivante pour calculer la taille de l’allocation associée : DataLength / (2SectorsPerClusterShift* 2BytesPerSectorShift) arrondi à l’entier le plus proche
Si les structures d’entrée de répertoire principal critiques qui dérivent de ce modèle redéfinissent le champ GeneralPrimaryFlags, les entrées FAT correspondantes pour la chaîne de cluster d’une allocation associée sont valides.
6.3.5 Champ FirstCluster
Le champ FirstCluster doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.2).
Si le bit NoFatChain est 1, FirstCluster doit pointer vers un cluster valide dans le tas de cluster.
Les structures d’entrée de répertoire principal critiques qui dérivent de ce modèle peuvent redéfinir les champs FirstCluster et DataLength. D’autres structures dérivées de ce modèle peuvent redéfinir les champs FirstCluster et DataLength uniquement si le champ AllocationPossible contient la valeur 0.
6.3.6 Champ DataLength
Le champ DataLength doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.3).
Si le bit NoFatChain est 1, DataLength ne doit pas être égal à zéro. Si le champ FirstCluster est égal à zéro, DataLength doit également être égal à zéro.
Les structures d’entrée de répertoire principal critiques qui dérivent de ce modèle peuvent redéfinir les champs FirstCluster et DataLength. D’autres structures dérivées de ce modèle peuvent redéfinir les champs FirstCluster et DataLength uniquement si le champ AllocationPossible contient la valeur 0.
6.4 Modèle d’annuaire secondaire générique
L’objectif central des entrées de répertoire secondaire est de fournir des informations supplémentaires sur un jeu d’entrées d’annuaire. La possibilité d’interpréter le modèle Generic Secondary DirectoryEntry est obligatoire.
La définition des entrées de répertoire secondaire critique et bénin est corrélée au numéro de révision exFAT mineur. La prise en charge de toute entrée de répertoire secondaire critique ou bénin que cette spécification, ou les spécifications ultérieures, est facultative.
Toutes les structures d’entrée de répertoire secondaire dérivent du modèle DirectoryEntry secondaire générique (voir Tableau 18), qui dérive du modèle Generic DirectoryEntry (voir Section 6.2).
tableau 18 modèle DirectoryEntry secondaire générique
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et la section section 6.4.1 définit son contenu. |
GeneralSecondaryFlags | 1 | 1 | Ce champ est obligatoire et section 6.4.2 définit son contenu. |
CustomDefined | 2 | 18 | Ce champ est obligatoire et les structures dérivées de ce modèle définissent son contenu. |
FirstCluster | 20 | 4 | Ce champ est obligatoire et section 6.4.3 définit son contenu. |
LongueurDonnees | Vingt-quatre | 8 | Ce champ est obligatoire et section 6.4.4 définit son contenu. |
6.4.1 Champ EntryType
Le champ EntryType doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.1)
6.4.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.1.1).
6.4.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.1.2).
6.4.1.2.1 Entrées de répertoire secondaire critique
Les entrées de répertoire secondaire critiques contiennent des informations essentielles à la gestion appropriée de son jeu d’entrées d’annuaire contenant. Bien que la prise en charge d’une entrée de répertoire secondaire critique spécifique soit facultative, une entrée de répertoire critique non reconnue affiche l’ensemble de l’entrée de répertoire définie comme non reconnue (au-delà de la définition des modèles d’entrée de répertoire applicables).
Toutefois, si un jeu d’entrées d’annuaire contient au moins une entrée de répertoire secondaire critique qu’une implémentation ne reconnaît pas, l’implémentation interprète au maximum les modèles des entrées de répertoire dans le jeu d’entrées d’annuaire et non les données associées à une entrée de répertoire dans le jeu d’entrées de répertoire contient (les entrées de répertoire de fichiers sont une exception, voir section 7.4).
6.4.1.2.2 Entrées de répertoire secondaire bénin
Les entrées de répertoire secondaire bénignes contiennent des informations supplémentaires qui peuvent être utiles pour gérer son jeu d’entrées d’annuaire contenant. La prise en charge de toute entrée de répertoire secondaire bénigne spécifique est facultative. Les entrées de répertoire secondaire non reconnues non reconnues ne restituent pas l’ensemble de l’entrée de répertoire définie comme non reconnue.
Les implémentations peuvent ignorer toute entrée secondaire bénigne qu’elle ne reconnaît pas.
6.4.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.1.3).
Pour ce modèle, la valeur valide de ce champ est 1.
6.4.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.1.4).
6.4.2 Champ GeneralSecondaryFlags
Le champ GeneralSecondaryFlags contient des indicateurs (voir Tableau 19).
Tableau 19 GénéralSecondaryFlags générique
nom de champ | offset (bit) |
taille (bits) |
commentaires |
---|---|---|---|
AllocationPossible | 0 | 1 | Ce champ est obligatoire et section 6.4.2.1 définit son contenu. |
NoFatChain | 1 | 1 | Ce champ est obligatoire et section 6.4.2.2 définit son contenu. |
CustomDefined | 2 | 6 | Ce champ est obligatoire et les structures dérivées de ce modèle peuvent définir ce champ. |
6.4.2.1 Champ AllocationPossible
Le champ AllocationPossible doit avoir la même définition que le champ nommé identique dans le modèle Primary DirectoryEntry générique (voir section 6.3.4.1).
6.4.2.2 Champ NoFatChain
Le champ NoFatChain doit avoir la même définition que le champ nommé dans le modèle Primary DirectoryEntry générique (voir section 6.3.4.2).
6.4.3 Champ FirstCluster
Le champ FirstCluster doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.2).
Si le bit NoFatChain est 1, FirstCluster doit pointer vers un cluster valide dans le tas de cluster.
6.4.4 Champ DataLength
Le champ DataLength doit être conforme à la définition fournie dans le modèle Generic DirectoryEntry (voir section 6.2.3).
Si le bit NoFatChain est 1, DataLength ne doit pas être égal à zéro. Si le champ FirstCluster est égal à zéro, DataLength doit également être égal à zéro.
7 Définitions d’entrée d’annuaire
La révision 1.00 du système de fichiers exFAT définit les entrées de répertoire suivantes :
- Critique primaire
- Bitmap d’allocation (section 7.1)
- Table de cas de mise à jour (section 7.2)
- Étiquette de volume ( section 7.3)
- Fichier (section 7.4)
- Primaire bénigne
- GUID du volume ( section7.5)
- Padding TexFAT (section 7.10)
- Secondaire essentiel
- Extension de flux (section 7.6)
- Nom du fichier (section 7.7)
- Secondaire bénin
- Extension du fournisseur (section 7.8)
- Allocation du fournisseur (section 7.9)
7.1 Entrée de répertoire bitmap d’allocation
Dans le système de fichiers exFAT, un fat ne décrit pas l’état d’allocation des clusters ; plutôt qu’une bitmap d’allocation. Les bitmaps d’allocation existent dans le tas de cluster (voir section 7.1.5) et ont des entrées de répertoire primaire critiques correspondantes dans le répertoire racine (voir Tableau 20).
Le champ NumberOfFats détermine le nombre d’entrées de répertoires Bitmap d’allocation valides dans le répertoire racine. Si le champ NumberOfFats contient la valeur 1, le seul nombre valide d’entrées de répertoire Bitmap d’allocation est 1. En outre, l’entrée de répertoire Bitmap d’allocation est valide uniquement si elle décrit la première image bitmap d’allocation (voir section 7.1.2.1). Si le champ NumberOfFats contient la valeur 2, le seul nombre valide d’entrées de répertoire Bitmap d’allocation est 2. En outre, les deux entrées de répertoire Bitmap d’allocation ne sont valides que si l’une décrit la première bitmap d’allocation et l’autre décrit la deuxième bitmap d’allocation.
Table 20, structure Bitmap DirectoryEntry d’allocation
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 7.1.1 définit son contenu. |
BitmapFlags | 1 | 1 | Ce champ est obligatoire et section 7.1.2 définit son contenu. |
Réservé | 2 | 18 | Ce champ est obligatoire et son contenu est réservé. |
FirstCluster | 20 | 4 | Ce champ est obligatoire et section 7.1.3 définit son contenu. |
LongueurDonnees | Vingt-quatre | 8 | Ce champ est obligatoire et section 7.1.4 définit son contenu. |
Champ EntryType 7.1.1
Le champ EntryType doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1).
7.1.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.1).
Pour une entrée de répertoire Bitmap d’allocation, la valeur valide de ce champ est 1.
7.1.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.2).
Pour une entrée de répertoire Bitmap d’allocation, la valeur valide de ce champ est 0.
7.1.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.3).
7.1.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.4).
7.1.2 Champ BitmapFlags
Le champ BitmapFlags contient des indicateurs (voir Tableau 21).
Tableau 21 BitmapFlags, structure de champ
nom de champ | offset (bit) |
taille (bits) |
commentaires |
---|---|---|---|
BitmapIdentifier | 0 | 1 | Ce champ est obligatoire et section 7.1.2.1 définit son contenu. |
Réservé | 1 | 7 | Ce champ est obligatoire et son contenu est réservé. |
7.1.2.1 Champ BitmapIdentifier
Le champ BitmapIdentifier indique la bitmap d’allocation décrite par l’entrée de répertoire donnée. Les implémentations utilisent la première image bitmap d’allocation conjointement avec first FAT et utilisent la deuxième image bitmap d’allocation conjointement avec la deuxième fat. Le champ ActiveFat décrit quelles images FAT et Allocation Bitmap sont actives.
Les valeurs valides pour ce champ doivent être les suivantes :
- 0, ce qui signifie que l’entrée de répertoire donnée décrit la première bitmap d’allocation
- 1, ce qui signifie que l’entrée de répertoire donnée décrit la deuxième bitmap d’allocation et n’est possible que lorsque NumberOfFats contient la valeur 2
7.1.3 Champ FirstCluster
Le champ FirstCluster doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.5).
Ce champ contient l’index du premier cluster de la chaîne de cluster, comme le décrit fat, qui héberge la bitmap d’allocation.
7.1.4 Champ DataLength
Le champ DataCluster doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.6).
7.1.5 Bitmap d’allocation
Une bitmap d’allocation enregistre l’état d’allocation des clusters dans le tas de clusters. Chaque bit d’une bitmap d’allocation indique si son cluster correspondant est disponible pour l’allocation ou non.
Une bitmap d’allocation représente les clusters de l’index le plus bas au plus élevé (voir Tableau 22). Pour des raisons historiques, le premier cluster a l’index 2.
Remarque
Le premier bit de la bitmap est le bit de l’ordre le plus bas du premier octet.
table 22, structure bitmap d’allocation
nom de champ | offset (bit) |
taille (bits) |
commentaires |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | Ce champ est obligatoire et la section section 7.1.5.1 définit son contenu. |
. . . |
. . . |
. . . |
. . . |
BitmapEntry[ClusterCount+1] | ClusterCount - 1 | 1 | Ce champ est obligatoire et section 7.1.5.1 définit son contenu. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent tous deux le champ ClusterCount. |
Réservé | Nombre de Clusters | (DataLength * 8) – NombreDeClusters | Ce champ est obligatoire et son contenu, le cas échéant, sont réservés. Remarque : les secteurs de démarrage principal et de sauvegarde contiennent tous deux le champ ClusterCount. |
7.1.5.1 BitmapEntry[2] ... Champs BitmapEntry[ClusterCount+1]
Chaque champ BitmapEntry de ce tableau représente un cluster dans le tas de cluster. BitmapEntry[2] représente le premier cluster dans le tas de cluster et BitmapEntry[ClusterCount+1] représente le dernier cluster du tas de cluster.
Les valeurs valides pour ces champs doivent être les suivantes :
- 0, qui décrit le cluster correspondant comme disponible pour l’allocation
- 1, qui décrit le cluster correspondant comme non disponible pour l’allocation (une allocation de cluster peut déjà consommer le cluster correspondant ou le FAT actif peut décrire le cluster correspondant comme incorrect)
7.2 Entrée de répertoire de table à casse
La table à casse up définit la conversion de minuscules en caractères majuscules. Cela est important en raison de l’entrée du répertoire du nom de fichier (voir la section 7.7) à l’aide de caractères Unicode et du système de fichiers exFAT ne respectant pas la casse et la conservation de la casse. La table de cas up-case existe dans le tas de cluster (voir section 7.2.5) et a une entrée de répertoire primaire critique correspondante dans le répertoire racine (voir Tableau 23). Le nombre valide d’entrées du répertoire Table à cas élevé est 1.
En raison de la relation entre la table à casse up-case et les noms de fichiers, les implémentations ne doivent pas modifier la table de casse up, sauf en raison d’opérations de format.
Table 23 Structure d’entrée de répertoire de la table en majuscules
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 7.2.1 définit son contenu. |
Réservé1 | 1 | 3 | Ce champ est obligatoire et son contenu est réservé. |
TableChecksum | 4 | 4 | Ce champ est obligatoire et section 7.2.2 définit son contenu. |
Réservé2 | 8 | 12 | Ce champ est obligatoire et son contenu est réservé. |
FirstCluster | 20 | 4 | Ce champ est obligatoire et section 7.2.3 définit son contenu. |
LongueurDonnees | Vingt-quatre | 8 | Ce champ est obligatoire et section 7.2.4 définit son contenu. |
7.2.1 Champ EntryType
Le champ EntryType doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1).
7.2.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.1).
Pour l’entrée de répertoire Table à cas haut, la valeur valide de ce champ est 2.
7.2.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.2).
Pour l’entrée de répertoire Table à cas up-case, la valeur valide de ce champ est 0.
7.2.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.3).
7.2.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.4).
7.2.2 Champ TableChecksum
Le champ TableChecksum contient la somme de contrôle de la table up-case (que les champs FirstCluster et DataLength décrivent). Les implémentations vérifient que le contenu de ce champ est valide avant d’utiliser la table de cas d’utilisation.
Figure 3 Calcul 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 Champ FirstCluster
Le champ FirstCluster doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.5).
Ce champ contient l’index du premier cluster de la chaîne de cluster, comme le décrit fat, qui héberge la table à cas haut.
7.2.4 Champ DataLength
Le champ DataCluster doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.6).
7.2.5 Table de cas up-case
Une table à casse up est une série de mappages de caractères Unicode. Un mappage de caractères se compose d’un champ de 2 octets, avec l’index du champ dans la table de casse up représentant le caractère Unicode à caser, et le champ de 2 octets représentant le caractère Unicode up-cased.
Les 128 premiers caractères Unicode ont des mappages obligatoires (voir Tableau 24). Une table à casse up qui a tout autre mappage de caractères pour l’un des 128 premiers caractères Unicode n’est pas valide.
Les implémentations qui prennent uniquement en charge les caractères de la plage de mappage obligatoire peuvent ignorer les mappages du reste de la table de casse. Ces implémentations n’utilisent que des caractères de la plage de mappage obligatoire lors de la création ou du renommage de fichiers (via l’entrée de répertoire nom de fichier, consultez section 7.7). Lors de la casse des noms de fichiers existants, ces implémentations ne doivent pas mettre à jour les caractères de la plage de mappage non obligatoire, mais les laisser intacts dans le nom de fichier mis en casse résultant (il s’agit d’une casse partielle). Lors de la comparaison des noms de fichiers, ces implémentations traitent les noms de fichiers qui diffèrent du nom sous comparaison uniquement par les caractères Unicode de la plage de mappage non obligatoire comme équivalent. Bien que ces noms de fichiers ne soient potentiellement équivalents que, ces implémentations ne peuvent pas s’assurer que le nom de fichier entièrement casé ne se heurte pas au nom sous comparaison.
Tableau 24 Entrées obligatoires de 128 premières tables à casse
Index de table | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
(Remarque : les entrées avec des mappages sans casse d’identité sont en gras)
Lors de la mise en forme d’un volume, les implémentations peuvent générer une table de casse up-case dans un format compressé à l’aide de la compression de mappage d’identité, car une grande partie de l’espace de caractères Unicode n’a pas de concept de cas (ce qui signifie que les caractères « minuscules » et « majuscules » sont équivalents). Les implémentations compressent une table de cas up-case en représentant une série de mappages d’identités avec la valeur FFFFh suivie du nombre de mappages d’identité.
Par exemple, une implémentation peut représenter les 100 premiers mappages de caractères (64h) avec les huit entrées suivantes d’une table de casse compressée :
FFFFh, 0061h, 0041h, 0042h, 0043h
Les deux premières entrées indiquent les 97 premiers caractères (61h) (de 0000h à 0060h) ont des mappages d’identité. Les caractères suivants, 0061h à 0063h, correspondent respectivement aux caractères 0041h à 0043h.
La possibilité de fournir une table à casse compressée lors de la mise en forme d’un volume est facultative. Toutefois, la possibilité d’interpréter à la fois une table non compressée et une table à casse compressée est obligatoire. La valeur du champ TableChecksum est toujours conforme à la façon dont la table de casse up existe sur le volume, qui peut être au format compressé ou non compressé.
7.2.5.1 Table de cas d’utilisation recommandée
Lors de la mise en forme d’un volume, les implémentations doivent enregistrer la table de casse recommandée au format compressé (voir Tableau 25), pour laquelle la valeur du champ TableChecksum est E619D30Dh.
Si une implémentation définit sa propre table de casse, compressée ou non compressée, cette table doit couvrir la plage de caractères Unicode complète (entre les codes de caractères 0000h et FFFFh inclus).
Tableau 25 Table de casse recommandée au format compressé
Décalage brut | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
0080h | 0080h | 0081h | 0082h | 0083h | 0084h | 0085h | 0086h | 0087h |
0088h | 0088h | 0089h | 008Ah | 008Bh | 008Ch | 008Dh | 008Eh | 008Fh |
0090h | 0090h | 0091h | 0092h | 0093h | 0094h | 0095h | 0096h | 0097h |
0098h | 0098h | 0099h | 009Ah | 009Bh | 009Ch | 009Dh | 009Eh | 009Fh |
00A0h | 00A0h | 00A1h | 00A2h | 00A3h | 00A4h | 00A5h | 00A6h | 00A7h |
00A8h | 00A8h | 00A9h | 00AAh | 00ABh | 00ACh | 00ADh | 00AEh | 00AFh |
00B0h | 00B0h | 00B1h | 00B2h | 00B3h | 00B4h | 00B5h | 00B6h | 00B7h |
00B8h | 00B8h | 00B9h | 00BAh | 00BBh | 00BCh | 00BDh | 00BEh | 00BFh |
00C0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00C8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00D0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00D7h |
00D8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 00DFh |
00E0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00E8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00F0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00F7h |
00F8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 0178h |
0100h | 01:00 | 01:00 | 0102h | 0102h | 0104h | 0104h | 0106h | 0106h |
0108h | 0108h | 0108h | 010Ah | 010Ah | 010Ch | 010Ch | 010Eh | 010Eh |
0110h | 0110h | 0110h | 0112h | 0112h | 0114h | 0114h | 0116h | 0116h |
0118h | 0118h | 0118h | 011Ah | 011Ah | 011Ch | 011Ch | 011Eh | 011Eh |
0120h | 0120h | 0120h | 0122h | 0122h | 0124h | 0124h | 0126h | 0126h |
0128h | 0128h | 0128h | 012Ah | 012Ah | 012Ch | 012Ch | 012Eh | 012Eh |
0130h | 0130h | 0131h | 0132h | 0132h | 0134h | 0134h | 0136h | 0136h |
0138h | 0138h | 0139h | 0139h | 013Bh | 013Bh | 013Dh | 013Dh | 013Fh |
0140h | 013Fh | 0141h | 0141h | 0143h | 0143h | 0145h | 0145h | 0147h |
0148h | 0147h | 0149h | 014Ah | 014Ah | 014Ch | 014Ch | 014Eh | 014Eh |
0150h | 0150h | 0150h | 0152h | 0152h | 0154h | 0154h | 0156h | 0156h |
0158h | 0158h | 0158h | 015Ah | 015Ah | 015Ch | 015Ch | 015Eh | 015Eh |
0160h | 0160h | 0160h | 0162h | 0162h | 0164h | 0164h | 0166h | 0166h |
0168h | 0168h | 0168h | 016Ah | 016Ah | 016Ch | 016Ch | 016Eh | 016Eh |
0170h | 0170h | 0170h | 0172h | 0172h | 0174h | 0174h | 0176h | 0176h |
0178h | 0178h | 0179h | 0179h | 017Bh | 017Bh | 017Dh | 017Dh | 017Fh |
0180h | 0243h | 0181h | 0182h | 0182h | 0184h | 0184h | 0186h | 0187h |
0188h | 0187h | 0189h | 018Ah | 018Bh | 018Bh | 018Dh | 018Eh | 018Fh |
0190h | 0190h | 0191h | 0191h | 0193h | 0194h | 01F6h | 0196h | 0197h |
0198h | 0198h | 0198h | 023Dh | 019Bh | 019Ch | 019Dh | 0220h | 019Fh |
01A0h | 01A0h | 01A0h | 01A2h | 01A2h | 01A4h | 01A4h | 01A6h | 01A7h |
01A8h | 01A7h | 01A9h | 01AAh | 01ABh | 01ACh | 01ACh | 01AEh | 01AFh |
01B0h | 01AFh | 01B1h | 01B2h | 01B3h | 01B3h | 01B5h | 01B5h | 01B7h |
01B8h | 01B8h | 01B8h | 01BAh | 01BBh | 01BCh | 01BCh | 01BEh | 01F7h |
01C0h | 01C0h | 01C1h | 01C2h | 01C3h | 01C4h | 01C5h | 01C4h | 01C7h |
01C8h | 01C8h | 01C7h | 01CAh | 01CBh | 01CAh | 01CDh | 01CDh | 01CFh |
01D0h | 01CFh | 01D1h | 01D1h | 01D3h | 01D3h | 01D5h | 01D5h | 01D7h |
01D8h | 01D7h | 01D9h | 01D9h | 01DBh | 01DBh | 018Eh | 01DEh | 01DEh |
01E0h | 01E0h | 01E0h | 01E2h | 01E2h | 01E4h | 01E4h | 01E6h | 01E6h |
01E8h | 01E8h | 01E8h | 01EAh | 01EAh | 01ECh | 01ECh | 01EEh | 01EEh |
01F0h | 01F0h | 01F1h | 01F2h | 01F1h | 01F4h | 01F4h | 01F6h | 01F7h |
01F8h | 01F8h | 01F8h | 01FAh | 01FAh | 01FCh | 01FCh | 01FEh | 01FEh |
0200h | 0200h | 0200h | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 0214h | 0216h | 0216h |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | 0226h | 0226h |
0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
02B8h | 02B8h | 02B9h | 02BAh | 02Bh | 02BCh | 02BDh | 02BEh | 02BFh |
02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02FFh |
0300h | 03:00 | 0301h | 0302h | 0303h | 0304h | 0305h | 0306h | 0307h |
0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 0312h | 0313h | 0314h | 0315h | 0316h | 0317h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 0332h | 0333h | 0334h | 0335h | 0336h | 0337h |
0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 0346h | 0347h |
0348h | 0348h | 0349h | 034Ah | 034Bh | 034Ch | 034Dh | 034Eh | 034Fh |
0350h | 0350h | 0351h | 0352h | 0353h | 0354h | 0355h | 0356h | 0357h |
0358h | 0358h | 0359h | 035Ah | 035Bh | 035Ch | 035Dh | 035Eh | 035Fh |
0360h | 0360h | 0361h | 0362h | 0363h | 0364h | 0365h | 0366h | 0367h |
0368h | 0368h | 0369h | 036Ah | 036Bh | 036Ch | 036Dh | 036Eh | 036Fh |
0370h | 0370h | 0371h | 0372h | 0373h | 0374h | 0375h | 0376h | 0377h |
0378h | 0378h | 0379h | 037Ah | 03FDh | 03FEh | 03FFh | 037Eh | 037Fh |
0380h | 0380h | 0381h | 0382h | 0383h | 0384h | 0385h | 0386h | 0387h |
0388h | 0388h | 0389h | 038Ah | 038Bh | 038Ch | 038Dh | 038Eh | 038Fh |
0390h | 0390h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
0398h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03A0h | 03A0h | 03A1h | 03A2h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03A8h | 03A8h | 03A9h | 03AAh | 03ABh | 0386h | 0388h | 0389h | 038Ah |
03B0h | 03B0h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
03B8h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03C0h | 03A0h | 03A1h | 03A3h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03C8h | 03A8h | 03A9h | 03AAh | 03ABh | 038Ch | 038Eh | 038Fh | 03CFh |
03D0h | 03D0h | 03D1h | 03D2h | 03D3h | 03D4h | 03D5h | 03D6h | 03D7h |
03D8h | 03D8h | 03D8h | 03DAh | 03DAh | 03DCh | 03DCh | 03DEh | 03DEh |
03E0h | 03E0h | 03E0h | 03E2h | 03E2h | 03E4h | 03E4h | 03E6h | 03E6h |
03E8h | 03E8h | 03E8h | 03EAh | 03EAh | 03ECh | 03ECh | 03EEh | 03EEh |
03F0h | 03F0h | 03F1h | 03F9h | 03F3h | 03F4h | 03F5h | 03F6h | 03F7h |
03F8h | 03F7h | 03F9h | 03FAh | 03FAh | 03FCh | 03FDh | 03FEh | 03FFh |
0400h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0410h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0420h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0428h | 0428h | 04h29 | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0430h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0438h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0440h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0448h | 0428h | 04h29 | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0450h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0458h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0460h | 0460h | 0460h | 0462h | 0462h | 0464h | 0464h | 0466h | 0466h |
0468h | 0468h | 0468h | 046Ah | 046Ah | 046Ch | 046Ch | 046Eh | 046Eh |
0470h | 0470h | 0470h | 0472h | 0472h | 0474h | 0474h | 0476h | 0476h |
0478h | 0478h | 0478h | 047Ah | 047Ah | 047Ch | 047Ch | 047Eh | 047Eh |
0480h | 0480h | 0480h | 0482h | 0483h | 0484h | 0485h | 0486h | 0487h |
0488h | 0488h | 0489h | 048Ah | 048Ah | 048Ch | 048Ch | 048Eh | 048Eh |
0490h | 0490h | 0490h | 0492h | 0492h | 0494h | 0494h | 0496h | 0496h |
0498h | 0498h | 0498h | 049Ah | 049Ah | 049Ch | 049Ch | 049Eh | 049Eh |
04A0h | 04A0h | 04A0h | 04A2h | 04A2h | 04A4h | 04A4h | 04A6h | 04A6h |
04A8h | 04A8h | 04A8h | 04AAh | 04AAh | 04ACh | 04ACh | 04AEh | 04AEh |
04B0h | 04B0h | 04B0h | 04B2h | 04B2h | 04B4h | 04B4h | 04B6h | 04B6h |
04B8h | 04B8h | 04B8h | 04BAh | 04BAh | 04BCh | 04BCh | 04BEh | 04BEh |
04C0h | 04C0h | 04C1h | 04C1h | 04C3h | 04C3h | 04C5h | 04C5h | 04C7h |
04C8h | 04C7h | 04C9h | 04C9h | 04CBh | 04CBh | 04CDh | 04CDh | 04C0h |
04D0h | 04D0h | 04D0h | 04D2h | 04D2h | 04D4h | 04D4h | 04D6h | 04D6h |
04D8h | 04D8h | 04D8h | 04DAh | 04DAh | 04DCh | 04DCh | 04DEh | 04DEh |
04E0h | 04E0h | 04E0h | 04E2h | 04E2h | 04E4h | 04E4h | 04E6h | 04E6h |
04E8h | 04E8h | 04E8h | 04EAh | 04EAh | 04ECh | 04ECh | 04EEh | 04EEh |
04F0h | 04F0h | 04F0h | 04F2h | 04F2h | 04F4h | 04F4h | 04F6h | 04F6h |
04F8h | 04F8h | 04F8h | 04FAh | 04FAh | 04FCh | 04FCh | 04FEh | 04FEh |
0500h | 0500h | 05:00 | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h | 0510h | 0510h | 0512h | 0512h | 0514h | 0515h | 0516h | 0517h |
0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 0521h | 0522h | 05:23 h | 0524h | 0525h | 0526h | 0527h |
0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
0530h | 0530h | 05h31 | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0538h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0540h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0548h | 0548h | 05h49 | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0550h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | 0557h |
0558h | 05h58 | 0559h | 055Ah | 055Bh | 055Ch | 055Dh | 055Eh | 055Fh |
0560h | 0560h | 05h31 | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0568h | 05h38 | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0570h | 0540h | 0541h | 0542h | 0543h | 05h44 | 0545h | 0546h | 0547h |
0578h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0580h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | FFFFh |
0588h | 17F6h | 2C63h | 1D7Eh | 1D7Fh | 1D80h | 1D81h | 1D82h | 1D83h |
0590h | 1D84h | 1D85h | 1D86h | 1D87h | 1D88h | 1D89h | 1D8Ah | 1D8Bh |
0598h | 1D8Ch | 1D8Dh | 1D8Eh | 1D8Fh | 1D90h | 1D91h | 1D92h | 1 jour et 93 heures |
05A0h | 1D94h | 1D95h | 1D96h | 1D97h | 1D98h | 1D99h | 1D9Ah | 1D9Bh |
05A8h | 1D9Ch | 1D9Dh | 1D9Eh | 1D9Fh | 1DA0h | 1DA1h | 1DA2h | 1DA3h |
05B0h | 1DA4h | 1DA5h | 1DA6h | 1DA7h | 1DA8h | 1DA9h | 1DAAh | 1DABh |
05B8h | 1DACh | 1DADh | 1DAEh | 1DAFh | 1DB0h | 1DB1h | 1DB2h | 1DB3h |
05C0h | 1DB4h | 1DB5h | 1DB6h | 1DB7h | 1DB8h | 1DB9h | 1DBAh | 1DBBh |
05C8h | 1DBCh | 1DBDh | 1DBEh | 1DBFh | 1DC0h | 1DC1h | 1DC2h | 1DC3h |
05D0h | 1DC4h | 1DC5h | 1DC6h | 1DC7h | 1DC8h | 1DC9h | 1DCAh | 1DCBh |
05D8h | 1DCCh | 1DCDh | 1DCEh | 1DCFh | 1DD0h | 1DD1h | 1DD2h | 1DD3h |
05E0h | 1DD4h | 1DD5h | 1DD6h | 1DD7h | 1DD8h | 1DD9h | 1DDAh | 1DDBh |
05E8h | 1DDCh | 1DDDh | 1DDEh | 1DDFh | 1DE0h | 1DE1h | 1DE2h | 1DE3h |
05F0h | 1DE4h | 1DE5h | 1DE6h | 1DE7h | 1DE8h | 1DE9h | 1DEAh | 1DEBh |
05F8h | 1DECh | 1DEDh | 1DEEh | 1DEFh | 1DF0h | 1DF1h | 1DF2h | 1DF3h |
0600h | 1DF4h | 1DF5h | 1DF6h | 1DF7h | 1DF8h | 1DF9h | 1DFAh | 1DFBh |
0608h | 1DFCh | 1DFDh | 1DFEh | 1DFFh | 1E00h | 1E00h | 1E02h | 1E02h |
0610h | 1E04h | 1E04h | 1E06h | 1E06h | 1E08h | 1E08h | 1E0Ah | 1E0Ah |
0618h | 1E0Ch | 1E0Ch | 1E0Eh | 1E0Eh | 1E10h | 1E10h | 1E12h | 1E12h |
0620h | 1E14h | 1E14h | 1E16h | 1E16h | 1E18h | 1E18h | 1E1Ah | 1E1Ah |
0628h | 1E1Ch | 1E1Ch | 1E1Eh | 1E1Eh | 1E20h | 1E20h | 1E22h | 1E22h |
0630h | 1E24h | 1E24h | 1E26h | 1E26h | 1E28h | 1E28h | 1E2Ah | 1E2Ah |
0638h | 1E2Ch | 1E2Ch | 1E2Eh | 1E2Eh | 1E30h | 1E30h | 1E32h | 1E32h |
0640h | 1E34h | 1E34h | 1E36h | 1E36h | 1E38h | 1E38h | 1E3Ah | 1E3Ah |
0648h | 1E3Ch | 1E3Ch | 1E3Eh | 1E3Eh | 1E40h | 1E40h | 1E42h | 1E42h |
0650h | 1E44h | 1E44h | 1E46h | 1E46h | 1E48h | 1E48h | 1E4Ah | 1E4Ah |
0658h | 1E4Ch | 1E4Ch | 1E4Eh | 1E4Eh | 1E50h | 1E50h | 1E52h | 1E52h |
0660h | 1E54h | 1E54h | 1E56h | 1E56h | 1E58h | 1E58h | 1E5Ah | 1E5Ah |
0668h | 1E5Ch | 1E5Ch | 1E5Eh | 1E5Eh | 1E60h | 1E60h | 1E62h | 1E62h |
0670h | 1E64h | 1E64h | 1E66h | 1E66h | 1E68h | 1E68h | 1E6Ah | 1E6Ah |
0678h | 1E6Ch | 1E6Ch | 1E6Eh | 1E6Eh | 1E70h | 1E70h | 1E72h | 1E72h |
0680h | 1E74h | 1E74h | 1E76h | 1E76h | 1E78h | 1E78h | 1E7Ah | 1E7Ah |
0688h | 1E7Ch | 1E7Ch | 1E7Eh | 1E7Eh | 1E80h | 1E80h | 1E82h | 1E82h |
0690h | 1E84h | 1E84h | 1E86h | 1E86h | 1E88h | 1E88h | 1E8Ah | 1E8Ah |
0698h | 1E8Ch | 1E8Ch | 1E8Eh | 1E8Eh | 1E90h | 1E90h | 1E92h | 1E92h |
06A0h | 1E94h | 1E94h | 1E96h | 1E97h | 1E98h | 1E99h | 1E9Ah | 1E9Bh |
06A8h | 1E9Ch | 1E9Dh | 1E9Eh | 1E9Fh | 1EA0h | 1EA0h | 1EA2h | 1EA2h |
06B0h | 1EA4h | 1EA4h | 1EA6h | 1EA6h | 1EA8h | 1EA8h | 1EAAh | 1EAAh |
06B8h | 1EACh | 1EACh | 1EAEh | 1EAEh | 1EB0h | 1EB0h | 1EB2h | 1EB2h |
06C0h | 1EB4h | 1EB4h | 1EB6h | 1EB6h | 1EB8h | 1EB8h | 1EBAh | 1EBAh |
06C8h | 1EBCh | 1EBCh | 1EBEh | 1EBEh | 1EC0h | 1EC0h | 1EC2h | 1EC2h |
06D0h | 1EC4h | 1EC4h | 1EC6h | 1EC6h | 1EC8h | 1EC8h | 1ECAh | 1ECAh |
06D8h | 1ECCh | 1ECCh | 1ECEh | 1ECEh | 1ED0h | 1ED0h | 1ED2h | 1ED2h |
06E0h | 1ED4h | 1ED4h | 1ED6h | 1ED6h | 1ED8h | 1ED8h | 1EDAh | 1EDAh |
06E8h | 1EDCh | 1EDCh | 1EDEh | 1EDEh | 1EE0h | 1EE0h | 1EE2h | 1EE2h |
06F0h | 1EE4h | 1EE4h | 1EE6h | 1EE6h | 1EE8h | 1EE8h | 1EEAh | 1EEAh |
06F8h | 1EECh | 1EECh | 1EEEh | 1EEEh | 1EF0h | 1EF0h | 1EF2h | 1EF2h |
0700h | 1EF4h | 1EF4h | 1EF6h | 1EF6h | 1EF8h | 1EF8h | 1EFAh | 1EFBh |
0708h | 1EFCh | 1EFDh | 1EFEh | 1EFFh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0710h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0718h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0720h | 1F1Ch | 1F1Dh | 1F16h | 1F17h | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0728h | 1F1Ch | 1F1Dh | 1F1Eh | 1F1Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0730h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0738h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0740h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0748h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0750h | 1F4Ch | 1F4Dh | 1F46h | 1F47h | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0758h | 1F4Ch | 1F4Dh | 1F4Eh | 1F4Fh | 1F50h | 1F59h | 1F52h | 1F5Bh |
0760h | 1F54h | 1F5Dh | 1F56h | 1F5Fh | 1F58h | 1F59h | 1F5Ah | 1F5Bh |
0768h | 1F5Ch | 1F5Dh | 1F5Eh | 1F5Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0770h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0778h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1FBAh | 1FBBh | 1FC8h | 1FC9h |
0780h | 1FCAh | 1FCBh | 1FDAh | 1FDBh | 1FF8h | 1FF9h | 1FEAh | 1FEBh |
0788h | 1FFAh | 1FFBh | 1F7Eh | 1F7Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0790h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0798h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A0h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A8h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B0h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B8h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FB8h | 1FB9h | 1FB2h | 1FBCh |
07C0h | 1FB4h | 1FB5h | 1FB6h | 1FB7h | 1FB8h | 1FB9h | 1FBAh | 1FBBh |
07C8h | 1FBCh | 1FBDh | 1FBEh | 1FBFh | 1FC0h | 1FC1h | 1FC2h | 1FC3h |
07D0h | 1FC4h | 1FC5h | 1FC6h | 1FC7h | 1FC8h | 1FC9h | 1FCAh | 1FCBh |
07D8h | 1FC3h | 1FCDh | 1FCEh | 1FCFh | 1FD8h | 1FD9h | 1FD2h | 1FD3h |
07E0h | 1FD4h | 1FD5h | 1FD6h | 1FD7h | 1FD8h | 1FD9h | 1FDAh | 1FDBh |
07E8h | 1FDCh | 1FDDh | 1FDEh | 1FDFh | 1FE8h | 1FE9h | 1FE2h | 1FE3h |
07F0h | 1FE4h | 1FECh | 1FE6h | 1FE7h | 1FE8h | 1FE9h | 1FEAh | 1FEBh |
07F8h | 1FECh | 1FEDh | 1FEEh | 1FEFh | 1FF0h | 1FF1h | 1FF2h | 1FF3h |
0800h | 1FF4h | 1FF5h | 1FF6h | 1FF7h | 1FF8h | 1FF9h | 1FFAh | 1FFBh |
0808h | 1FF3h | 1FFDh | 1FFEh | 1FFFh | 2000 h | 2001h | 2002h | 2003h |
0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
0818h | 200Ch | 200Dh | 200Eh | 200 heures de vol | 2010h | 2011h | 2012h | 2013h |
0820h | 2014h | 2015h | 2016h | 2017h | 2018h | 2019h | 201Ah | 201Bh |
0828h | 201Ch | 201Dh | 201Eh | 201Fh | 2020h | 2021h | 2022h | 2023h |
0830h | 2024h | 2025h | 2026h | 2027h | 2028h | 2029h | 202Ah | 202Bh |
0838h | 202Ch | 202Dh | 202Eh | 202Fh | 2030h | 2031h | 2032h | 2033h |
0840h | 2034h | 2035h | 2036h | 2037h | 2038h | 2039h | 203Ah | 203Bh |
0848h | 203Ch | 203Dh | 203Eh | 203Fh | 2040h | 2041h | 2042h | 2043h |
0850h | 2044h | 2045h | 2046h | 2047h | 2048h | 2049h | 204Ah | 204Bh |
0858h | 204Ch | 204Dh | 204Eh | 204Fh | 2050h | 2051 heures | 2052h | 2053h |
0860h | 2054h | 2055h | 2056h | 2057h | 2058h | 2059h | 205Ah | 205Bh |
0868h | 205Ch | 205Dh | 205Eh | 205Fh | 2060h | 2061h | 2062h | 2063h |
0870h | 2064h | 2065h | 2066h | 2067h | 2068h | 2069h | 206Ah | 206Bh |
0878h | 206Ch | 206Dh | 206Eh | 206Fh | 2070 h | 2071h | 2072h | 2073h |
0880h | 2074h | 2075h | 2076h | 2077h | 2078h | 2079h | 207Ah | 207Bh |
0888h | 207Ch | 207Dh | 207Eh | 207Fh | 2080h | 2081h | 2082h | 2083h |
0890h | 2084h | 2085h | 2086h | 2087h | 2088h | 2089h | 208Ah | 208Bh |
0898h | 208 Ch | 208Dh | 208Eh | 208Fh | 2090h | 2091h | 2092h | 2093h |
08A0h | 2094h | 2095h | 2096h | 2097h | 2098h | 2099h | 209Ah | 209Bh |
08A8h | 209Ch | 209Dh | 209Eh | 209Fh | 20A0h | 20A1h | 20A2h | 20A3h |
08B0h | 20A4h | 20A5h | 20A6h | 20A7h | 20A8h | 20A9h | 20AAh | 20ABh |
08B8h | 20ACh | 20ADh | 20AEh | 20AFh | 20B0h | 20B1h | 20B2h | 20B3h |
08C0h | 20B4h | 20B5h | 20B6h | 20B7h | 20B8h | 20B9h | 20BAh | 20BH |
08C8h | 20BCh | 20BDh | 20BEh | 20BFh | 20C0h | 20C1h | 20C2h | 20C3h |
08D0h | 20C4h | 20C5h | 20C6h | 20C7h | 20C8h | 20C9h | 20CAh | 20CBh |
08D8h | 20CCh | 20CDh | 20CEh | 20CFh | 20D0h | 20D1h | 20D2h | 20D3h |
08E0h | 20D4h | 20D5h | 20D6h | 20D7h | 20D8h | 20D9h | 20DAh | 20DBh |
08E8h | 20DCh | 20DDh | 20DEh | 20DFh | 20E0h | 20E1h | 20E2h | 20E3h |
08F0h | 20E4h | 20E5h | 20E6h | 20E7h | 20E8h | 20E9h | 20EAh | 20EBh |
08F8h | 20ECh | 20EDh | 20EEh | 20EFh | 20F0h | 20F1h | 20F2h | 20F3h |
0900h | 20F4h | 20F5h | 20F6h | 20F7h | 20F8h | 20F9h | 20FAh | 20FBh |
0908h | 20FCh | 20FDh | 20FEh | 20FFh | 2100h | 2101h | 2102h | 2103h |
0910h | 2104 h | 2105h | 21:06 | 2107 h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210 Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 2113h |
0920h | 2114h | 2115h | 2116h | 2117h | 2118h | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 21h20 | 2121h | 2122h | 2123h |
0930h | 2124 h | 2125h | 2126h | 2127h | 2128h | 2129h | 212Ah | 212Bh |
0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131h | 2132h | 2133h |
0940h | 2134h | 2135h | 2136h | 2137h | 2138h | 2139h | 213Ah | 213Bh |
0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
0950h | 2144h | 2145h | 2146h | 2147h | 2148h | 2149h | 214Ah | 214Bh |
0958h | 214Ch | 214Dh | 2132h | 214Fh | 21 h 50 | 2151h | 2152h | 2153h |
0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
0968h | 215 ch | 215 DH | 215Eh | 215Fh | 2160h | 2161h | 2162h | 2163h |
0970h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160h | 2161h | 2162h | 2163h |
0980h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 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 | 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 Entrée de répertoire d’étiquette de volume
L’étiquette de volume est une chaîne Unicode qui permet aux utilisateurs finaux de distinguer leurs volumes de stockage. Dans le système de fichiers exFAT, l’étiquette de volume existe en tant qu’entrée de répertoire principal critique dans le répertoire racine (voir Tableau 26). Le nombre valide d’entrées de répertoire d’étiquette de volume est compris entre 0 et 1.
Tableau 26 Structure de l'entrée de répertoire d'étiquette de volume
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 7.3.1 définit son contenu. |
CompteCaractères | 1 | 1 | Ce champ est obligatoire et section 7.3.2 définit son contenu. |
Étiquette de volume | 2 | 22 | Ce champ est obligatoire et section 7.3.3 définit son contenu. |
Réservé | Vingt-quatre | 8 | Ce champ est obligatoire et son contenu est réservé. |
Champ EntryType 7.3.1
Le champ EntryType doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1).
7.3.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.1).
Pour l’entrée de répertoire d’étiquette de volume, la valeur valide de ce champ est 3.
7.3.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.2).
Pour l’entrée de répertoire d’étiquette de volume, la valeur valide de ce champ est 0.
7.3.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.3).
7.3.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.4).
7.3.2 Champ CharacterCount
Le champ CharacterCount doit contenir la longueur de la chaîne Unicode que contient le champ VolumeLabel.
La plage de valeurs valide pour ce champ doit être :
- Au moins 0, ce qui signifie que la chaîne Unicode est de 0 caractères longs (qui est l’équivalent d’aucune étiquette de volume)
- Au maximum 11, ce qui signifie que la chaîne Unicode est de 11 caractères
7.3.3 Champ VolumeLabel
Le champ VolumeLabel doit contenir une chaîne Unicode, qui est le nom convivial du volume. Le champ VolumeLabel a le même jeu de caractères non valides que le champ FileName de l’entrée de répertoire Nom de fichier (voir Section 7.7.3).
Entrée du répertoire de fichiers 7.4
Les entrées de répertoire de fichiers décrivent les fichiers et les répertoires. Il s’agit d’entrées de répertoire principal critiques et n’importe quel répertoire peut contenir zéro ou plusieurs entrées de répertoire de fichiers (voir Tableau 27). Pour qu’une entrée de répertoire de fichiers soit valide, exactement une entrée de répertoire Stream Extension et au moins une entrée de répertoire de nom de fichier doit suivre immédiatement l’entrée de répertoire de fichiers (voir section 7.6 et section 7.7, respectivement).
Tableau 27 Entrée de Répertoire de Fichier
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 7.4.1 définit son contenu. |
CompteSecondaire | 1 | 1 | Ce champ est obligatoire et section 7.4.2 définit son contenu. |
SetChecksum | 2 | 2 | Ce champ est obligatoire et section 7.4.3 définit son contenu. |
FileAttributes | 4 | 2 | Ce champ est obligatoire et section 7.4.4 définit son contenu. |
Réservé1 | 6 | 2 | Ce champ est obligatoire et son contenu est réservé. |
CreateTimestamp | 8 | 4 | Ce champ est obligatoire et section 7.4.5 définit son contenu. |
LastModifiedTimestamp | 12 | 4 | Ce champ est obligatoire et section 7.4.6 définit son contenu. |
LastAccessedTimestamp | 16 | 4 | Ce champ est obligatoire et section 7.4.7 définit son contenu. |
CréerIncrémentDe10ms | 20 | 1 | Ce champ est obligatoire et section 7.4.5 définit son contenu. |
DernièreModificationIncrément10ms | Vingt-et-un | 1 | Ce champ est obligatoire et section 7.4.6 définit son contenu. |
CreateUtcOffset | 22 | 1 | Ce champ est obligatoire et section 7.4.5 définit son contenu. |
DernièreModificationDécalageUTC | 23 | 1 | Ce champ est obligatoire et section 7.4.6 définit son contenu. |
DécalageDernierAccèsUtc | Vingt-quatre | 1 | Ce champ est obligatoire et section 7.4.7 définit son contenu. |
Réservé2 | 25 | 7 | Ce champ est obligatoire et son contenu est réservé. |
Champ EntryType 7.4.1
Le champ EntryType doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1).
7.4.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.1).
Pour une entrée de répertoire de fichiers, la valeur valide de ce champ est 5.
7.4.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.2).
Pour une entrée de répertoire de fichiers, la valeur valide de ce champ est 0.
7.4.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.3).
7.4.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.4).
7.4.2 Champ SecondaryCount
Le champ SecondaryCount doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.2).
7.4.3 Champ SetChecksum
Le champ SetChecksum doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.3).
7.4.4 Champ FileAttributes
Le champ FileAttributes contient des indicateurs (voir Tableau 28).
Tableau 28 Structure de champ FileAttributes
nom de champ | offset (bit) |
taille (bits) |
commentaires |
---|---|---|---|
ReadOnly | 0 | 1 | Ce champ est obligatoire et est conforme à la définition MS-DOS. |
Caché | 1 | 1 | Ce champ est obligatoire et est conforme à la définition MS-DOS. |
Système | 2 | 1 | Ce champ est obligatoire et est conforme à la définition MS-DOS. |
Réservé1 | 3 | 1 | Ce champ est obligatoire et son contenu est réservé. |
Répertoire | 4 | 1 | Ce champ est obligatoire et est conforme à la définition MS-DOS. |
Archiver | 5 | 1 | Ce champ est obligatoire et est conforme à la définition MS-DOS. |
Réservé2 | 6 | 10 | Ce champ est obligatoire et son contenu est réservé. |
7.4.5 CreateTimestamp, Create10msIncrement et Champs CreateUtcOffset
En combinaison, les champs CreateTimestamp et CreateTime10msIncrement décrivent la date et l’heure locales de création du fichier/répertoire donné. Le champ CreateUtcOffset décrit le décalage de la date et de l’heure locales à partir de l’heure UTC. Les implémentations définissent ces champs lors de la création du jeu d’entrées d’annuaire donné.
Ces champs sont conformes aux définitions des champs Timestamp, 10msIncrement et UtcOffset (voir Section 7.4.8, Section 7.4.9et Section 7.4.4.10, respectivement).
7.4.6 Champs LastModifiedTimestamp, LastModified10msIncrement et LastModifiedUtcOffset
En combinaison, les champs LastModifiedTimestamp et LastModifiedTime10msIncrement décrivent la date et l’heure locales de la dernière modification du contenu des clusters associés à l’entrée de répertoire Stream Extension donnée. Le champ LastModifiedUtcOffset décrit le décalage de date et d’heure locales à partir de l’heure UTC. Les implémentations doivent mettre à jour ces champs :
- Après avoir modifié le contenu de l’un des clusters associés à l’entrée de répertoire stream donnée (à l’exception du contenu qui existe au-delà du point décrit le champ ValidDataLength)
- Lors de la modification des valeurs des champs ValidDataLength ou DataLength
Ces champs sont conformes aux définitions des champs Timestamp, 10msIncrement et UtcOffset (voir Section 7.4.8, Section 7.4.9et Section 7.4.4.10, respectivement).
7.4.7 Champs LastAccessedTimestamp et LastAccessedUtcOffset
Le champ LastAccessedTimestamp décrit la date et l’heure locales auxquelles le contenu des clusters associés à l’entrée de répertoire Stream Extension donnée a été accédé en dernier. Le champ LastAccessedUtcOffset décrit le décalage de la date et de l’heure locales à partir de l’heure UTC. Les implémentations doivent mettre à jour ces champs :
- Après avoir modifié le contenu de l’un des clusters associés à l’entrée de répertoire Stream Extension donnée (à l’exception du contenu qui existe au-delà de ValidDataLength)
- Lors de la modification des valeurs des champs ValidDataLength ou DataLength
Les implémentations doivent mettre à jour ces champs après avoir lu le contenu de l’un des clusters associés à l’entrée de répertoire Stream Extension donnée.
Ces champs doivent être conformes aux définitions des champs Timestamp et UtcOffset (voir section 7.4.8 et section 7.4.10, respectivement).
7.4.8 Champs d’horodatage
Les champs d’horodatage décrivent à la fois la date et l’heure locales, jusqu’à une résolution à deux secondes (voir Tableau 29).
Tableau 29 Structure du champ Timestamp
nom de champ | offset (bit) |
taille (bits) |
commentaires |
---|---|---|---|
DoubleSecondes | 0 | 5 | Ce champ est obligatoire et section 7.4.8.1 définit son contenu. |
Minute | 5 | 6 | Ce champ est obligatoire et section 7.4.8.2 définit son contenu. |
Heure | 11 | 5 | Ce champ est obligatoire et section 7.4.8.3 définit son contenu. |
Jour | 16 | 5 | Ce champ est obligatoire et section 7.4.8.4 définit son contenu. |
Mois | Vingt-et-un | 4 | Ce champ est obligatoire et section 7.4.8.5 définit son contenu. |
Année | 25 | 7 | Ce champ est obligatoire et section 7.4.8.6 définit son contenu. |
7.4.8.1 Champ DoubleSecondes
Le champ DoubleSeconds décrit la partie secondes du champ Timestamp, en deux secondes multiples.
La plage de valeurs valide pour ce champ doit être :
- 0, qui représente 0 secondes
- 29, qui représente 58 secondes
7.4.8.2 Champ minute
Le champ Minute décrit la partie minutes du champ Timestamp.
La plage de valeurs valide pour ce champ doit être :
- 0, qui représente 0 minutes
- 59, qui représente 59 minutes
7.4.8.3 Champ d’heure
Le champ Heure décrit la partie heures du champ Timestamp.
La plage de valeurs valide pour ce champ doit être :
- 0, qui représente 00:00 heures
- 23, qui représente 23:00 heures
7.4.8.4 Champ jour
Le champ Jour décrit la partie jour du champ Timestamp.
La plage de valeurs valide pour ce champ doit être :
- 1, qui est le premier jour du mois donné
- Le dernier jour du mois donné (le mois donné définit le nombre de jours valides)
Champ mois 7.4.4.8.5
Le champ Mois décrit la partie mois du champ Timestamp.
La plage de valeurs valide pour ce champ doit être :
- Au moins 1, qui représente janvier
- Au plus 12, qui représente décembre
7.4.8.6 Champ d’année
Le champ Année décrit la partie année du champ Timestamp, par rapport à l’année 1980. Ce champ représente l’année 1980 avec la valeur 0 et l’année 2107 avec la valeur 127.
Toutes les valeurs possibles pour ce champ sont valides.
7.4.9 Champs 10msIncrement
Les champs 10msIncrement fournissent une résolution de temps supplémentaire à leurs champs Timestamp correspondants en multiples de dix millisecondes.
La plage de valeurs valide pour ces champs doit être :
- Au moins 0, qui représente 0 millisecondes
- Au plus 199, ce qui représente 1990 millisecondes
7.4.10 Champs UtcOffset
Les champs UtcOffset (voir Tableau 30) décrivent le décalage entre UTC et la date et l’heure locales, leurs champs Timestamp et 10msIncrement correspondants décrivent. Le décalage de l’heure UTC vers la date et l’heure locales comprend les effets des fuseaux horaires et d’autres ajustements de date-heure, tels que les changements d’heure d’été et d’été régionaux.
Tableau 30 Structure de champ UtcOffset
nom de champ | offset (bit) |
taille (bits) |
commentaires |
---|---|---|---|
OffsetFromUtc | 0 | 7 | Ce champ est obligatoire et section 7.4.10.1définit son contenu. |
OffsetValid | 7 | 1 | Ce champ est obligatoire et section 7.4.10.2 définit son contenu. |
7.4.10.1 OffsetFromUtc Field
Le champ OffsetFromUtc décrit le décalage par rapport à l’heure UTC de la date et de l’heure locales, les champs Timestamp et 10msIncrement associés contiennent. Ce champ décrit le décalage par rapport à l’heure UTC dans les intervalles de 15 minutes (voir le tableau 31).
Table 31 Signification des valeurs du champ OffsetFromUtc
valeur | équivalent décimal signé | Description |
---|---|---|
3Fh | 63 | La date et l’heure locales sont UTC + 15:45 |
3Eh | 62 | La date et l’heure locales sont UTC + 15:30 |
. . . |
. . . |
. . . |
01h | 1 | La date et l’heure locales sont UTC + 00:15 |
00h | 0 | La date et l’heure locales sont UTC |
7Fh | -1 | La date et l’heure locales sont UTC - 00:15 |
. . . |
. . . |
. . . |
41h | -63 | La date et l’heure locales sont UTC - 15:45 |
40h | -64 | La date et l’heure locales sont UTC – 16:00 |
Comme le indique le tableau ci-dessus, toutes les valeurs possibles pour ce champ sont valides. Toutefois, les implémentations doivent enregistrer uniquement la valeur 00h pour ce champ quand :
- La date et l’heure locales sont en fait identiques à UTC, auquel cas la valeur du champ OffsetValid doit être 1
- La date et l’heure locales ne sont pas connues, auquel cas la valeur du champ OffsetValid doit être 1 et les implémentations doivent considérer l’heure UTC comme étant la date et l’heure locales
- UTC n’est pas connu, auquel cas la valeur du champ OffsetValid doit être 0
Si le décalage de date et d’heure local de l’heure UTC ne doit pas être un multiple d’intervalles de 15 minutes, les implémentations enregistrent 00h dans le champ OffsetFromUtc et considèrent l’heure UTC comme étant la date et l’heure locales.
7.4.10.2 Champ OffsetValid
Le champ OffsetValid décrit si le contenu du champ OffsetFromUtc est valide ou non, comme suit :
0, ce qui signifie que le contenu du champ OffsetFromUtc n’est pas valide
et doit être de 00h
1, ce qui signifie que le contenu du champ OffsetFromUtc est valide
Les implémentations doivent uniquement définir ce champ sur la valeur 0 lorsque l’heure UTC n’est pas disponible pour calculer la valeur du champ OffsetFromUtc. Si ce champ contient la valeur 0, les implémentations traitent les champs Timestamp et 10msIncrement comme ayant le même décalage UTC que la date et l’heure locales actuelles.
Entrée de répertoire GUID du volume 7.5
L’entrée de répertoire GUID de volume contient un GUID qui permet aux implémentations de distinguer les volumes de manière unique et programmatique. Le GUID de volume existe en tant qu’entrée de répertoire principal bénin dans le répertoire racine (voir Tableau 32). Le nombre valide d’entrées de répertoire GUID de volume est compris entre 0 et 1.
Tableau 32 Volume GUID EntréeDeRépertoire
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 7.5.1 définit son contenu. |
CompteSecondaire | 1 | 1 | Ce champ est obligatoire et section 7.5.2 définit son contenu. |
SetChecksum | 2 | 2 | Ce champ est obligatoire et section 7.5.3 définit son contenu. |
DrapeauxGénérauxPrimaires | 4 | 2 | Ce champ est obligatoire et section 7.5.4 définit son contenu. |
VolumeGuid | 6 | 16 | Ce champ est obligatoire et section 7.5.5 définit son contenu. |
Réservé | 22 | 10 | Ce champ est obligatoire et son contenu est réservé. |
Champ EntryType 7.5.1
Le champ EntryType doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1).
7.5.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.1).
Pour l’entrée de répertoire GUID du volume, la valeur valide de ce champ est 0.
7.5.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.2).
Pour l’entrée de répertoire GUID de volume, la valeur valide de ce champ est 1.
7.5.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.3).
7.5.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.1.4).
7.5.2 Champ SecondaryCount
Le champ SecondaryCount doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.2).
Pour l’entrée de répertoire GUID du volume, la valeur valide de ce champ est 0.
7.5.3 Champ SetChecksum
Le champ SetChecksum doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.3).
7.5.4 Champ GeneralPrimaryFlags
Le champ GeneralPrimaryFlags doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.4) et définit le contenu du champ CustomDefined à réserver.
7.5.4.1 Champ AllocationPossible
Le champ AllocationPossible doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.4.1).
Pour l’entrée de répertoire GUID du volume, la valeur valide de ce champ est 0.
7.5.4.2 Champ NoFatChain
Le champ NoFatChain doit être conforme à la définition fournie dans le modèle Primary DirectoryEntry générique (voir section 6.3.4.2).
7.5.5 Champ VolumeGuid
Le champ VolumeGuid doit contenir un GUID qui identifie de manière unique le volume donné.
Toutes les valeurs possibles pour ce champ sont valides, à l’exception du GUID Null, qui est {00000000-0000-0000-0000-000000000000}.
Entrée de répertoire d’extension de flux 7.6
L’entrée du répertoire Stream Extension est une entrée de répertoire secondaire critique dans les jeux d’entrées de répertoire de fichiers (voir Tableau 33). Le nombre valide d’entrées de répertoire d’extension Stream dans un jeu d’entrées de répertoire de fichiers est 1. En outre, cette entrée de répertoire n’est valide que si elle suit immédiatement l’entrée de répertoire de fichier.
Tableau 33 Extension de flux Entrée de répertoire
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 7.6.1 définit son contenu. |
GeneralSecondaryFlags | 1 | 1 | Ce champ est obligatoire et section 7.6.2 définit son contenu. |
Réservé1 | 2 | 1 | Ce champ est obligatoire et son contenu est réservé. |
LongueurNom | 3 | 1 | Ce champ est obligatoire et section 7.6.3 définit son contenu. |
NameHash | 4 | 2 | Ce champ est obligatoire et section 7.6.4 définit son contenu. |
Réservé2 | 6 | 2 | Ce champ est obligatoire et son contenu est réservé. |
ValidDataLength | 8 | 8 | Ce champ est obligatoire et section 7.6.5 définit son contenu. |
Réservé3 | 16 | 4 | Ce champ est obligatoire et son contenu est réservé. |
FirstCluster | 20 | 4 | Ce champ est obligatoire et section 7.6.6 définit son contenu. |
LongueurDonnees | Vingt-quatre | 8 | Ce champ est obligatoire et section 7.6.7 définit son contenu. |
Champ EntryType 7.6.1
Le champ EntryType doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.1).
7.6.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.1.1).
Pour l’entrée de répertoire Stream Extension, la valeur valide de ce champ est 0.
7.6.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.2).
Pour l’entrée de répertoire Stream Extension, la valeur valide de ce champ est 0.
7.6.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.3).
7.6.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.4).
7.6.2 Champ GeneralSecondaryFlags
Le champ GeneralSecondaryFlags doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.2) et définit le contenu du champ CustomDefined à réserver.
7.6.2.1 Champ AllocationPossible
Le champ AllocationPossible doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.2.1).
Pour l’entrée de répertoire Stream Extension, la valeur valide de ce champ est 1.
7.6.2.2 Champ NoFatChain
Le champ NoFatChain doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.2.2).
7.6.3 Champ NameLength
Le champ NameLength doit contenir la longueur de la chaîne Unicode que les entrées de répertoire de nom de fichier suivantes (voir section 7.7) contiennent collectivement.
La plage de valeurs valide pour ce champ doit être :
- Au moins 1, qui est le nom de fichier le plus court possible
- Au plus 255, qui est le nom de fichier le plus long possible
La valeur du champ NameLength affecte également le nombre d’entrées du répertoire du nom de fichier (voir section 7.7).
7.6.4 Champ NameHash
Le champ NameHash doit contenir un hachage de 2 octets (voir Figure 4) du nom de fichier à casse up. Cela permet aux implémentations d’effectuer une comparaison rapide lors de la recherche d’un fichier par nom. Il est important de noter que NameHash fournit une vérification sûre d’une incompatibilité. Les implémentations vérifient toutes les correspondances NameHash avec une comparaison du nom de fichier up-cased.
Figure 4 de calcul 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 Champ ValidDataLength
Le champ ValidDataLength décrit jusqu’à quel point les données utilisateur du flux de données ont été écrites. Les implémentations mettent à jour ce champ au fur et à mesure qu’elles écrivent des données plus loin dans le flux de données. Sur le support de stockage, les données entre la longueur de données valide et la longueur des données du flux de données ne sont pas définies. Les implémentations retournent des zéros pour les opérations de lecture au-delà de la longueur des données valides.
Si l’entrée de répertoire de fichiers correspondante décrit un répertoire, la seule valeur valide pour ce champ est égale à la valeur du champ DataLength. Sinon, la plage de valeurs valides pour ce champ doit être :
- Au moins 0, ce qui signifie qu’aucune donnée utilisateur n’a été écrite dans le flux de données
- Au maximum DataLength, ce qui signifie que les données utilisateur ont été écrites sur toute la longueur du flux de données
7.6.6 Champ FirstCluster
Le champ FirstCluster doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.3).
Ce champ doit contenir l’index du premier cluster du flux de données, qui héberge les données utilisateur.
7.6.7 Champ DataLength
Le champ DataLength doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.4).
Si l’entrée de répertoire de fichiers correspondante décrit un répertoire, la valeur valide de ce champ est la taille entière de l’allocation associée, en octets, qui peut être 0. En outre, pour les répertoires, la valeur maximale de ce champ est de 256 Mo.
7.7 Entrée du répertoire du nom de fichier
Les entrées de répertoire de nom de fichier sont des entrées de répertoire secondaire critiques dans les jeux d’entrées de répertoire de fichiers (voir Tableau 34). Le nombre valide d’entrées de répertoire de nom de fichier dans un jeu d’entrées de répertoire de fichiers est NameLength / 15, arrondi à l’entier le plus proche. De plus, les entrées de répertoire de nom de fichier sont valides uniquement si elles suivent immédiatement l’entrée de répertoire Stream Extension sous forme de série consécutive. Les entrées de répertoire de nom de fichier se combinent pour former le nom de fichier du jeu d’entrées de répertoire de fichiers.
Tous les enfants d’une entrée de répertoire donnée auront des jeux d’entrées de répertoire de nom de fichier uniques. C’est-à-dire qu’il ne peut y avoir aucun nom de fichier ou de répertoire en double après la casse dans n’importe quel répertoire.
Table 34 Nom de fichier DirectoryEntry
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 7.7.1 définit son contenu. |
GeneralSecondaryFlags | 1 | 1 | Ce champ est obligatoire et section 7.7.2 définit son contenu. |
Fichier | 2 | 30 | Ce champ est obligatoire et section 7.7.3 définit son contenu. |
Champ EntryType 7.7.1
Le champ EntryType doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.1).
7.7.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.1.1).
Pour l’entrée du répertoire Nom de fichier, la valeur valide de ce champ est 1.
7.7.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.2).
Pour l’entrée du répertoire Nom de fichier, la valeur valide de ce champ est 0.
7.7.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.3).
7.7.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.4).
7.7.2 Champ GeneralSecondaryFlags
Le champ GeneralSecondaryFlags doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.2) et définit le contenu du champ CustomDefined à réserver.
7.7.2.1 Champ AllocationPossible
Le champ AllocationPossible doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.2.1).
Pour l’entrée du répertoire Nom de fichier, la valeur valide de ce champ est 0.
7.7.2.2 Champ NoFatChain
Le champ NoFatChain doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.2.2).
7.7.3 Champ FileName
Le champ FileName doit contenir une chaîne Unicode, qui est une partie du nom de fichier. Dans l’ordre dans lequel les entrées de répertoire de nom de fichier existent dans un jeu d’entrées de répertoire de fichiers, les champs FileName concatènent pour former le nom de fichier du jeu d’entrées de répertoire de fichiers. Étant donné la longueur du champ FileName, 15 caractères et le nombre maximal d’entrées du répertoire Nom de fichier, 17, la longueur maximale du nom de fichier final concaténé est 255.
Le nom de fichier concaténé a le même jeu de caractères non valides que d’autres systèmes de fichiers FAT (voir Tableau 35). Les implémentations doivent définir les caractères inutilisés des champs FileName sur la valeur 0000h.
Tableau 35 Caractères fileName non valides
code de caractères | Description | code de caractères | Description | code de caractères | Description |
---|---|---|---|---|---|
0000h | Code de contrôle | 0001h | Code de contrôle | 0002h | Code de contrôle |
0003h | Code de contrôle | 0004h | Code de contrôle | 0005h | Code de contrôle |
0006h | Code de contrôle | 0007h | Code de contrôle | 0008h | Code de contrôle |
0009h | Code de contrôle | 000Ah | Code de contrôle | 000Bh | Code de contrôle |
000Ch | Code de contrôle | 000Dh | Code de contrôle | 000Eh | Code de contrôle |
000Fh | Code de contrôle | 0010h | Code de contrôle | 0011h | Code de contrôle |
0012h | Code de contrôle | 0013h | Code de contrôle | 0014h | Code de contrôle |
0015h | Code de contrôle | 0016h | Code de contrôle | 0017h | Code de contrôle |
0018h | Code de contrôle | 0019h | Code de contrôle | 001Ah | Code de contrôle |
001Bh | Code de contrôle | 001Ch | Code de contrôle | 001Dh | Code de contrôle |
001Eh | Code de contrôle | 001Fh | Code de contrôle | 0022h | Guillemet |
002Ah | Astérisque | 002Fh | Barre oblique | 003Ah | Côlon |
003Ch | Signe inférieur à | 003Eh | Signe supérieur à | 003Fh | Point d’interrogation |
005Ch | Barre oblique inverse | 007Ch | Barre verticale |
Les noms de fichiers « » et « . ». ont respectivement la signification spéciale de « ce répertoire » et du « répertoire contenant ». Les implémentations ne doivent pas enregistrer l’un de ces noms de fichiers réservés dans le champ FileName. Toutefois, les implémentations peuvent générer ces deux noms de fichiers dans les listes de répertoires pour faire référence au répertoire répertorié et au répertoire conteneur.
Les implémentations peuvent souhaiter restreindre les noms de fichiers et de répertoires au jeu de caractères ASCII uniquement. Si tel est le cas, ils doivent limiter leur utilisation à la plage de caractères valides dans les 128 premières entrées Unicode. Ils doivent toujours stocker des noms de fichiers et de répertoires dans Unicode sur le volume et se traduire en/depuis ASCII/Unicode lors de l’interfaçage avec l’utilisateur.
7.8 Entrée d’annuaire de l’extension du fournisseur
L’entrée de répertoire de l’extension fournisseur est une entrée de répertoire secondaire bénigne dans les jeux d’entrées de répertoire de fichiers (voir Tableau 36). Un jeu d’entrées de répertoire de fichiers peut contenir n’importe quel nombre d’entrées de répertoire d’extension fournisseur, jusqu’à la limite des entrées de répertoire secondaire, moins le nombre d’autres entrées de répertoire secondaire. De plus, les entrées du répertoire d’extension fournisseur sont valides uniquement si elles ne précèdent pas les entrées d’extension de flux et de répertoire de nom de fichier requises.
Les entrées d’annuaire d’extension de fournisseur permettent aux fournisseurs d’avoir des entrées d’annuaire uniques spécifiques au fournisseur dans des jeux d’entrées de répertoire de fichiers individuels via le champ VendorGuid (voir Tableau 36). Les entrées de répertoire uniques permettent aux fournisseurs d’étendre efficacement le système de fichiers exFAT. Les fournisseurs peuvent définir le contenu du champ VendorDefined (voir Tableau 36). Les implémentations de fournisseurs peuvent conserver le contenu du champ VendorDefined et fournir des fonctionnalités spécifiques au fournisseur.
Les implémentations qui ne reconnaissent pas le GUID d’une entrée d’annuaire d’extension de fournisseur doivent traiter l’entrée d’annuaire de la même façon que toute autre entrée de répertoire secondaire non reconnue non reconnue (voir section 8.2).
Tableau 36 de l’extension fournisseur DirectoryEntry
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 7.8.1 définit son contenu. |
GeneralSecondaryFlags | 1 | 1 | Ce champ est obligatoire et section 7.8.2 définit son contenu. |
VendorGuid | 2 | 16 | Ce champ est obligatoire et section 7.8.3 définit son contenu. |
DéfiniParLeFournisseur | 18 | 14 | Ce champ est obligatoire et les fournisseurs peuvent définir son contenu. |
Champ EntryType 7.8.1
Le champ EntryType doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.1).
7.8.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.1.1).
Pour l’entrée de répertoire de l’extension fournisseur, la valeur valide de ce champ est 0.
7.8.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.2).
Pour l’entrée de répertoire de l’extension fournisseur, la valeur valide de ce champ est 1.
7.8.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.3).
7.8.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.4).
7.8.2 Champ GeneralSecondaryFlags
Le champ GeneralSecondaryFlags doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.2) et définit le contenu du champ CustomDefined à réserver.
7.8.2.1 Champ AllocationPossible
Le champ AllocationPossible doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.2.1).
Pour l’entrée de répertoire de l’extension fournisseur, la valeur valide de ce champ est 0.
7.8.2.2 Champ NoFatChain
Le champ NoFatChain doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.2.2).
7.8.3 Champ VendorGuid
Le champ VendorGuid doit contenir un GUID qui identifie de manière unique l’extension fournisseur donnée.
Toutes les valeurs possibles pour ce champ sont valides, à l’exception du GUID Null, qui est {00000000-0000-0000-0000-000000000000}. Toutefois, les fournisseurs doivent utiliser un outil de génération de GUID, tel que GuidGen.exe, pour sélectionner un GUID lors de la définition de leurs extensions.
La valeur de ce champ détermine la structure propre au fournisseur du champ VendorDefined.
7.9 Entrée d’annuaire d’allocation du fournisseur
L’entrée de répertoire d’allocation du fournisseur est une entrée de répertoire secondaire bénigne dans les jeux d’entrées de répertoire de fichiers (voir Tableau 37). Un jeu d’entrées de répertoire de fichiers peut contenir n’importe quel nombre d’entrées de répertoire d’allocation du fournisseur, jusqu’à la limite des entrées de répertoire secondaire, moins le nombre d’autres entrées de répertoire secondaire. En outre, les entrées de répertoire d’allocation de fournisseurs sont valides uniquement si elles ne précèdent pas les entrées d’extension de flux et de répertoire de nom de fichier requises.
Les entrées d’annuaire d’allocation de fournisseurs permettent aux fournisseurs d’avoir des entrées d’annuaire uniques spécifiques au fournisseur dans des jeux d’entrées de répertoire de fichiers individuels via le champ VendorGuid (voir Tableau 37). Les entrées de répertoire uniques permettent aux fournisseurs d’étendre efficacement le système de fichiers exFAT. Les fournisseurs peuvent définir le contenu des clusters associés, le cas échéant. Les implémentations de fournisseurs peuvent conserver le contenu des clusters associés, le cas échéant, et fournir des fonctionnalités spécifiques au fournisseur.
Les implémentations qui ne reconnaissent pas le GUID d’une entrée d’annuaire d’allocation du fournisseur doivent traiter l’entrée de répertoire de la même façon que toute autre entrée de répertoire secondaire non reconnue non reconnue (voir section 8.2).
Tableau 37 Allocation de fournisseurs DirectoryEntry
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Type d'entrée | 0 | 1 | Ce champ est obligatoire et section 7.9.1 définit son contenu. |
GeneralSecondaryFlags | 1 | 1 | Ce champ est obligatoire et section 7.9.2 définit son contenu. |
VendorGuid | 2 | 16 | Ce champ est obligatoire et section 7.9.3 définit son contenu. |
Défini par le fournisseur | 18 | 2 | Ce champ est obligatoire et les fournisseurs peuvent définir son contenu. |
FirstCluster | 20 | 4 | Ce champ est obligatoire et section 7.9.4 définit son contenu. |
LongueurDonnees | Vingt-quatre | 8 | Ce champ est obligatoire et section 7.9.5 définit son contenu. |
Champ EntryType 7.9.1
Le champ EntryType doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.1).
7.9.1.1 Champ TypeCode
Le champ TypeCode doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.1.1).
Pour l’entrée de répertoire d’allocation du fournisseur, la valeur valide de ce champ est 1.
7.9.1.2 Champ TypeImportance
Le champ TypeImportance doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.2).
Pour l’entrée de répertoire d’allocation du fournisseur, la valeur valide de ce champ est 1.
7.9.1.3 Champ TypeCategory
Le champ TypeCategory doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.3).
7.9.1.4 Champ InUse
Le champ InUse doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.1.4).
7.9.2 Champ GeneralSecondaryFlags
Le champ GeneralSecondaryFlags doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.2) et définit le contenu du champ CustomDefined à réserver.
7.9.2.1 Champ AllocationPossible
Le champ AllocationPossible doit être conforme à la définition fournie dans le modèle DirectoryEntry secondaire générique (voir section 6.4.2.1).
Pour l’entrée de répertoire d’allocation du fournisseur, la valeur valide de ce champ est 1.
7.9.2.2 Champ NoFatChain
Le champ NoFatChain doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.2.2).
7.9.3 Champ VendorGuid
Le champ VendorGuid doit contenir un GUID qui identifie de manière unique l’allocation de fournisseur donnée.
Toutes les valeurs possibles pour ce champ sont valides, à l’exception du GUID Null, qui est {00000000-0000-0000-0000-000000000000}. Toutefois, les fournisseurs doivent utiliser un outil de génération de GUID, tel que GuidGen.exe, pour sélectionner un GUID lors de la définition de leurs extensions.
La valeur de ce champ détermine la structure propre au fournisseur du contenu des clusters associés, le cas échéant.
7.9.4 Champ FirstCluster
Le champ FirstCluster doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.3).
7.9.5 Champ DataLength
Le champ DataLength doit être conforme à la définition fournie dans le modèle Generic Secondary DirectoryEntry (voir section 6.4.4).
7.10 Entrée de répertoire TexFAT Padding
Cette spécification, exFAT Revision 1.00 File System Basic Specification, ne définit pas l’entrée de répertoire TexFAT Padding. Toutefois, son code de type est 1 et son importance de type est 1. Les implémentations de cette spécification doivent traiter les entrées de répertoire TexFAT Padding identiques aux autres entrées de répertoire primaire non reconnues, les implémentations ne déplacent pas les entrées de répertoire padding TexFAT.
8 Notes d’implémentation
8.1 Ordre d’écriture recommandé
Les implémentations doivent s’assurer que le volume est aussi résilient que possible aux pannes d’alimentation et à d’autres défaillances inévitables. Lorsque vous créez des entrées d’annuaire ou modifiez des allocations de cluster, les implémentations doivent généralement suivre cet ordre d’écriture :
- Définir la valeur du champ VolumeDirty sur 1
- Mettez à jour le fat actif, si nécessaire
- Mettre à jour la bitmap d’allocation active
- Créer ou mettre à jour l’entrée d’annuaire, si nécessaire
- Effacez la valeur du champ VolumeDirty sur 0, si sa valeur antérieure à la première étape était 0
Lors de la suppression d’entrées d’annuaire ou de la libération des allocations de cluster, les implémentations doivent suivre cet ordre d’écriture :
- Définir la valeur du champ VolumeDirty sur 1
- Supprimer ou mettre à jour l’entrée de répertoire, si nécessaire
- Mettez à jour le fat actif, si nécessaire
- Mettre à jour la bitmap d’allocation active
- Effacez la valeur du champ VolumeDirty sur 0, si sa valeur antérieure à la première étape était 0
8.2 Implications des entrées d’annuaire non reconnues
Les futures spécifications exFAT du même numéro de révision majeur, 1 et numéro de révision mineure supérieur à 0, peuvent définir de nouvelles entrées primaires, secondaires critiques et secondaires mineures. Seules les spécifications exFAT d’un numéro de révision majeur plus élevé peuvent définir de nouvelles entrées de répertoire principal critiques. Les implémentations de cette spécification, exFAT Revision 1.00 File System Basic Specification, doivent être en mesure de monter et d’accéder à n’importe quel volume exFAT de la révision majeure numéro 1 et n’importe quel numéro de révision mineure. Cela présente les scénarios dans lesquels une implémentation peut rencontrer des entrées d’annuaire qu’elle ne reconnaît pas. Les éléments suivants décrivent les implications de ces scénarios :
La présence d’entrées de répertoire principal critiques non reconnues dans le répertoire racine rend le volume non valide. La présence d’une entrée de répertoire principal critique, à l’exception des entrées de répertoire de fichiers, dans n’importe quel répertoire non racine, rend le répertoire d’hébergement non valide.
Les implémentations ne modifient pas les entrées d’annuaire primaires non reconnues non reconnues ou leurs allocations de cluster associées. Toutefois, lors de la suppression d’un répertoire et uniquement lors de la suppression d’un répertoire, les implémentations suppriment les entrées d’annuaire primaires non reconnues et libèrent toutes les allocations de cluster associées, le cas échéant.
Les implémentations ne modifient pas les entrées de répertoire secondaire critique non reconnues ni leurs allocations de cluster associées. La présence d’une ou plusieurs entrées de répertoire secondaire critique non reconnues dans un jeu d’entrées d’annuaire affiche l’ensemble de l’ensemble d’entrées de répertoire non reconnu. Lors de la suppression d’un jeu d’entrées d’annuaire qui contient une ou plusieurs entrées de répertoire secondaire critique non reconnues, les implémentations libèrent toutes les allocations de cluster, le cas échéant, associées à des entrées de répertoire secondaire critiques non reconnues. En outre, si le jeu d’entrées d’annuaire décrit un répertoire, les implémentations peuvent :
- Parcourir dans le répertoire
- Énumérer les entrées de répertoire qu’elle contient
- Supprimer des entrées de répertoire autonome
- Déplacer des entrées de répertoire autonome vers un autre répertoire
Toutefois, les implémentations ne doivent pas :
- Modifier les entrées de répertoire autonome, à l’exception de la suppression, comme indiqué
- Créer des entrées de répertoire autonome
- Ouvrir des entrées de répertoire autonome, sauf parcourir et énumérer, comme indiqué
Les implémentations ne modifient pas les entrées d’annuaire secondaires non reconnues non reconnues ou leurs allocations de cluster associées. Les implémentations doivent ignorer les entrées de répertoire secondaire non reconnues non reconnues. Lors de la suppression d’un jeu d’entrées d’annuaire, les implémentations libèrent toutes les allocations de cluster, le cas échéant, associées à des entrées d’annuaire secondaires non reconnues.
9 Limites du système de fichiers
9.1 Limites de taille du secteur
Le champ BytesPerSectorShift définit les limites de taille du secteur inférieur et supérieur (qui prend la valeur limite inférieure : 512 octets ; limite supérieure : 4 096 octets).
9.2 Limites de taille de cluster
Le champ SectorsPerClusterShift définit les limites de taille de cluster inférieures et supérieures (limite inférieure : 1 secteur ; limite supérieure : 25 -- Secteurs BytesPerSectorShift, qui prend la valeur de 32 Mo).
9.3 Limites de taille de tas de cluster
Le tas de cluster doit contenir au moins suffisamment d’espace pour héberger les structures de système de fichiers de base suivantes : le répertoire racine, toutes les bitmaps d’allocation et la table de casse.
La limite de taille du tas de cluster inférieure est une fonction de la limite de taille inférieure de chacune des structures de système de fichiers de base qui résident dans le tas de cluster. Même en fonction du plus petit cluster possible (512 octets), chacune des structures de système de fichiers de base n’a pas besoin d’un seul cluster. Par conséquent, la limite inférieure est : 2 + Clusters NumberOfFats, qui prend la valeur de 3 ou 4 clusters, en fonction de la valeur du champ NumberOfFats.
La limite de taille du tas de cluster supérieure est une fonction simple du nombre maximal possible de clusters, que le champ ClusterCount définit (limite supérieure : 232- 11 clusters). Quelle que soit la taille du cluster, un tas de cluster a suffisamment d’espace pour héberger au moins les structures de système de fichiers de base.
9,4 Limites de taille du volume
Le champ VolumeLength définit les limites de taille de volume inférieure et supérieure (limite inférieure : 220/ 2BytesPerSectorShiftsecteurs, qui prend la valeur 1 Mo ; limite supérieure : 264- 1 secteur, ce qui, compte tenu de la plus grande taille possible du secteur, correspond à environ 64ZB). Toutefois, cette spécification recommande pas plus de 224- 2 clusters dans le tas de clusters (voir section 3.1.9). Par conséquent, la limite supérieure recommandée d’un volume est la suivante : ClusterHeapOffset + (2 24- 2) *2SectorsPerClusterShift. Étant donné la plus grande taille de cluster possible, 32 Mo et en supposant que ClusterHeapOffset est de 96 Mo (suffisamment d’espace pour les régions de démarrage principal et de sauvegarde et uniquement le premier fat), la limite supérieure recommandée d’un volume est évaluée à environ 512 To.
9.5 Limites de taille de répertoire
Le champ DataLength de l’entrée de répertoire Stream Extension définit les limites de taille de répertoire inférieure et supérieure (limite inférieure : 0 octets ; limite supérieure : 256 Mo). Cela signifie qu’un répertoire peut héberger jusqu’à 8 388 608 entrées d’annuaire (chaque entrée de répertoire consomme 32 octets). Étant donné le plus petit ensemble d’entrées de répertoire de fichiers possibles, trois entrées de répertoire peuvent héberger jusqu’à 2 796 202 fichiers.
10 Annexe
10.1 Identificateurs globaux uniques (GUID)
Un GUID est l’implémentation Microsoft d’un identificateur universel unique. Un GUID est une valeur 128 bits composée d’un groupe de 8 chiffres hexadécimaux, suivi de trois groupes de 4 chiffres hexadécimaux chacun, suivi d’un groupe de 12 chiffres hexadécimaux, par exemple {6B29FC40-CA47-1067-B31D-00DDD010662DA}, (voir Tableau 38).
structure GUID tableau 38
nom de champ | offset (octets) |
taille (octets) |
commentaires |
---|---|---|---|
Données1 | 0 | 4 | Ce champ est obligatoire et contient les quatre octets du premier groupe du GUID (6B29FC40h à partir de l’exemple). |
Data2 | 4 | 2 | Ce champ est obligatoire et contient les deux octets du deuxième groupe du GUID (CA47h à partir de l’exemple). |
Data3 | 6 | 2 | Ce champ est obligatoire et contient les deux octets du troisième groupe du GUID (1067h à partir de l’exemple). |
Data4[0] | 8 | 1 | Ce champ est obligatoire et contient l’octet le plus significatif du quatrième groupe du GUID (B3h de l’exemple). |
Data4[1] | 9 | 1 | Ce champ est obligatoire et contient l’octet le moins significatif du quatrième groupe du GUID (1Dh de l’exemple). |
Data4[2] | 10 | 1 | Ce champ est obligatoire et contient le premier octet du cinquième groupe du GUID (00h à partir de l’exemple). |
Data4[3] | 11 | 1 | Ce champ est obligatoire et contient le deuxième octet du cinquième groupe du GUID (DDh de l’exemple). |
Data4[4] | 12 | 1 | Ce champ est obligatoire et contient le troisième octet du cinquième groupe du GUID (01h à partir de l’exemple). |
Data4[5] | 13 | 1 | Ce champ est obligatoire et contient le quatrième octet du cinquième groupe du GUID (06h à partir de l’exemple). |
Data4[6] | 14 | 1 | Ce champ est obligatoire et contient le cinquième octet du cinquième groupe du GUID (62h à partir de l’exemple). |
Data4[7] | 15 | 1 | Ce champ est obligatoire et contient le sixième octet du cinquième groupe du GUID (DAh de l’exemple). |
10.2 Tables de partition
Pour garantir l’interopérabilité des volumes exFAT dans un large ensemble de scénarios d’utilisation, les implémentations doivent utiliser le type de partition 07h pour le stockage partitionné MBR et le GUID de partition {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} pour le stockage partitionné GPT.
11 Documentation - Historique des modifications
Le tableau 39 décrit l’historique des mises en production, des corrections, des ajouts, des suppressions et des clarifications de ce document.
Tableau 39 de l’historique des modifications de la documentation
Date | description des modifications |
---|---|
08-Jan-2008 | Première version de la spécification de base, qui inclut : Section 1, Introduction Section 2, Section 3, Régions de démarrage principales et de sauvegarde Section 4, Région de la table d’allocation de fichiers Section 5, Région de données Section 6, Structure de répertoires Section 7, Définitions d’entrée d’annuaire Section 8, Notes d’implémentation Section 9, Limites du système de fichiers Section 10, Annexe |
08-Juin-2008 | Deuxième version de la spécification de base, qui inclut les modifications suivantes : Ajout de l’article 11, Ajout des entrées d’annuaire d’extension de fournisseur et d’allocation de fournisseurs dans les sections 7.8 et 7.9 Ajout du tableau de cas d’utilisation recommandé dans les sections 7.2.5 et 7.2.5.1 Ajout des champs UtcOffset dans la section 7.4 et ajout de l’acronyme UTC dans la section 1.3 Correction de la taille du champ CustomDefined dans le tableau 19 Correction de la plage valide de valeurs NameLength dans la section 7.6.3 Correction et clarification des champs Timestamp et 10msIncrement dans la section 7.4 Clarification de la structure des paramètres Null dans la section 3.3 Clarification de la signification des valeurs du champ NoFatChain dans la section 6.3.4.2 Clarification de la signification des valeurs du champ DataLength dans la section 6.2.3 Clarification du champ VolumeDirty dans la section 3.1.13.2 et ordre d’écriture recommandé dans la section 8.1 Clarification du champ MediaFailure dans la section 3.1.13.3 |
01-Oct-2008 | Troisième version de la spécification de base, qui inclut les modifications suivantes : Ajout de SHALL, SHOULD et MAY à des explications de champ Ajout de la définition UTC dans la section 1.3 du tableau 2 Sections modifiées 1.5 pour garantir l’alignement avec le document de spécification TexFAT. Clarification de la restriction que seuls Microsoft peut définir la disposition des entrées d’annuaire dans la section 6.2 Ajout de clarifications indiquant que le champ FirstCluster doit être égal à zéro si DataLength est égal à zéro et NoFatChain est défini sur la section 6.3.5 et la section 6.4.3 Spécifications précises pour les entrées de répertoire de fichiers valides dans la section 7.4 Ajout de la condition requise pour les noms de fichiers et de répertoires uniques à la section 7.7 Ajout d’une note d’implémentation pour ASCII à la fin de la section 7.7.3 |
01-Jan-2009 | Quatrième version de la spécification de base, qui inclut les modifications suivantes : Suppression de références aux entrées du contrôle d’accès Windows CE Ajout d’une clarification à la section 7.2.5.1 pour exiger explicitement une table complète de casse |
02-Sep-2009 | Cinquième version de la spécification de base, qui inclut les modifications suivantes : Modifications de mise en forme des documents pour permettre une meilleure conversion PDF |
24-Février-2010 | Sixième version de la spécification de base, qui comprend les modifications suivantes : Instruction incorrecte modifiée : « FirstCluster Field doit être zéro si DataLength est égal à zéro et NoFatChain est défini » dans la section 6.3.5 et la section 6.4.3 sur « Si le bit NoFatChain est 1, FirstCluster doit pointer vers un cluster valide dans le tas de cluster » pour clarifier qu’il doit y avoir une allocation valide si le bit NoFatChain est défini. Ajout de « Si le bit NoFatChain est 1, DataLength ne doit pas être égal à zéro. Si le champ FirstCluster est égal à zéro, DataLength doit également être égal à la section 6.3.6 et à la section 6.4.4 pour clarifier qu’il doit y avoir une allocation valide si le bit NoFatChain est défini. Avis de copyright mis à jour vers 2010 |
26-août-2019 | Septième version de la spécification de base, qui inclut les modifications suivantes : Mise à jour des termes juridiques relatifs à la spécification, notamment : Suppression d’une notification confidentielle Microsoft Suppression de la section Contrat de licence de documentation technique microsoft Corporation Avis de copyright mis à jour vers 2019 |