exFAT-Dateisystemspezifikation
1 Einführung
Das exFAT-Dateisystem ist der Nachfolger von FAT32 in der FAT-Dateisystemfamilie. Diese Spezifikation beschreibt das exFAT-Dateisystem und stellt alle Informationen bereit, die für die Implementierung des exFAT-Dateisystems erforderlich sind.
1.1 Entwurfsziele
Das exFAT-Dateisystem hat drei zentrale Entwurfsziele (siehe Liste unten).
Behalten Sie die Einfachheit fat-basierter Dateisysteme bei.
Zwei der Stärken von FAT-basierten Dateisystemen sind ihre relative Einfachheit und einfache Implementierung. Im Rahmen seiner Vorgänger sollten Implementierer exFAT relativ einfach und einfach zu implementieren finden.
Aktivieren sie sehr große Dateien und Speichergeräte.
Das exFAT-Dateisystem verwendet 64 Bits, um die Dateigröße zu beschreiben, wodurch Anwendungen ermöglicht werden, die von sehr großen Dateien abhängen. Das exFAT-Dateisystem ermöglicht auch Cluster mit einer Breite von bis zu 32 MB, sodass sehr große Speichergeräte effektiv aktiviert werden können.
Integrieren Sie Erweiterbarkeit für zukünftige Innovationen.
Das exFAT-Dateisystem integriert Erweiterbarkeit in seinen Entwurf, sodass das Dateisystem mit Innovationen bei der Speicherung und Nutzungsänderungen Schritt halten kann.
1.2 Spezifische Terminologie
Im Kontext dieser Spezifikation haben bestimmte Begriffe (siehe Tabelle 1)eine spezifische Bedeutung für den Entwurf und die Implementierung des exFAT-Dateisystems.
Tabelle 1 Definition von Begriffen, die eine sehr spezifische Bedeutung haben
| Begriff | Definition |
|---|---|
| Soll | In dieser Spezifikation wird der Begriff "soll" verwendet, um ein erforderliches Verhalten zu beschreiben. |
| Optional | In dieser Spezifikation wird der Begriff "should" verwendet, um ein Verhalten zu beschreiben, das dringend empfohlen wird, aber nicht obligatorisch ist. |
| May | In dieser Spezifikation wird der Begriff "may" verwendet, um ein optionales Verhalten zu beschreiben. |
| Obligatorisch. | Dieser Begriff beschreibt ein Feld oder eine Struktur, das bzw. die eine Implementierung ändern soll und wie in dieser Spezifikation beschrieben interpretiert werden soll. |
| Optional | Dieser Begriff beschreibt ein Feld oder eine Struktur, die von einer Implementierung unterstützt werden kann oder nicht. Wenn eine Implementierung ein bestimmtes optionales Feld oder eine bestimmte Struktur unterstützt, muss sie das Feld oder die Struktur wie in dieser Spezifikation beschrieben ändern und interpretieren. |
| Nicht definiert | Dieser Begriff beschreibt feld- oder strukturbezogene Inhalte, die eine Implementierung bei Bedarf ändern kann (d. h. beim Festlegen von umgebenden Feldern oder Strukturen von klar zu null), und darf nicht interpretieren, um eine bestimmte Bedeutung zu haben. |
| Reserviert | Dieser Begriff beschreibt Feld- oder Strukturinhalte, die Implementierungen:
|
1.3 Volltext allgemeiner Akronyme
In dieser Spezifikation werden Akronyme verwendet, die in der Personalcomputerbranche häufig verwendet werden (siehe Tabelle 2).
Tabelle 2: Vollständiger Text allgemeiner Akronyme
| Akronym | Volltext |
|---|---|
| ASCII | American Standard Code for Information Interchange |
| BIOS | Grundlegendes Eingabeausgabesystem |
| CPU | Zentrale Verarbeitungseinheit |
| exFAT | Erweiterbare Dateizuordnungstabelle |
| FAT | Dateizuordnungstabelle |
| FAT12 | Dateizuordnungstabelle, 12-Bit-Clusterindizes |
| FAT16 | Dateizuordnungstabelle, 16-Bit-Clusterindizes |
| FAT32 | Dateizuordnungstabelle, 32-Bit-Clusterindizes |
| GPT | GUID-Partitionstabelle |
| GUID | Global eindeutiger Bezeichner (siehe Abschnitt 10.1) |
| INT | Interrupt |
| MBR | Master Boot Record |
| texFAT | Transaktionssicherer ExFAT |
| UTC | Koordinierte Weltzeit (UTC) |
1.4 Standardqualifizierer für Feld und Struktur
Felder und Strukturen in dieser Spezifikation verfügen über die folgenden Qualifizierer (siehe Liste unten), sofern in der Spezifikation nichts anderes angegeben ist.
Sind nicht signiert
Verwenden Sie die Dezimalschreibweise, um Werte zu beschreiben, sofern nicht anders angegeben. In dieser Spezifikation wird der Postfixbuchstabe "h" verwendet, um Hexadezimalzahlen zu kennzeichnen, und GUIDs werden in geschweifte Klammern eingeschlossen.
Im Little-Endian-Format
Kein Zeichen mit NULL-Terminierung für Zeichenfolgen erforderlich
1.5 Windows CE und TexFAT
TexFAT ist eine Erweiterung für exFAT, die transaktionssichere Betriebssemantik über dem Basisdateisystem hinzufügt. TexFAT wird von Windows CE verwendet. TexFAT erfordert die Verwendung der beiden FATs und Zuordnungsbitmaps für die Verwendung in Transaktionen. Außerdem werden mehrere zusätzliche Strukturen definiert, einschließlich Auffüllungsdeskriptoren und Sicherheitsdeskriptoren.
2 Volumestruktur
Ein Volume ist der Satz aller Dateisystemstrukturen und des Datenspeichers, die zum Speichern und Abrufen von Benutzerdaten erforderlich sind. Alle exFAT-Volumes enthalten vier Regionen (siehe Tabelle 3).
Volumestruktur in Tabelle 3
| Name der Unterregion | Offset (Sektor) |
Größe (Sektoren) |
Kommentare |
|---|---|---|---|
| Hauptstartregion | |||
| Hauptstartbranche | 0 | 1 | Diese Unterregion ist obligatorisch, und Abschnitt 3.1 definiert ihren Inhalt. |
| Hauptbranches für erweiterte Starte | 1 | 8 | Diese Unterregion ist obligatorisch, und Abschnitt 3.2) definiert ihren Inhalt. |
| OEM-Hauptparameter | 9 | 1 | Diese Unterregion ist obligatorisch, und Abschnitt 3.3 definiert ihren Inhalt. |
| Reservierter Hauptteil | 10 | 1 | Diese Unterregion ist obligatorisch, und ihr Inhalt ist reserviert. |
| Hauptstartprüfsumme | 11 | 1 | Diese Unterregion ist obligatorisch, und Abschnitt 3.4 definiert ihren Inhalt. |
| Region für den Sicherungsstart | |||
| Sicherungsstart-Sektor | 12 | 1 | Diese Unterregion ist obligatorisch, und Abschnitt 3.1 definiert ihren Inhalt. |
| Sichern erweiterter Startbranches | 13 | 8 | Diese Unterregion ist obligatorisch, und Abschnitt 3.2 definiert ihren Inhalt. |
| OEM-Parameter sichern | 21 | 1 | Diese Unterregion ist obligatorisch, und Abschnitt 3.3 definiert ihren Inhalt. |
| Reservierte Sicherung | 22 | 1 | Diese Unterregion ist obligatorisch, und ihr Inhalt ist reserviert. |
| Sicherungsstartprüfsumme | 23 | 1 | Diese Unterregion ist obligatorisch, und Abschnitt 3.4 definiert ihren Inhalt. |
| FAT-Region | |||
| FAT-Ausrichtung | 24 | FatOffset – 24 | Diese Unterregion ist obligatorisch, und ihre Inhalte sind ggf. nicht definiert. Hinweis: Der Haupt- und der Sicherungsstartsektor enthalten beide das Feld FatOffset. |
| Erstes FAT | FatOffset | FatLength | Diese Unterregion ist obligatorisch, und Abschnitt 4.1 definiert ihren Inhalt. Hinweis: Der Haupt- und der Sicherungsstartsektor enthalten beide die Felder FatOffset und FatLength. |
| Zweites FAT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | Diese Unterregion ist obligatorisch, und Abschnitt 4.1 definiert ggf. ihren Inhalt. Hinweis: Die Felder Haupt- und Sicherungsstartsektor enthalten die Felder FatOffset, FatLength und NumberOfFats. Das Feld NumberOfFats darf nur die Werte 1 und 2 enthalten. |
| Datenbereich | |||
| Clusterheapausrichtung | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | Diese Unterregion ist obligatorisch, und ihre Inhalte sind ggf. nicht definiert. Hinweis: Der Haupt- und der Sicherungsstartsektor enthalten beide die Felder FatOffset, FatLength, NumberOfFats und ClusterHeapOffset. Die gültigen Werte des Felds NumberOfFats sind 1 und 2. |
| Clusterheap | ClusterHeapOffset | ClusterCount * 2SectorsPerClusterShift | Diese Unterregion ist obligatorisch, und Abschnitt 5.1 definiert ihren Inhalt. Hinweis: Die Felder Haupt- und Sicherungsstartsektoren enthalten die Felder ClusterHeapOffset, ClusterCount und SectorsPerClusterShift. |
| Übermäßiger Speicherplatz | ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift) | Diese Unterregion ist obligatorisch, und ihre Inhalte sind ggf. nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten die Felder ClusterHeapOffset, ClusterCount, SectorsPerClusterShift und VolumeLength. |
3 Haupt- und Sicherungsstartregionen
Die Hauptstartregion enthält alle erforderlichen Startanweisungen, Informationen zur Identifizierung und Dateisystemparameter, damit eine Implementierung Folgendes ausführen kann:
Starten Sie ein Computersystem von einem exFAT-Volume.
Identifizieren Sie das Dateisystem auf dem Volume als exFAT.
Ermitteln Sie den Speicherort der ExFAT-Dateisystemstrukturen.
Die Region "Sicherungsstart" ist eine Sicherung der Hauptstartregion. Sie unterstützt die Wiederherstellung des exFAT-Volumes, wenn sich die Hauptstartregion in einem inkonsistenten Zustand befindet. Außer unter seltenen Umständen, z. B. beim Aktualisieren von Startanweisungen, sollten Implementierungen den Inhalt der Sicherungsstartregion nicht ändern.
3.1 Unterregionen des Haupt- und Sicherungsstartbranches
Der Hauptstartsektor enthält Code zum Starten von einem exFAT-Volume und grundlegende exFAT-Parameter, die die Volumestruktur beschreiben (siehe Tabelle 4). BIOS, MBR oder andere Bootumreifungs-Agents können diesen Sektor untersuchen und alle darin enthaltenen Startanweisungen laden und ausführen.
Der Sicherungsstart-Sektor ist eine Sicherung des Hauptstartbranches und weist die gleiche Struktur auf (siehe Tabelle 4). Der Sicherungsstart-Sektor kann Wiederherstellungsvorgänge unterstützen. Implementierungen müssen jedoch den Inhalt der Felder VolumeFlags und PercentInUse als veraltet behandeln.
Vor der Verwendung des Inhalts des Haupt- oder Sicherungsstartbranches müssen Implementierungen ihren Inhalt überprüfen, indem sie ihre jeweilige Startprüfsumme überprüfen und sicherstellen, dass sich alle felder innerhalb ihres gültigen Wertbereichs befinden.
Während der anfängliche Formatvorgang den Inhalt des Haupt- und des Sicherungsstartsektors initialisiert, können Implementierungen diese Sektoren nach Bedarf aktualisieren (und auch ihre jeweilige Startprüfsumme aktualisieren). Implementierungen können jedoch entweder die Felder VolumeFlags oder PercentInUse aktualisieren, ohne die jeweilige Startprüfsumme zu aktualisieren (die Prüfsumme schließt diese beiden Felder ausdrücklich aus).
Tabelle 4: Struktur des Haupt- und Sicherungsstartbranches
| Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
|---|---|---|---|
| JumpBoot | 0 | 3 | Dieses Feld ist obligatorisch, und Abschnitt 3.1.1 definiert seinen Inhalt. |
| FileSystemName | 3 | 8 | Dieses Feld ist obligatorisch, und Abschnitt 3.1.2 definiert seinen Inhalt. |
| MustBeZero | 11 | 53 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.3 wird der Inhalt definiert. |
| PartitionOffset | 64 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.4 wird der Inhalt definiert. |
| VolumeLength | 72 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.5 wird der Inhalt definiert. |
| FatOffset | 80 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.6 wird der Inhalt definiert. |
| FatLength | 84 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.7 wird der Inhalt definiert. |
| ClusterHeapOffset | 88 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.8 wird der Inhalt definiert. |
| ClusterCount | 92 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.9 wird der Inhalt definiert. |
| FirstClusterOfRootDirectory | 96 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.10 wird der Inhalt definiert. |
| VolumeSerialNumber | 100 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.11 wird der Inhalt definiert. |
| FileSystemRevision | 104 | 2 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.12 wird der Inhalt definiert. |
| VolumeFlags | 106 | 2 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.13 wird der Inhalt definiert. |
| BytesPerSectorShift | 108 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.14 wird der Inhalt definiert. |
| SectorsPerClusterShift | 109 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.15 wird der Inhalt definiert. |
| NumberOfFats | 110 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.16 wird der Inhalt definiert. |
| DriveSelect | 111 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.17 wird der Inhalt definiert. |
| PercentInUse | 112 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.18 wird der Inhalt definiert. |
| Reserviert | 113 | 7 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
| BootCode | 120 | 390 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.19 wird der Inhalt definiert. |
| BootSignature | 510 | 2 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.20 wird der Inhalt definiert. |
| ExcessSpace | 512 | 2BytesPerSectorShift – 512 | Dieses Feld ist obligatorisch, und sein Inhalt ist ( falls erforderlich) nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das Feld BytesPerSectorShift. |
3.1.1 JumpBoot-Feld
Das Feld JumpBoot muss die Sprunganweisung für CPUs enthalten, die auf PCs üblich sind, die bei der Ausführung die CPU "springen", um die Startverschnappungsanweisungen im Feld BootCode auszuführen.
Der gültige Wert für dieses Feld ist (in der Reihenfolge von low-order byte bis high-order byte) EBh 76h 90h.
3.1.2 FileSystemName-Feld
Das Feld FileSystemName muss den Namen des Dateisystems auf dem Volume enthalten.
Der gültige Wert für dieses Feld ist in ASCII-Zeichen "EXFAT", der drei nachstellende Leerzeichen enthält.
3.1.3 MustBeZero-Feld
Das MustBeZero-Feld muss direkt dem Bytebereich entsprechen, den der gepackte BIOS-Parameterblock auf FAT12/16/32-Volumes verbraucht.
Der gültige Wert für dieses Feld ist 0. Dadurch wird verhindert, dass FAT12/16/32-Implementierungen fälschlicherweise ein exFAT-Volume einbinden.
3.1.4 PartitionOffset-Feld
Das Feld PartitionOffset muss den medien relativen Sektoroffset der Partition beschreiben, die das gegebene ExFAT-Volume hostet. Dieses Feld unterstützt die Startverschnappung vom Volume mit erweiterter INT 13h auf PCs.
Alle möglichen Werte für dieses Feld sind gültig. Der Wert 0 gibt jedoch an, dass Implementierungen dieses Feld ignorieren sollen.
3.1.5 VolumeLength-Feld
Das VolumeLength-Feld muss die Größe des angegebenen exFAT-Volumes in Sektoren beschreiben.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
Mindestens 220/2BytesPerSectorShift,wodurch sichergestellt wird, dass das kleinste Volume nicht kleiner als 1 MB ist
Mindestens 264bis 1, der größte Wert, den dieses Feld beschreiben kann
Wenn die Größe des Unterbereichs "Übermäßiger Speicherplatz" jedoch 0 ist, ist der Wert dieses Felds ClusterHeapOffset + (232- 11) * 2SectorsPerClusterShift.
3.1.6 FatOffset-Feld
Das Feld FatOffset muss den volume-relativen Sektoroffset des ersten FAT beschreiben. Mit diesem Feld können Implementierungen first FAT an den Merkmalen der zugrunde liegenden Speichermedien ausrichten.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
Mindestens 24 für die Sektoren, die von den Hauptstart- und Sicherungsstartregionen verwendet werden
Mindestens ClusterHeapOffset ( FatLength NumberOfFats), das die Vom Clusterheap verbrauchten Sektoren * abspricht
3.1.7 FatLength-Feld
Das Feld FatLength muss die Länge jeder FAT-Tabelle in Sektoren beschreiben (das Volume kann bis zu zwei FATs enthalten).
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
Mindestens (ClusterCount + 2) * 22/2BytesPerSectorShiftauf die nächste ganze Zahl aufgerundet, wodurch sichergestellt wird, dass jedes FAT über ausreichend Speicherplatz zum Beschreiben aller Cluster im Clusterheap verfügt.
(ClusterHeapOffset – FatOffset) /NumberOfFats wird auf die nächste ganze Zahl aufgerundet, wodurch sichergestellt wird, dass die FATs vor dem Clusterheap vorhanden sind.
Dieses Feld kann einen Wert enthalten, der über die untere Grenze hinaus (wie oben beschrieben) liegt, damit der zweite FAT(sofern vorhanden) auch an den Merkmalen der zugrunde liegenden Speichermedien ausgerichtet werden kann. Der Inhalt des Speicherplatzes, der die von FAT selbst benötigten Inhalte überschreitet, ist nicht definiert.
3.1.8 ClusterHeapOffset-Feld
Das Feld ClusterHeapOffset muss den volume-relativen Sektoroffset des Clusterheaps beschreiben. Mit diesem Feld können Implementierungen den Cluster heap an den Merkmalen der zugrunde liegenden Speichermedien ausrichten.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
Mindestens FatOffset + FatLength NumberOfFats, um die Sektoren zu * berücksichtigen, die in allen vorherigen Regionen verbraucht werden
Mindestens 232– 1 oder VolumeLength – (ClusterCount * 2SectorsPerClusterShift), je nach berechnungs geringerer
3.1.9 ClusterCount-Feld
Das Feld ClusterCount muss die Anzahl der Cluster beschreiben, die der Cluster heap enthält.
Der gültige Wert für dieses Feld muss den kleineren der folgenden Werte haben:
(VolumeLength – ClusterHeapOffset) / 2SectorsPerClusterShiftwird auf die nächste ganze Zahl aufgerundet. Dies ist genau die Anzahl von Clustern, die zwischen dem Anfang des Clusterheaps und dem Ende des Volumes passen können.
232bis 11, die maximale Anzahl von Clustern, die von FAT beschrieben werden können
Der Wert des Felds ClusterCount bestimmt die Mindestgröße eines FAT. Um extrem große FATs zu vermeiden, können Implementierungen die Anzahl von Clustern im Clusterheap steuern, indem sie die Clustergröße erhöhen (über das Feld "SectorsPerClusterShift"). Diese Spezifikation empfiehlt nicht mehr als 224bis 2 Cluster im Cluster heap. Implementierungen müssen jedoch Volumes mit bis zu 232bis 11 Clustern im Cluster heap verarbeiten können.
3.1.10 FirstClusterOfRootDirectory-Feld
Das Feld FirstClusterOfRootDirectory muss den Clusterindex des ersten Clusters des Stammverzeichnisses enthalten. Implementierungen sollten alle Anstrengungen unternehmen, um den ersten Cluster des Stammverzeichnisses im ersten nicht fehlerhaften Cluster nach den Clustern zu platzieren, die von der Zuordnungsbitmap und der Up-Case-Tabelle verwendet werden.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
Mindestens 2: Der Index des ersten Clusters im Cluster heap
ClusterCount + 1 ist der Index des letzten Clusters im Cluster heap.
3.1.11 VolumeSerialNumber-Feld
Das Feld VolumeSerialNumber muss eine eindeutige Seriennummer enthalten. Dies unterstützt Implementierungen bei der Unterscheidung zwischen verschiedenen exFAT-Volumes. Implementierungen sollten die Seriennummer generieren, indem das Datum und die Uhrzeit der Formatierung des exFAT-Volumes kombiniert werden. Der Mechanismus zum Kombinieren von Datum und Uhrzeit zum Bilden einer Seriennummer ist implementierungsspezifisch.
Alle möglichen Werte für dieses Feld sind gültig.
3.1.12 FileSystemRevision-Feld
Das Feld FileSystemRevision muss die Haupt- und Nebenrevisionsnummern der exFAT-Strukturen auf dem angegebenen Volume beschreiben.
Das obere Byte ist die Hauptrevisionsnummer, und das niedrige Byte ist die kleinere Revisionsnummer. Wenn das obere Byte beispielsweise den Wert 01h enthält und das niedrige Byte den Wert 05h enthält, beschreibt das Feld FileSystemRevision die Revisionsnummer 1.05. Wenn das obere Byte den Wert 0Ah enthält und das niedrige Byte den Wert 0Fh enthält, beschreibt das Feld FileSystemRevision die Revisionsnummer 10.15.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
Mindestens 0 für das niedrige Byte und 1 für das hohe Byte
Mindestens 99 für das niedrige Byte und 99 für das obere Byte
Die Revisionsnummer von exFAT, die in dieser Spezifikation beschrieben wird, ist 1,00. Implementierungen dieser Spezifikation sollten ein beliebiges exFAT-Volume mit der Hauptrevisionsnummer 1 und kein exFAT-Volume mit einer anderen hauptrevisionsnummer ein mounten. Implementierungen müssen die kleinere Revisionsnummer erfüllen und dürfen keine Vorgänge ausführen oder Dateisystemstrukturen erstellen, die nicht in der entsprechenden Spezifikation der angegebenen nebenrevisionsnummer beschrieben sind.
3.1.13 VolumeFlags-Feld
Das VolumeFlags-Feld muss Flags enthalten, die den Status verschiedener Dateisystemstrukturen auf dem exFAT-Volume angeben (siehe Tabelle 5).
Implementierungen dürfen dieses Feld nicht enthalten, wenn die jeweilige Hauptstart- oder Sicherungsstartbereichs-Prüfsumme abrechnt. Beim Verweis auf den Sicherungsstartsektor müssen Implementierungen dieses Feld als veraltet behandeln.
Tabelle 5: VolumeFlags-Feldstruktur
| Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
|---|---|---|---|
| ActiveFat | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.13.1 wird der Inhalt definiert. |
| VolumeDirty | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.13.2 wird der Inhalt definiert. |
| MediaFailure | 2 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.13.3 wird der Inhalt definiert. |
| ClearToZero | 3 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.13.4 wird der Inhalt definiert. |
| Reserviert | 4 | 12 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
3.1.13.1 ActiveFat-Feld
Das Feld ActiveFat muss beschreiben, welche FAT- und Zuordnungsbitmap aktiv sind (und Implementierungen verwenden sollen) wie folgt:
0 bedeutet, dass die erste FAT- und die erste Zuordnungsbitmap aktiv sind.
1 bedeutet, dass die zweite FAT- und zweite Zuordnungsbitmap aktiv ist und nur möglich ist, wenn das NumberOfFats-Feld den Wert 2 enthält.
Implementierungen sollten die inaktive FAT- und Allocation Bitmap als veraltet betrachten. Nur TexFAT-orientierte Implementierungen dürfen die aktiven FAT- und Allocation Bitmaps wechseln (siehe Abschnitt 7.1).
3.1.13.2 VolumeDirty-Feld
Im Feld VolumeDirty muss wie folgt beschrieben werden, ob das Volume "dirty" ist oder nicht:
0, was bedeutet, dass sich das Volume wahrscheinlich in einem konsistenten Zustand befindet.
1, was bedeutet, dass sich das Volume wahrscheinlich in einem inkonsistenten Zustand befindet.
Implementierungen sollten den Wert dieses Felds auf 1 festlegen, wenn Inkonsistenzen von Dateisystemmetadaten auftreten, die sie nicht auflösen. Wenn beim Einbinden eines Volumes der Wert dieses Felds 1 ist, können nur Implementierungen, die Inkonsistenzen von Dateisystemmetadaten auflösen, den Wert dieses Felds auf 0 (0) löschen. Solche Implementierungen dürfen den Wert dieses Felds nur auf 0 löschen, nachdem sichergestellt wurde, dass sich das Dateisystem in einem konsistenten Zustand befindet.
Wenn beim Einbinden eines Volumes der Wert dieses Felds 0 ist, sollten Implementierungen dieses Feld auf 1 festlegen, bevor dateisystemmetadaten aktualisiert werden, und dieses Feld anschließend auf 0 löschen, ähnlich der empfohlenen Schreib reihenfolge, die in Abschnitt 8.1 beschrieben wird.
3.1.13.3 MediaFailure-Feld
Im Feld MediaFailure muss wie folgt beschrieben werden, ob bei einer Implementierung Medienfehler festgestellt wurden:
0, was bedeutet, dass das Hostmedium keine Fehler gemeldet hat oder bekannte Fehler bereits im FAT als "schlechte" Cluster aufgezeichnet wurden.
-
- Das bedeutet, dass das Hostmedium Fehler gemeldet hat (d. h. fehlgeschlagene Lese- oder Schreibvorgänge auft hat).
Eine Implementierung sollte dieses Feld auf 1 festlegen, wenn:
Das Hostingmedium schlägt bei Zugriffsversuchen auf eine beliebige Region auf dem Volume fehl.
Die Implementierung hat die Wiederholungsalgorithmen für den Zugriff erschöpft, falls vorhanden.
Wenn beim Einbinden eines Volumes der Wert dieses Felds 1 ist, können Implementierungen, die das gesamte Volume auf Medienfehler überprüfen und alle Fehler als "ungültige" Cluster im FAT aufzeichnen (oder medienfehler anderweitig beheben), den Wert dieses Felds auf 0 setzen.
3.1.13.4 ClearToZero-Feld
Das Feld ClearToZero hat in dieser Spezifikation keine signifikante Bedeutung.
Die gültigen Werte für dieses Feld sind:
0, das keine besondere Bedeutung hat
1 bedeutet, dass Implementierungen dieses Feld vor dem Ändern von Dateisystemstrukturen, -verzeichnissen oder -dateien auf 0 löschen müssen.
3.1.14 BytesPerSectorShift-Feld
Das Feld BytesPerSectorShift muss die Bytes pro Sektor beschreiben, ausgedrückt als Protokoll2(N), wobei N die Anzahl der Bytes pro Sektor ist. Für 512 Bytes pro Sektor ist der Wert dieses Felds beispielsweise 9.
Der gültige Wertebereich für dieses Feld muss:
Mindestens 9 (Sektorgröße 512 Byte), dies ist der kleinstmögliche Sektor für ein exFAT-Volume.
Höchstens 12 (Sektorgröße von 4.096 Byte), was der Arbeitsspeicherseitengröße von CPUs entspricht, die auf PCs üblich sind.
3.1.15 SectorsPerClusterShift Field
Das Feld "SectorsPerClusterShift" beschreibt die Sektoren pro Cluster, ausgedrückt als Protokoll2(N), wobei N für die Anzahl der Sektoren pro Cluster steht. Für 8 Sektoren pro Cluster ist der Wert dieses Felds beispielsweise 3.
Der gültige Wertebereich für dieses Feld muss:
Mindestens 0 (1 Sektor pro Cluster), der kleinstmögliche Cluster
Höchstens 25 : BytesPerSectorShift, das zu einer Clustergröße von 32 MB ausgewertet wird
3.1.16 NumberOfFats-Feld
Das Feld NumberOfFats muss die Anzahl der FATs und Zuordnungsbitmaps beschreiben, die das Volume enthält.
Der gültige Wertebereich für dieses Feld muss:
1, das angibt, dass das Volume nur das erste FAT und die erste Zuordnungsbitmap enthält.
2, das angibt, dass das Volume die erste FAT-, zweite FAT-, Erste Zuordnungsbitmap und zweite Zuordnungsbitmap enthält. Dieser Wert ist nur für TexFAT-Volumes gültig.
3.1.17 LaufwerkFeld auswählen
Das Feld DriveSelect muss die erweiterte INT 13h-Laufwerksnummer enthalten, die das Starten dieses Volumes mithilfe von erweitertem INT 13h auf PCs unterstützt.
Alle möglichen Werte für dieses Feld sind gültig. Ähnliche Felder in früheren FAT-basierten Dateisystemen enthielten häufig den Wert 80h.
3.1.18 PercentInUse-Feld
Das Feld PercentInUse muss den Prozentsatz der Cluster im Clusterheap beschreiben, die zugeordnet sind.
Der gültige Wertebereich für dieses Feld muss:
Zwischen 0 und 100 einschließlich, d. h. dem Prozentsatz der zugeordneten Cluster im Clusterheap, gerundet auf die nächste ganze Zahl
Genau FFh, was angibt, dass der Prozentsatz der zugeordneten Cluster im Clusterheap nicht verfügbar ist
Implementierungen müssen den Wert dieses Felds ändern, um Änderungen bei der Zuordnung von Clustern im Clusterheap widerzuspiegeln, oder sie müssen ihn in FFh ändern.
Implementierungen dürfen dieses Feld nicht enthalten, wenn sie die jeweilige Prüfsumme für den Hauptstart oder die Sicherungsstartregion berechnen. Beim Verweisen auf den Sicherungsstart-Sektor müssen Implementierungen dieses Feld als veraltet behandeln.
3.1.19 BootCode-Feld
Das Feld BootCode muss Anweisungen zum Starten enthalten. Implementierungen füllen dieses Feld möglicherweise mit den CPU-Anweisungen auf, die zum Starten eines Computersystems erforderlich sind. Implementierungen, die keine Startanleitungen bereitstellen, müssen jedes Byte in diesem Feld im Rahmen des Formatvorgangs mit F4h initialisieren (die Stoppanweisung für CPUs, die auf PCs üblich sind).
3.1.20 BootSignature-Feld
Das Feld BootSignature muss beschreiben, ob die Absicht eines bestimmten Sektor darin besteht, ein Boot-Sektor zu sein oder nicht.
Der gültige Wert für dieses Feld ist AA55h. Jeder andere Wert in diesem Feld macht den jeweiligen Startsektor ungültig. Implementierungen sollten den Inhalt dieses Felds vor je nach einem anderen Feld im jeweiligen Startsektor überprüfen.
3.2 Haupt- und Sicherungsregionen für erweiterte Startsektoren
Jeder Sektor der Hauptbranches für erweiterte Starte weist die gleiche Struktur auf. Jeder Sektor kann jedoch unterschiedliche Startanweisungen enthalten (siehe Tabelle 6). Bootumschnall-Agents, z. B. die Startanleitungen im Hauptstartsektor, alternative BIOS-Implementierungen oder die Firmware eines eingebetteten Systems, können diese Sektoren laden und die darin enthaltenen Anweisungen ausführen.
Der Erweiterte Startsektoren sichern ist eine Sicherung der Hauptbranches für erweiterte Starte und weist die gleiche Struktur auf (siehe Tabelle 6).
Vor der Ausführung der Anweisungen des Haupt- oder Sicherungsbranches für erweiterte Starte sollten Implementierungen ihren Inhalt überprüfen, indem sie sicherstellen, dass das Feld ExtendedBootSignature jedes Sektor seinen vorgeschriebenen Wert enthält.
Während der anfängliche Formatvorgang den Inhalt sowohl des Haupt- als auch des erweiterten Startsektors für Sicherungen initialisiert, können Implementierungen diese Sektoren nach Bedarf aktualisieren (und auch ihre jeweilige Startprüfsumme aktualisieren).
Tabelle 6: Struktur des erweiterten Startbranches
| Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
|---|---|---|---|
| ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | Dieses Feld ist obligatorisch, und Abschnitt 3.2.1 definiert seinen Inhalt. Hinweis: Sowohl der Haupt- als auch der Sicherungsstartsektor enthalten das Feld BytesPerSectorShift. |
| ExtendedBootSignature | 2BytesPerSectorShift – 4 | 4 | Dieses Feld ist obligatorisch, und Abschnitt 3.2.2 definiert seinen Inhalt. Hinweis: Sowohl der Haupt- als auch der Sicherungsstartsektor enthalten das Feld BytesPerSectorShift. |
3.2.1 Feld "ExtendedBootCode"
Das Feld ExtendedBootCode muss Anweisungen zum Starten enthalten. Implementierungen füllen dieses Feld möglicherweise mit den CPU-Anweisungen auf, die zum Starten eines Computersystems erforderlich sind. Implementierungen, die keine Startanweisungen bereitstellen, müssen jedes Byte in diesem Feld im Rahmen ihres Formatvorgangs mit 00h initialisieren.
3.2.2 Feld "ExtendedBootSignature"
Das Feld ExtendedBootSignature muss beschreiben, ob die Absicht eines bestimmten Sektor darin besteht, ein erweiterter Startsektor zu sein oder nicht.
Der gültige Wert für dieses Feld ist AA550000h. Jeder andere Wert in diesem Feld macht den jeweiligen Main- oder Backup Extended Boot Sector ungültig. Implementierungen sollten den Inhalt dieses Felds vor je nach einem anderen Feld im jeweiligen erweiterten Startbereich überprüfen.
3.3 Oem-Parameter-Unterregionen für Haupt- und Sicherungsdaten
Die Unterregion OEM-Hauptparameter enthält zehn Parameterstrukturen, die herstellerspezifische Informationen enthalten können (siehe Tabelle 7). Jede der zehn Parameterstrukturen wird von der Vorlage für generische Parameter abgeleitet (siehe Abschnitt 3.3.2). Hersteller können ihre eigenen benutzerdefinierten Parameterstrukturen aus der Vorlage generische Parameter ableiten. Diese Spezifikation selbst definiert zwei Parameterstrukturen: NULL-Parameter (siehe Abschnitt 3.3.3)und Flashparameter (siehe Abschnitt 3.3.4).
Die OEM-Sicherungsparameter sind eine Sicherung der OEM-Hauptparameter und haben die gleiche Struktur (siehe Tabelle 7).
Vor der Verwendung der Inhalte der OEM-Parameter Main oder Backup müssen Implementierungen ihren Inhalt überprüfen, indem sie ihre jeweilige Startprüfsumme überprüfen.
Hersteller sollten die OEM-Haupt- und Sicherungsparameter mit ihren eigenen benutzerdefinierten Parameterstrukturen (falls vorhanden) und beliebigen anderen Parameterstrukturen auffüllen. Bei nachfolgenden Formatvorgängen muss der Inhalt der OEM-Parameter Main und Backup beibehalten werden.
Implementierungen können die OEM-Haupt- und Sicherungsparameter nach Bedarf aktualisieren (und müssen auch ihre jeweilige Startprüfsumme aktualisieren).
Oem-Parameterstruktur in Tabelle 7
| Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
|---|---|---|---|
| Parameter[0] | 0 | 48 | Dieses Feld ist obligatorisch, und Abschnitt 3.3.1 definiert seinen Inhalt. |
. . . |
. . . |
. . . |
. . . |
| Parameter[9] | 432 | 48 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.1 wird der Inhalt definiert. |
| Reserviert | 480 | 2BytesPerSectorShift – 480 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das Feld BytesPerSectorShift. |
3.3.1 Parameter [ 0 ] ... Parameter [ 9]
Jedes Parameterfeld in diesem Array enthält eine Parameterstruktur, die von der Vorlage Generische Parameter (siehe Abschnitt 3.3.2) ableitung. Jedes nicht verwendete Parameterfeld muss so beschrieben werden, dass es eine NULL-Parameterstruktur enthält (siehe Abschnitt 3.3.3).
3.3.2 Vorlage für generische Parameter
Die Vorlage Generische Parameter stellt die Basisdefinition einer Parameterstruktur (siehe Tabelle 8) zur Alle Parameterstrukturen werden von dieser Vorlage ableiten. Die Unterstützung für diese Vorlage für generische Parameter ist obligatorisch.
Vorlage für generische Parameter in Tabelle 8
| Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
|---|---|---|---|
| ParametersGuid | 0 | 16 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.2.1 wird der Inhalt definiert. |
| CustomDefined | 16 | 32 | Dieses Feld ist obligatorisch, und die Strukturen, die von dieser Vorlage ableiten, definieren ihren Inhalt. |
3.3.2.1 ParametersGuid-Feld
Das Feld ParametersGuid muss eine GUID beschreiben, die das Layout des Rests der angegebenen Parameterstruktur bestimmt.
Alle möglichen Werte für dieses Feld sind gültig. Hersteller sollten jedoch ein GUID-generierende Tool wie GuidGen.exe verwenden, um eine GUID auszuwählen, wenn benutzerdefinierte Parameterstrukturen von dieser Vorlage ableiten werden.
3.3.3 NULL-Parameter
Die NULL-Parameterstruktur wird von der Vorlage Generische Parameter (siehe Abschnitt 3.3.2) und beschreibt ein nicht verwendetes Parameterfeld (siehe Tabelle 9). Beim Erstellen oder Aktualisieren der OEM-Parameterstruktur müssen Implementierungen nicht verwendete Parameterfelder mit der Struktur NULL-Parameter auffüllen. Außerdem sollten Implementierungen beim Erstellen oder Aktualisieren der OEM-Parameterstruktur NULL-Parameterstrukturen am Ende des Arrays konsolidieren, wodurch alle anderen Parameterstrukturen am Anfang der OEM-Parameterstruktur belässt werden.
Unterstützung für die Nullparameterstruktur ist obligatorisch.
Struktur von NULL-Parametern in Tabelle 9
| Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
|---|---|---|---|
| ParametersGuid | 0 | 16 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.3.1 wird der Inhalt definiert. |
| Reserviert | 16 | 32 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
3.3.3.1 ParametersGuid-Feld
Das Feld ParametersGuid muss der Definition entsprechen, die von der Vorlage generische Parameter bereitgestellt wird (siehe Abschnitt 3.3.2.1).
Der gültige Wert für dieses Feld in GUID-Notation ist {00000000-0000-0000-0000-000000000000} .
3.3.4 Flashparameter
Die FlashParameter-Struktur wird von der Vorlage Generische Parameter (siehe Abschnitt 3.3.2) und enthält Parameter für Flashmedien (siehe Tabelle 10). Hersteller flashbasierter Speichergeräte können ein Parameterfeld (vorzugsweise das Feld Parameter [ 0) mit ] dieser Parameterstruktur auffüllen. Implementierungen können die Informationen in der FlashParameter-Struktur verwenden, um Zugriffsvorgänge während Lese-/Schreibvorgängen und für die Ausrichtung von Dateisystemstrukturen zu optimieren, die die Formatierung der Medien erhingen.
Die Unterstützung für die Flashparameterstruktur ist optional.
Struktur der Flashparameter in Tabelle 10
| Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
|---|---|---|---|
| ParametersGuid | 0 | 16 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.4.1 wird der Inhalt definiert. |
| EraseBlockSize | 16 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.4.2 wird der Inhalt definiert. |
| PageSize | 20 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.4.3 wird der Inhalt definiert. |
| SpareSectors | 24 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.4.4 wird der Inhalt definiert. |
| RandomAccessTime | 28 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.4.5 wird der Inhalt definiert. |
| ProgrammingTime | 32 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.4.6 wird der Inhalt definiert. |
| ReadCycle | 36 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.4.7 wird der Inhalt definiert. |
| WriteCycle | 40 | 4 | Dieses Feld ist obligatorisch, und Abschnitt 3.3.4.8 definiert seinen Inhalt. |
| Reserviert | 44 | 4 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
Alle möglichen Werte für alle Flash-Parameterfelder, mit Ausnahme des ParametersGuid-Felds, sind gültig. Der Wert 0 gibt jedoch an, dass das Feld tatsächlich bedeutungslos ist (Implementierungen müssen das angegebene Feld ignorieren).
3.3.4.1 ParametersGuid-Feld
Das Feld ParametersGuid muss der Definition in der Vorlage für generische Parameter entsprechen (siehe Abschnitt 3.3.2.1).
Der gültige Wert für dieses Feld in GUID-Notation ist {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.
3.3.4.2 Feld "EraseBlockSize"
Das Feld EraseBlockSize muss die Größe des Löschblocks des Flashmediums in Bytes beschreiben.
3.3.4.3 PageSize-Feld
Das Feld PageSize muss die Größe der Seite des Flashmediums in Bytes beschreiben.
3.3.4.4 Feld "SpareSectors"
Das Feld SpareSectors muss die Anzahl der Sektoren beschreiben, die das Flashmedium für seine internen Sparingvorgänge zur Verfügung hat.
3.3.4.5 RandomAccessTime-Feld
Das Feld RandomAccessTime muss die durchschnittliche zufällige Zugriffszeit des Flashmediums in Nanosekunden beschreiben.
3.3.4.6 ProgrammingTime-Feld
Im Feld ProgrammingTime muss die durchschnittliche Programmierzeit des Flashmediums in Nanosekunden beschrieben werden.
3.3.4.7 ReadCycle-Feld
Das Feld ReadCycle muss die durchschnittliche Lesezykluszeit des Flashmediums in Nanosekunden beschreiben.
3.3.4.8 WriteCycle-Feld
Das Feld WriteCycle muss die durchschnittliche Schreibzykluszeit in Nanosekunden beschreiben.
3.4 Haupt- und Sicherungsstartprüfsummen-Unterregionen
Die Haupt- und Sicherungsstartprüfsummen enthalten jeweils ein sich wiederholendes Muster der Vier-Byte-Prüfsumme des Inhalts aller anderen Unterregionen in den jeweiligen Startregionen. Die Prüfsummenberechnung darf die Felder VolumeFlags und PercentInUse nicht in ihrem jeweiligen Startsektor enthalten (siehe Abbildung 1). Das sich wiederholende Muster der 4-Byte-Prüfsumme füllt die jeweilige Startprüfsummenunterregion vom Anfang bis zum Ende des Unterbereichs aus.
Vor der Verwendung des Inhalts einer der anderen Unterregionen in den Haupt- oder Sicherungsstartregionen müssen Implementierungen ihren Inhalt überprüfen, indem sie ihre jeweilige Startprüfsumme überprüfen.
Während der anfängliche Formatvorgang sowohl die Haupt- als auch die Sicherungsstartprüfsumme mit dem sich wiederholenden Prüfsummenmuster auffüllt, müssen implementierungen diese Sektoren aktualisieren, wenn sich der Inhalt der anderen Sektoren in ihren jeweiligen Startregionen ändert.
Abbildung 1 Startprüfsummenberechnung
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 Dateizuordnungstabellenbereich
Die FAT-Region (File Allocation Table) kann bis zu zwei FATs enthalten: eine in der ersten FAT-Unterregion und eine in der zweiten FAT-Unterregion. Im Feld NumberOfFats wird beschrieben, wie viele FATs diese Region enthält. Die gültigen Werte für das Feld NumberOfFats sind 1 und 2. Daher enthält die erste FAT-Unterregion immer ein FAT. Wenn das Feld NumberOfFats zwei ist, enthält die zweite FAT-Unterregion auch ein FAT.
Im Feld ActiveFat des Felds VolumeFlags wird beschrieben, welches FAT aktiv ist. Nur das Feld VolumeFlags im Hauptstartsektor ist aktuell. Implementierungen müssen das FAT, das nicht aktiv ist, als veraltet behandeln. Die Verwendung des inaktiven FAT und das Wechseln zwischen FATs ist implementierungsspezifisch.
4.1 Erste und zweite FAT-Unterregionen
Ein FAT muss Clusterketten im Clusterheap beschreiben (siehe Tabelle 11). Eine Clusterkette ist eine Reihe von Clustern, die Platz zum Aufzeichnen des Inhalts von Dateien, Verzeichnissen und anderen Dateisystemstrukturen bietet. Ein FAT stellt eine Clusterkette als einfach verknüpfte Liste von Clusterindizes dar. Mit Ausnahme der ersten beiden Einträge stellt jeder Eintrag in einem FAT genau einen Cluster dar.
Tabellen-11-Dateizuordnungstabellenstruktur
| Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
|---|---|---|---|
| FatEntry[0] | 0 | 4 | Dieses Feld ist obligatorisch, und Abschnitt 4.1.1 definiert seinen Inhalt. |
| FatEntry[1] | 4 | 4 | Dieses Feld ist obligatorisch, und Abschnitt 4.1.2 definiert seinen Inhalt. |
| FatEntry[2] | 8 | 4 | Dieses Feld ist obligatorisch, und Abschnitt 4.1.3 definiert seinen Inhalt. |
. . . |
. . . |
. . . |
. . . |
| FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | Dieses Feld ist obligatorisch, und Abschnitt 4.1.3 definiert seinen Inhalt. ClusterCount + 1 darf FFFFFFF6h nie überschreiten. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das Feld ClusterCount. |
| ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4) | Dieses Feld ist obligatorisch, und sein Inhalt ist ggf. nicht definiert. Hinweis: Die Felder Haupt- und Sicherungsstartsektor enthalten die Felder ClusterCount, FatLength und BytesPerSectorShift. |
4.1.1 FatEntry [ ] 0-Feld
Das Feld FatEntry [ 0 ] muss den Medientyp im ersten Byte (das byte der niedrigsten Reihenfolge) beschreiben und FFh in den verbleibenden drei Bytes enthalten.
Der Medientyp (das erste Byte) sollte F8h sein.
4.1.2 FatEntry [ ] 1-Feld
Das Feld FatEntry [ 1 ] ist nur aufgrund der historischen Rangfolge vorhanden und beschreibt keine interessanten Informationen.
Der gültige Wert für dieses Feld ist FFFFFFFFh. Implementierungen müssen dieses Feld mit dem vorgeschriebenen Wert initialisieren und sollten dieses Feld für keinen Zweck verwenden. Implementierungen sollten dieses Feld nicht interpretieren und seinen Inhalt über Vorgänge hinweg beibehalten, die umgebende Felder ändern.
4.1.3 FatEntry [ 2 ] ... FatEntry [ ClusterCount+1 ] Fields
Jedes FatEntry-Feld in diesem Array muss einen Cluster im Clusterheap darstellen. FatEntry [ 2 ] stellt den ersten Cluster im Clusterheap und FatEntry [ ClusterCount+1 ] den letzten Cluster im Clusterheap dar.
Der gültige Wertebereich für diese Felder muss folgendermaßen sein:
Zwischen 2 und ClusterCount + 1 (einschließlich), was auf den nächsten FatEntry-Vorgang in der angegebenen Clusterkette verweist; der angegebene FatEntry darf nicht auf FatEntry verweisen, der in der angegebenen Clusterkette vorangestellt ist.
Genau FFFFFFF7h, wodurch der entsprechende FatEntry-Cluster als "schlecht" markiert wird
Genau FFFFFFFFh, das den entsprechenden FatEntry-Cluster als letzten Cluster einer Clusterkette markiert; Dies ist der einzige gültige Wert für den letzten FatEntry-Wert einer bestimmten Clusterkette.
5 Datenbereich
Der Datenbereich enthält den Clusterheap, der verwalteten Speicherplatz für Dateisystemstrukturen, Verzeichnisse und Dateien bereitstellt.
5.1 Clusterheap-Unterregion
Die Struktur des Clusterheaps ist sehr einfach (siehe Tabelle 12); jede aufeinander folgende Reihe von Sektoren beschreibt einen Cluster, wie im Feld "SectorsPerClusterShift" definiert. Wichtig: Der erste Cluster des Clusterheaps verfügt über Index 2, der direkt dem Index von FatEntry [ 2 ] entspricht.
In einem exFAT-Volume verwaltet eine Zuordnungsbitmap (siehe Abschnitt 7.1.5)den Datensatz des Zuordnungsstatus aller Cluster. Dies ist ein wesentlicher Unterschied zu den Vorgängern von exFAT (FAT12, FAT16 und FAT32), bei denen ein FAT einen Datensatz des Zuordnungsstatus aller Cluster im Clusterheap verwaltet hat.
Clusterheapstruktur in Tabelle 12
| Feldname | Offset (Sektor) |
Größe (Sektoren) |
Kommentare |
|---|---|---|---|
| Cluster[2] | ClusterHeapOffset | 2SectorsPerClusterShift | Dieses Feld ist obligatorisch, und in Abschnitt 5.1.1 wird der Inhalt definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder ClusterHeapOffset und SectorsPerClusterShift. |
. . . |
. . . |
. . . |
. . . |
| Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2SectorsPerClusterShift | 2SectorsPerClusterShift | Dieses Feld ist obligatorisch, und in Abschnitt 5.1.1 wird der Inhalt definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder ClusterCount, ClusterHeapOffset und SectorsPerClusterShift. |
5.1.1 Cluster [ 2 ] ... [ClusterclusterCount+1-Felder ]
Jedes Clusterfeld in diesem Array besteht aus einer Reihe zusammenhängender Sektoren, deren Größe durch das Feld "SectorsPerClusterShift" definiert wird.
6 Verzeichnisstruktur
Das ExFAT-Dateisystem verwendet einen Verzeichnisstrukturansatz, um die Dateisystemstrukturen und -dateien zu verwalten, die im Cluster heap vorhanden sind. Verzeichnisse verfügen in der Verzeichnisstruktur über eine 1:n-Beziehung zwischen übergeordnetem und untergeordnetem Element.
Das Verzeichnis, auf das das Feld FirstClusterOfRootDirectory verweist, ist der Stamm der Verzeichnisstruktur. Alle anderen Verzeichnisse stammen aus dem Stammverzeichnis auf singly-linked-Weise ab.
Jedes Verzeichnis besteht aus einer Reihe von Verzeichniseinträgen (siehe Tabelle 13).
Ein oder mehrere Verzeichniseinträge werden zu einem Verzeichniseintragssatz kombiniert, der etwas von Interesse beschreibt, z. B. eine Dateisystemstruktur, ein Unterverzeichnis oder eine Datei.
Tabelle 13: Verzeichnisstruktur
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| DirectoryEntry[0] | 0 | 32 | Dieses Feld ist obligatorisch, und in Abschnitt 6.1 wird der Inhalt definiert. |
. . . |
. . . |
. . . |
. . . |
| DirectoryEntry[N-1] | (N – 1) * 32 | 32 | Dieses Feld ist obligatorisch, und in Abschnitt 6.1 wird der Inhalt definiert. N, die Anzahl der DirectoryEntry-Felder, ist die Größe der Clusterkette in Bytes, die das gegebene Verzeichnis enthält, dividiert durch die Größe eines DirectoryEntry-Felds, 32 Byte. |
6.1 DirectoryEntry [ 0 ] ... DirectoryEntry [ N--1]
Jedes DirectoryEntry-Feld in diesem Array wird von der Generischen DirectoryEntry-Vorlage (siehe Abschnitt 6.2 ) ableiten.
6.2 Generische DirectoryEntry-Vorlage
Die Vorlage "Generic DirectoryEntry" stellt die Basisdefinition für Verzeichniseinträge (siehe Tabelle 14) zur Alle Verzeichniseintragsstrukturen leiten sich von dieser Vorlage ab, und nur von Microsoft definierte Verzeichniseintragsstrukturen sind gültig (exFAT verfügt nicht über Bestimmungen für vom Hersteller definierte Verzeichniseintragsstrukturen, außer wie in Abschnitt 7.8 und Abschnitt 7.9 definiert). Die Interpretation der Vorlage "Generic DirectoryEntry" ist obligatorisch.
Tabelle 14: Generische DirectoryEntry-Vorlage
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.2.1 wird der Inhalt definiert. |
| CustomDefined | 1 | 19 | Dieses Feld ist obligatorisch, und Strukturen, die von dieser Vorlage ableiten, können ihren Inhalt definieren. |
| FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 6.2.2 wird der Inhalt definiert. |
| DataLength | 24 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 6.2.3 wird der Inhalt definiert. |
6.2.1 EntryType-Feld
Das Feld EntryType verfügt über drei Verwendungsmodi, die durch den Wert des Felds definiert werden (siehe Liste unten).
00h, eine End-of-Directory-Markierung, und die folgenden Bedingungen gelten:
Alle anderen Felder in der angegebenen DirectoryEntry sind tatsächlich reserviert.
Alle nachfolgenden Verzeichniseinträge im angegebenen Verzeichnis sind ebenfalls End-of-Directory-Marker.
End-of-Directory-Marker sind nur außerhalb von Verzeichniseintragssätzen gültig.
Implementierungen können End-of-Directory-Marker nach Bedarf überschreiben.
Zwischen 01h und 7Fh einschließlich . Dies ist ein nicht verwendeter Verzeichniseintragsmarker, und die folgenden Bedingungen gelten:
Alle anderen Felder in der angegebenen DirectoryEntry sind eigentlich nicht definiert.
Nicht verwendete Verzeichniseinträge sind nur außerhalb von Verzeichniseintragssätzen gültig.
Implementierungen können nicht verwendete Verzeichniseinträge bei Bedarf überschreiben.
Dieser Wertebereich entspricht dem Feld InUse (siehe Abschnitt 6.2.1.4),das den Wert 0 enthält.
Zwischen 81h und FFh einschließlich . Dies ist ein regulärer Verzeichniseintrag, und die folgenden Bedingungen gelten:
Der Inhalt des EntryType-Felds (siehe Tabelle 15) bestimmt das Layout des Rests der DirectoryEntry-Struktur.
Dieser Wertebereich und nur dieser Wertebereich sind innerhalb eines Verzeichniseintragssets gültig.
Dieser Wertebereich entspricht direkt dem Feld InUse (siehe Abschnitt 6.2.1.4), das den Wert 1 enthält.
Um Änderungen am Feld "InUse" (siehe Abschnitt 6.2.1.4)zu verhindern, die fälschlicherweise zu einem Verzeichnisendemarker führen, ist der Wert 80h ungültig.
Tabelle 15: Generische EntryType-Feldstruktur
| Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
|---|---|---|---|
| TypeCode | 0 | 5 | Dieses Feld ist obligatorisch, und in Abschnitt 6.2.1.1 wird der Inhalt definiert. |
| TypeImportance | 5 | 1 | Dieses Feld ist obligatorisch, und abschnitt 6.2.1.2 definiert seinen Inhalt. |
| TypeCategory | 6 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.2.1.3 wird der Inhalt definiert. |
| InUse | 7 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.2.1.4 wird der Inhalt definiert. |
6.2.1.1 TypeCode-Feld
Das Feld TypeCode beschreibt teilweise den spezifischen Typ des angegebenen Verzeichniseintrags. In diesem Feld sowie den Feldern TypeImportance und TypeCategory (siehe Abschnitt 6.2.1.2 bzw. Abschnitt 6.2.1.3)wird der Typ des angegebenen Verzeichniseintrags eindeutig identifiziert.
Alle möglichen Werte dieses Felds sind gültig, es sei denn, die Felder TypeImportance und TypeCategory enthalten beide den Wert 0. In diesem Fall ist der Wert 0 für dieses Feld ungültig.
6.2.1.2 TypeImportance-Feld
Das Feld TypeImportance muss die Wichtigkeit des angegebenen Verzeichniseintrags beschreiben.
Die gültigen Werte für dieses Feld sind:
0 bedeutet, dass der jeweilige Verzeichniseintrag kritisch ist (siehe Abschnitt 6.3.1.2.1 und Abschnitt 6.4.1.2.1 für kritische primäre bzw. kritische sekundäre Verzeichniseinträge).
1, was bedeutet, dass der jeweilige Verzeichniseintrag unbedenklich ist (siehe Abschnitt 6.3.1.2.2 bzw. Abschnitt 6.4.1.2.2 für unbedenkliche Einträge in primären bzw. unbedenklichen sekundären Verzeichnissen)
6.2.1.3 TypeCategory-Feld
Das Feld TypeCategory muss die Kategorie des angegebenen Verzeichniseintrags beschreiben.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass der gegebene Verzeichniseintrag primär ist (siehe Abschnitt 6.3).
1, was bedeutet, dass der gegebene Verzeichniseintrag sekundär ist (siehe Abschnitt 6.4).
6.2.1.4 InUse-Feld
Das Feld InUse muss beschreiben, ob der bestimmte Verzeichniseintrag verwendet wird oder nicht.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass der gegebene Verzeichniseintrag nicht verwendet wird. Dies bedeutet, dass die gegebene Struktur tatsächlich ein nicht verwendeter Verzeichniseintrag ist.
1, was bedeutet, dass der gegebene Verzeichniseintrag verwendet wird; Dies bedeutet, dass die gegebene Struktur ein regulärer Verzeichniseintrag ist.
6.2.2 FirstCluster-Feld
Das Feld FirstCluster muss den Index des ersten Clusters einer Zuordnung im Cluster heap enthalten, der dem angegebenen Verzeichniseintrag zugeordnet ist.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
Genau 0, was bedeutet, dass keine Clusterzuordnung vorhanden ist.
Zwischen 2 und ClusterCount + 1, dem Bereich gültiger Clusterindizes
Strukturen, die von dieser Vorlage abgeleitet werden, definieren möglicherweise sowohl die Felder FirstCluster als auch DataLength neu, wenn eine Clusterzuordnung nicht mit der abgeleiteten Struktur kompatibel ist.
6.2.3 DataLength-Feld
Das Feld DataLength beschreibt die Größe der Daten in Byte, die in der zugeordneten Clusterzuordnung enthalten sind.
Der gültige Wertbereich für dieses Feld ist:
Mindestens 0; Wenn das Feld FirstCluster den Wert 0 enthält, ist der einzige gültige Wert dieses Felds 0.
ClusterCount * 2SectorsPerClusterShift * 2BytesPerSectorShift
Strukturen, die von dieser Vorlage abgeleitet werden, können sowohl die Felder FirstCluster als auch DataLength neu definieren, wenn eine Clusterzuordnung für die abgeleitete Struktur nicht möglich ist.
6.3 Generische Primäre DirectoryEntry-Vorlage
Der erste Verzeichniseintrag in einem Verzeichniseintragssatz muss ein primärer Verzeichniseintrag sein. Alle nachfolgenden Verzeichniseinträge im Verzeichniseintragssatz müssen sekundäre Verzeichniseinträge sein (siehe Abschnitt 6.4).
Die Interpretation der Vorlage Generic Primary DirectoryEntry ist obligatorisch.
Alle primären Verzeichniseintragsstrukturen werden von der Vorlage Generic Primary DirectoryEntry (siehe Tabelle 16)ableiten, die von der Vorlage Generic DirectoryEntry (siehe Abschnitt 6.2)stammt.
Tabelle 16 Generic Primary DirectoryEntry Template
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.3.1 wird der Inhalt definiert. |
| SecondaryCount | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.3.2 wird der Inhalt definiert. |
| SetChecksum | 2 | 2 | Dieses Feld ist obligatorisch, und in Abschnitt 6.3.3 wird der Inhalt definiert. |
| GeneralPrimaryFlags | 4 | 2 | Dieses Feld ist obligatorisch, und in Abschnitt 6.3.4 wird der Inhalt definiert. |
| CustomDefined | 6 | 14 | Dieses Feld ist obligatorisch, und Strukturen, die von dieser Vorlage ableiten, definieren ihren Inhalt. |
| FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 6.3.5 wird der Inhalt definiert. |
| DataLength | 24 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 6.3.6 wird der Inhalt definiert. |
6.3.1 EntryType-Feld
Das EntryType-Feld muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry angegeben ist (siehe Abschnitt 6.2.1).
6.3.1.1 TypeCode-Feld
Das TypeCode-Feld muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.2.1.1).
6.3.1.2 TypeImportance-Feld
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.1.2).
6.3.1.2.1 Kritische primäre Verzeichniseinträge
Kritische primäre Verzeichniseinträge enthalten Informationen, die für die ordnungsgemäße Verwaltung eines exFAT-Volumes von entscheidender Bedeutung sind. Nur das Stammverzeichnis enthält wichtige primäre Verzeichniseinträge (Dateiverzeichniseinträge sind eine Ausnahme, siehe Abschnitt 7.4).
Die Definition kritischer primärer Verzeichniseinträge entspricht der Hauptrevisionsnummer exFAT. Implementierungen müssen alle kritischen primären Verzeichniseinträge unterstützen und nur die kritischen primären Verzeichniseintragsstrukturen aufzeichnen, die diese Spezifikation definiert.
6.3.1.2.2 Unbedenkliche primäre Verzeichniseinträge
Unbedenkliche primäre Verzeichniseinträge enthalten zusätzliche Informationen, die für die Verwaltung eines exFAT-Volumes nützlich sein können. Jedes Verzeichnis kann unbedenkliche primäre Verzeichniseinträge enthalten.
Die Definition unbedenklicher primärer Verzeichniseinträge korreliert mit der kleineren ExFAT-Revisionsnummer. Die Unterstützung für jeden unbedenklichen primären Verzeichniseintrag, den diese Spezifikation definiert, oder jede nachfolgende Spezifikation, die definiert wird, ist optional. Ein unbekannter, unbedenklicher primärer Verzeichniseintrag rendert den gesamten Verzeichniseintragssatz als nicht unbekannt (über die Definition der anwendbaren Verzeichniseintragsvorlagen hinaus).
6.3.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.2.1.3).
Für diese Vorlage muss der gültige Wert für dieses Feld 0 sein.
6.3.1.4 InUse-Feld
Das Feld InUse muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.2.1.4).
6.3.2 SecondaryCount-Feld
Das Feld SecondaryCount muss die Anzahl sekundärer Verzeichniseinträge beschreiben, die unmittelbar auf den angegebenen eintrag des primären Verzeichnisses folgen. Diese sekundären Verzeichniseinträge bilden zusammen mit dem angegebenen primären Verzeichniseintrag den Verzeichniseintragssatz.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
Mindestens 0. Dies bedeutet, dass dieser primäre Verzeichniseintrag der einzige Eintrag im Verzeichniseintragssatz ist.
Mindestens 255, was bedeutet, dass die nächsten 255 Verzeichniseinträge und dieser primäre Verzeichniseintrag den Verzeichniseintragssatz umfassen.
Kritische primäre Verzeichniseintragsstrukturen, die von dieser Vorlage ableiten, können die Felder SecondaryCount und SetChecksum neu definieren.
6.3.3 SetChecksum-Feld
Das Feld SetChecksum muss die Prüfsumme aller Verzeichniseinträge im angegebenen Verzeichniseintragssatz enthalten. Die Prüfsumme schließt dieses Feld jedoch aus (siehe Abbildung 2). Implementierungen müssen überprüfen, ob der Inhalt dieses Felds gültig ist, bevor ein anderer Verzeichniseintrag im angegebenen Verzeichniseintragssatz verwendet wird.
Kritische primäre Verzeichniseintragsstrukturen, die von dieser Vorlage ableiten, können die Felder SecondaryCount und SetChecksum neu definieren.
Abbildung 2 EntrySetChecksum-Berechnung
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 GeneralPrimaryFlags-Feld
Das Feld GeneralPrimaryFlags enthält Flags (siehe Tabelle 17).
Kritische primäre Verzeichniseintragsstrukturen, die von dieser Vorlage ableiten, können dieses Feld neu definieren.
Tabelle 17: Generische GeneralPrimaryFlags-Feldstruktur
| Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
|---|---|---|---|
| AllocationPossible | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.3.4.1 wird der Inhalt definiert. |
| NoFatChain | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.3.4.2 wird der Inhalt definiert. |
| CustomDefined | 2 | 14 | Dieses Feld ist obligatorisch, und Strukturen, die von dieser Vorlage ableiten, können dieses Feld definieren. |
6.3.4.1 ZuordnungPossible-Feld
Das Feld AllocationPossible muss beschreiben, ob eine Zuordnung im Cluster heap für den angegebenen Verzeichniseintrag möglich ist.
Die gültigen Werte für dieses Feld sind:
0 bedeutet, dass eine zugeordnete Zuordnung von Clustern nicht möglich ist und die Felder FirstCluster und DataLength tatsächlich nicht definiert sind (Strukturen, die von dieser Vorlage ableiten, können diese Felder neu definieren).
-
- Dies bedeutet, dass eine zugeordnete Zuordnung von Clustern möglich ist und die Felder FirstCluster und DataLength wie definiert sind.
6.3.4.2 NoFatChain-Feld
Das Feld NoFatChain muss angeben, ob das aktive FAT die Clusterkette der angegebenen Zuordnung beschreibt.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass die entsprechenden FAT-Einträge für die Clusterkette der Zuordnung gültig sind und von Implementierungen interpretiert werden müssen. Wenn das Feld AllocationPossible den Wert 0 enthält, oder wenn das Feld AllocationPossible den Wert 1 enthält und das Feld FirstCluster den Wert 0 enthält, ist der einzige gültige Wert dieses Felds 0.
1, was bedeutet, dass die zugeordnete Zuordnung eine zusammenhängende Reihe von Clustern ist. Die entsprechenden FAT-Einträge für die Cluster sind ungültig, und Implementierungen dürfen sie nicht interpretieren. -Implementierungen können die folgende Gleichung verwenden, um die Größe der zugeordneten Zuordnung zu berechnen: DataLength / (2SectorsPerClusterShift * 2BytesPerSectorShift) aufgerundet auf die nächste ganze Zahl
Wenn kritische primäre Verzeichniseintragsstrukturen, die von dieser Vorlage ableiten, das Feld GeneralPrimaryFlags neu definieren, sind die entsprechenden FAT-Einträge für die Clusterkette der zugeordneten Zuordnung gültig.
6.3.5 FirstCluster-Feld
Das FirstCluster-Feld muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.2.2).
Wenn das NoFatChain-Bit 1 ist, muss FirstCluster auf einen gültigen Cluster im Clusterhap verweisen.
Kritische primäre Verzeichniseintragsstrukturen, die von dieser Vorlage ableiten, können die Felder FirstCluster und DataLength neu definieren. Andere Strukturen, die von dieser Vorlage ableiten, können die Felder FirstCluster und DataLength nur dann neu definieren, wenn das Feld AllocationPossible den Wert 0 enthält.
6.3.6 DataLength-Feld
Das DataLength-Feld muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.2.3).
Wenn das NoFatChain-Bit 1 ist, darf DataLength nicht 0 (null) sein. Wenn das FirstCluster-Feld 0 (null) ist, muss DataLength ebenfalls 0 (null) sein.
Kritische primäre Verzeichniseintragsstrukturen, die von dieser Vorlage ableiten, können die Felder FirstCluster und DataLength neu definieren. Andere Strukturen, die von dieser Vorlage ableiten, können die Felder FirstCluster und DataLength nur dann neu definieren, wenn das Feld AllocationPossible den Wert 0 enthält.
6.4 Generische sekundäre DirectoryEntry-Vorlage
Der zentrale Zweck von sekundären Verzeichniseinträgen besteht in der Bereitstellung zusätzlicher Informationen zu einem Verzeichniseintragssatz. Die Interpretation der Vorlage Generic Secondary DirectoryEntry ist obligatorisch.
Die Definition von kritischen und unbedenklichen sekundären Verzeichniseinträgen korreliert mit der kleineren ExFAT-Revisionsnummer. Die Unterstützung für alle kritischen oder unbedenklichen sekundären Verzeichniseintrage, die diese Spezifikation oder nachfolgende Spezifikationen definiert, ist optional.
Alle sekundären Verzeichniseintragsstrukturen werden von der Vorlage Generic Secondary DirectoryEntry (siehe Tabelle 18)ableiten, die von der Vorlage Generic DirectoryEntry (siehe Abschnitt 6.2)stammt.
Tabelle 18: Generische sekundäre DirectoryEntry-Vorlage
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.4.1 wird der Inhalt definiert. |
| GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.4.2 wird der Inhalt definiert. |
| CustomDefined | 2 | 18 | Dieses Feld ist obligatorisch, und Strukturen, die von dieser Vorlage ableiten, definieren ihren Inhalt. |
| FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 6.4.3 wird der Inhalt definiert. |
| DataLength | 24 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 6.4.4 wird der Inhalt definiert. |
6.4.1 EntryType-Feld
Das EntryType-Feld muss der Definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.1).
6.4.1.1 TypeCode-Feld
Das TypeCode-Feld muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.2.1.1).
6.4.1.2 TypeImportance-Feld
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.1.2).
6.4.1.2.1 Kritische sekundäre Verzeichniseinträge
Kritische sekundäre Verzeichniseinträge enthalten Informationen, die für die ordnungsgemäße Verwaltung des enthaltenden Verzeichniseintragssets von entscheidender Bedeutung sind. Die Unterstützung für bestimmte kritische sekundäre Verzeichniseinträge ist optional, aber ein unbekannter Eintrag für kritisches Verzeichnis rendert den gesamten Verzeichniseintragssatz als nicht erkannt (über die Definition der entsprechenden Verzeichniseintragsvorlagen hinaus).
Wenn ein Verzeichniseintragssatz jedoch mindestens einen kritischen sekundären Verzeichniseintrag enthält, den eine Implementierung nicht erkennt, muss die Implementierung höchstens die Vorlagen der Verzeichniseinträge im Verzeichniseintragssatz interpretieren und nicht die Daten, die einer Zuordnung eines Verzeichniseintrags im Verzeichniseintragssatz zugeordnet sind ( Dateiverzeichniseinträge stellen eine Ausnahme dar. siehe Abschnitt 7.4).
6.4.1.2.2 Unbedenkliche sekundäre Verzeichniseinträge
Unbedenkliche sekundäre Verzeichniseinträge enthalten zusätzliche Informationen, die für die Verwaltung des enthaltenden Verzeichniseintragssatzes nützlich sein können. Die Unterstützung für einen bestimmten unbedenklichen sekundären Verzeichniseintrag ist optional. Nicht erkannte unbedenkliche sekundäre Verzeichniseinträge rendern nicht den gesamten Verzeichniseintragssatz als nicht erkannt.
Implementierungen ignorieren möglicherweise jeden nicht erkannten unbedenklichen sekundären Eintrag.
6.4.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition in der Vorlage Generic DirectoryEntry entsprechen (siehe Abschnitt 6.2.1.3).
Für diese Vorlage ist der gültige Wert für dieses Feld 1.
6.4.1.4 Feld "InUse"
Das Feld InUse muss der Definition in der Vorlage Generic DirectoryEntry entsprechen (siehe Abschnitt 6.2.1.4).
6.4.2 GeneralSecondaryFlags-Feld
Das Feld GeneralSecondaryFlags enthält Flags (siehe Tabelle 19).
Tabelle 19 Generische AllgemeineSecondaryFlags-Feldstruktur
| Feldname | Offset (Bit) |
Größe (Bits) |
Kommentare |
|---|---|---|---|
| AllocationPossible | 0 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 6.4.2.1 definiert seinen Inhalt. |
| NoFatChain | 1 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 6.4.2.2 definiert seinen Inhalt. |
| CustomDefined | 2 | 6 | Dieses Feld ist obligatorisch, und Strukturen, die von dieser Vorlage abgeleitet werden, können dieses Feld definieren. |
6.4.2.1 AllocationPossible-Feld
Das Feld AllocationPossible muss die gleiche Definition wie das gleiche benannte Feld in der generischen primären DirectoryEntry-Vorlage aufweisen (siehe Abschnitt 6.3.4.1).
6.4.2.2 NoFatChain-Feld
Das NoFatChain-Feld muss die gleiche Definition wie das gleiche benannte Feld in der generischen primären DirectoryEntry-Vorlage aufweisen (siehe Abschnitt 6.3.4.2).
6.4.3 FirstCluster-Feld
Das Feld FirstCluster muss der Definition in der Vorlage Generic DirectoryEntry entsprechen (siehe Abschnitt 6.2.2).
Wenn das NoFatChain-Bit 1 ist, muss FirstCluster auf einen gültigen Cluster im Clusterheap verweisen.
6.4.4 DataLength-Feld
Das DataLength-Feld muss der Definition in der Generischen DirectoryEntry-Vorlage entsprechen (siehe Abschnitt 6.2.3).
Wenn das NoFatChain-Bit 1 ist, darf DataLength nicht 0 (null) sein. Wenn das FirstCluster-Feld 0 (null) ist, muss DataLength ebenfalls 0 (null) sein.
7 Verzeichniseintragsdefinitionen
Revision 1.00 des exFAT-Dateisystems definiert die folgenden Verzeichniseinträge:
Kritische primäre
Zuordnungsbitmap (Abschnitt 7.1)
Up-case Table(Abschnitt 7.2)
Volumebezeichnung (Abschnitt 7.3)
Datei (Abschnitt 7.4)
Benign primary
Volume-GUID (Abschnitt 7.5)
TexFAT-Auffüllung (Abschnitt 7.10)
Kritische sekundäre
Stream-Erweiterung (Abschnitt 7.6)
Dateiname (Abschnitt 7.7)
Unbedenkliche sekundäre
Anbietererweiterung (Abschnitt 7.8)
Anbieterzuordnung (Abschnitt 7.9)
7.1 Zuordnungsbitmap-Verzeichniseintrag
Im exFAT-Dateisystem beschreibt ein FAT nicht den Zuordnungsstatus von Clustern. stattdessen eine Zuordnungsbitmap. Zuordnungsbitmaps sind im Clusterheap vorhanden (siehe Abschnitt 7.1.5)und weisen entsprechende kritische primäre Verzeichniseinträge im Stammverzeichnis auf (siehe Tabelle 20).
Das Feld NumberOfFats bestimmt die Anzahl gültiger Zuordnungsbitmap-Verzeichniseinträge im Stammverzeichnis. Wenn das Feld NumberOfFats den Wert 1 enthält, ist die einzige gültige Anzahl von Zuordnungsbitmap-Verzeichniseinträgen 1. Darüber hinaus ist der ein Eintrag für das Zuordnungsbitmap-Verzeichnis nur gültig, wenn er die erste Zuordnungsbitmap beschreibt (siehe Abschnitt 7.1.2.1). Wenn das Feld NumberOfFats den Wert 2 enthält, ist die einzige gültige Anzahl von Zuordnungsbitmap-Verzeichniseinträgen 2. Darüber hinaus sind die beiden Zuordnungsbitmap-Verzeichniseinträge nur gültig, wenn einer die erste Zuordnungsbitmap und der andere die zweite Zuordnungsbitmap beschreibt.
Table 20 Allocation Bitmap DirectoryEntry Structure
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.1.1 definiert seinen Inhalt. |
| BitmapFlags | 1 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.1.2 definiert seinen Inhalt. |
| Reserviert | 2 | 18 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
| FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch, und Abschnitt 7.1.3 definiert seinen Inhalt. |
| DataLength | 24 | 8 | Dieses Feld ist obligatorisch, und Abschnitt 7.1.4 definiert seinen Inhalt. |
7.1.1 EntryType-Feld
Das Feld EntryType muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (siehe Abschnitt 6.3.1)angegeben ist.
7.1.1.1 TypCodefeld
Das TypeCode-Feld muss der Definition entsprechen, die in der Generischen primären DirectoryEntry-Vorlage angegeben ist (siehe Abschnitt 6.3.1.1).
Für einen Zuordnungsbitmap-Verzeichniseintrag ist der gültige Wert für dieses Feld 1.
7.1.1.2 TypeImportance-Feld
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.2).
Für einen Zuordnungsbitmap-Verzeichniseintrag ist der gültige Wert für dieses Feld 0.
7.1.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.3).
7.1.1.4 InUse-Feld
Das Feld InUse muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.4).
7.1.2 BitmapFlags-Feld
Das Feld BitmapFlags enthält Flags (siehe Tabelle 21).
BitmapFlags-Feldstruktur in Tabelle 21
| Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
|---|---|---|---|
| BitmapIdentifier | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.1.2.1 wird der Inhalt definiert. |
| Reserviert | 1 | 7 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
7.1.2.1 BitmapIdentifier-Feld
Das Feld BitmapIdentifier muss angeben, welche Zuordnungsbitmap der angegebenen Verzeichniseintrag beschreibt. Implementierungen müssen die erste Zuordnungsbitmap in Verbindung mit dem ersten FAT verwenden und die zweite Zuordnungsbitmap in Verbindung mit der zweiten FAT-Datei verwenden. Das Feld ActiveFat beschreibt, welche FAT- und Zuordnungsbitmap aktiv sind.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass der gegebene Verzeichniseintrag die erste Zuordnungsbitmap beschreibt.
1, was bedeutet, dass der gegebene Verzeichniseintrag die zweite Zuordnungsbitmap beschreibt und nur möglich ist, wenn NumberOfFats den Wert 2 enthält.
7.1.3 FirstCluster-Feld
Das FirstCluster-Feld muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.5).
Dieses Feld enthält den Index des ersten Clusters der Clusterkette, wie von FAT beschrieben, der die Zuordnungsbitmap hostet.
7.1.4 DataLength-Feld
Das DataCluster-Feld muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.6).
7.1.5 Zuordnungsbitmap
Eine Zuordnungsbitmap zeichnet den Zuordnungsstatus der Cluster im Cluster heap auf. Jedes Bit in einer Zuordnungsbitmap gibt an, ob der entsprechende Cluster für die Zuordnung verfügbar ist.
Eine Zuordnungsbitmap stellt Cluster vom niedrigsten bis zum höchsten Index dar (siehe Tabelle 22). Aus historischen Gründen verfügt der erste Cluster über Index 2. Hinweis: Das erste Bit in der Bitmap ist das niedrigste Bit des ersten Byte.
Tabelle 22: Zuordnungsbitmapstruktur
| Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
|---|---|---|---|
| BitmapEntry[2] | 0 | 1 | Dieses Feld ist obligatorisch, und abschnitt 7.1.5.1 definiert seinen Inhalt. |
. . . |
. . . |
. . . |
. . . |
| BitmapEntry[ClusterCount+1] | ClusterCount – 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.1.5.1 wird der Inhalt definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das Feld ClusterCount. |
| Reserviert | ClusterCount | (DataLength * 8) – ClusterCount | Dieses Feld ist obligatorisch, und sein Inhalt ist (falls erforderlich) reserviert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das Feld ClusterCount. |
7.1.5.1 BitmapEntry [ 2 ] ... BitmapEntry [ ClusterCount+1-Felder ]
Jedes BitmapEntry-Feld in diesem Array stellt einen Cluster im Cluster heap dar. BitmapEntry 2 stellt den ersten Cluster [ ] im Cluster heap dar, und BitmapEntry ClusterCount+1 stellt den letzten Cluster [ ] im Cluster heap dar.
Die gültigen Werte für diese Felder sind:
0, der den entsprechenden Cluster als für die Zuordnung verfügbar beschreibt.
1, in dem der entsprechende Cluster als nicht für die Zuordnung verfügbar beschrieben wird (eine Clusterzuordnung kann den entsprechenden Cluster möglicherweise bereits nutzen, oder die aktive FAT-Datei beschreibt den entsprechenden Cluster möglicherweise als schlecht)
7.2 Tabellenverzeichniseintrag im Up-Case-Fall
Die Up-case-Tabelle definiert die Konvertierung von Klein- in Groß-/Kleinzeichen. Dies ist wichtig, da beim Verzeichniseintrag Dateiname (siehe Abschnitt 7.7) Unicode-Zeichen verwendet werden und beim ExFAT-Dateisystem die Groß-/Kleinschreibung nicht beachtet und die Groß-/Kleinschreibung beibehalten wird. Die Up-case-Tabelle ist im Cluster heap vorhanden (siehe Abschnitt 7.2.5) und verfügt über einen entsprechenden kritischen primären Verzeichniseintrag im Stammverzeichnis (siehe Tabelle 23). Die gültige Anzahl von Up-case-Tabellenverzeichniseinträgen ist 1.
Aufgrund der Beziehung zwischen der Up-Case-Tabelle und den Dateinamen sollten Implementierungen die Up-Case-Tabelle nur aufgrund von Formatvorgängen ändern.
Tabelle 23: TabellenverzeichnisIntry-Struktur mit Up-Case-Fall
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.2.1 wird der Inhalt definiert. |
| Reserved1 | 1 | 3 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
| TableChecksum | 4 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 7.2.2 wird der Inhalt definiert. |
| Reserved2 | 8 | 12 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
| FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 7.2.3 wird der Inhalt definiert. |
| DataLength | 24 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 7.2.4 wird der Inhalt definiert. |
7.2.1 EntryType-Feld
Das EntryType-Feld muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1).
7.2.1.1 TypeCode-Feld
Das TypeCode-Feld muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.1).
Für den Verzeichniseintrag Up-case Table ist der gültige Wert für dieses Feld. 2.
7.2.1.2 TypeImportance-Feld
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.2).
Für den Verzeichniseintrag Up-case Table ist der gültige Wert für dieses Feld. 0.
7.2.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.3).
7.2.1.4 InUse-Feld
Das Feld InUse muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.4).
7.2.2 TableChecksum-Feld
Das Feld TableChecksum enthält die Prüfsumme der Up-case-Tabelle (die in den Feldern FirstCluster und DataLength beschrieben wird). Implementierungen müssen überprüfen, ob der Inhalt dieses Felds gültig ist, bevor die Up-case-Tabelle verwendet wird.
Abbildung 3 TableChecksum-Berechnung
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 FirstCluster-Feld
Das FirstCluster-Feld muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.5).
Dieses Feld enthält den Index des ersten Clusters der Clusterkette, wie von FAT beschrieben, der die Up-case-Tabelle hostet.
7.2.4 DataLength-Feld
Das DataCluster-Feld muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.6).
7.2.5 Up-Case-Tabelle
Eine Up-Case-Tabelle ist eine Reihe von Unicode-Zeichenzuordnungen. Eine Zeichenzuordnung besteht aus einem 2-Byte-Feld, bei dem der Index des Felds in der Up-Case-Tabelle das Unicode-Zeichen darstellt, für das die 2-Byte-Case-Zeichenfolge verwendet werden soll, und das 2-Byte-Feld, das das Unicode-Zeichen mit voraufgekannten Zeichen darstellt.
Die ersten 128 Unicode-Zeichen verfügen über obligatorische Zuordnungen (siehe Tabelle 24). Eine Up-Case-Tabelle mit einer anderen Zeichenzuordnung für eines der ersten 128 Unicode-Zeichen ist ungültig.
Implementierungen, die nur Zeichen aus dem obligatorischen Zuordnungsbereich unterstützen, ignorieren möglicherweise die Zuordnungen der restlichen Up-Case-Tabelle. Solche Implementierungen dürfen beim Erstellen oder Umbenennen von Dateien nur Zeichen aus dem obligatorischen Zuordnungsbereich verwenden (siehe Abschnitt 7.7). Wenn sie vorhandene Dateinamen in eine neue Schreib schreibe, dürfen solche Implementierungen keine Zeichen aus dem nicht obligatorischen Zuordnungsbereich verwenden, sondern sie im resultierenden Dateinamen mit vorgeänderten Schreibfehlern intakt lassen (dies ist eine partielle Auf-Schreib-/Schreibmaschierung). Beim Vergleichen von Dateinamen müssen solche Implementierungen Dateinamen, die sich vom verglichenen Namen unterscheiden, nur durch Unicode-Zeichen aus dem nicht obligatorischen Zuordnungsbereich als gleichwertig behandeln. Obwohl solche Dateinamen nur potenziell äquivalent sind, können solche Implementierungen nicht sicherstellen, dass der Dateiname mit der vollständigen Hoch-/Hochsparung nicht mit dem zu vergleichenden Namen in Zusammenhang steht.
Tabelle 24 Erforderliche erste 128 Einträge in einer Up-Case-Tabelle
| Tabellenindex | + 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 |
(Hinweis: Einträge mit Nichtidentitäts-Up-Case-Zuordnungen sind fett formatiert.)
Beim Formatieren eines Volumes können Implementierungen eine Groß-/Kleinschreibungstabelle in einem komprimierten Format mithilfe der Identitätszuordnungskomprimierung generieren, da ein großer Teil des Unicode-Zeichenraums kein Groß-/Kleinschreibungskonzept aufgibt (was bedeutet, dass die Zeichen "Kleinbuchstaben" und "Großbuchstaben" gleichwertig sind). Implementierungen komprimieren eine Up-Case-Tabelle, indem sie eine Reihe von Identitätszuordnungen mit dem Wert FFFFh gefolgt von der Anzahl der Identitätszuordnungen darstellen.
Eine Implementierung kann beispielsweise die ersten 100 Zeichenzuordnungen (64h) mit den folgenden acht Einträgen einer komprimierten Up-Case-Tabelle darstellen:
FFFFh, 0061h, 0041h, 0042h, 0043h
Die ersten beiden Einträge geben an, dass die ersten 97 (61h) Zeichen (von 0000h bis 0060h) Identitätszuordnungen aufweisen. Die nachfolgenden Zeichen (0061h bis 0063h) werden den Zeichen 0041h bis 0043h zugeordnet.
Die Möglichkeit, beim Formatieren eines Volumes eine komprimierte Up-Case-Tabelle bereitzustellen, ist optional. Die Möglichkeit, sowohl eine nicht komprimierte als auch eine komprimierte Up-Case-Tabelle zu interpretieren, ist jedoch obligatorisch. Der Wert des TableChecksum-Felds entspricht immer der Art und Weise, wie die Up-Case-Tabelle auf dem Volume vorhanden ist, die entweder im komprimierten oder unkomprimierten Format vorliegen kann.
7.2.5.1 Empfohlene Up-Case-Tabelle
Beim Formatieren eines Volumes sollten Implementierungen die empfohlene Up-Case-Tabelle im komprimierten Format aufzeichnen (siehe Tabelle 25), für die der Wert des TableChecksum-Felds E619D30Dh ist.
Wenn eine Implementierung eine eigene Up-Case-Tabelle definiert , entweder komprimiert oder unkomprimiert, muss diese Tabelle den gesamten Unicode-Zeichenbereich abdecken (von zeichencodes 0000h bis einschließlich FFFFh).
Tabelle 25 Empfohlene Up-Case-Tabelle im komprimierten Format
| Rohoffset | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
|---|---|---|---|---|---|---|---|---|
| 0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
| 0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
| 0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
| 0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
| 0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
| 0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
| 0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
| 0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
| 0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
| 0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
| 0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
| 0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
| 0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
| 0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
| 0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
| 0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
| 0080h | 0080h | 0081h | 0082h | 0083h | 0084h | 0085h | 0086h | 0087h |
| 0088h | 0088h | 0089h | 008Ah | 008Bh | 008Ch | 008Dh | 008Eh | 008Fh |
| 0090h | 0090h | 0091h | 0092h | 0093h | 0094h | 0095h | 0096h | 0097h |
| 0098h | 0098h | 0099h | 009Ah | 009Bh | 009Ch | 009Dh | 009Eh | 009Fh |
| 00A0h | 00A0h | 00A1h | 00A2h | 00A3h | 00A4h | 00A5h | 00A6h | 00A7h |
| 00A8h | 00A8h | 00A9h | 00AAh | 00ABh | 00ACh | 00ADh | 00AEh | 00AFh |
| 00B0h | 00B0h | 00B1h | 00B2h | 00B3h | 00B4h | 00B5h | 00B6h | 00B7h |
| 00B8h | 00B8h | 00B9h | 00BAh | 00BBh | 00BCh | 00BDh | 00BEh | 00BFh |
| 00C0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
| 00C8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
| 00D0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00D7h |
| 00D8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 00DFh |
| 00E0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
| 00E8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
| 00F0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00F7h |
| 00F8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 0178h |
| 0100h | 0100h | 0100h | 0102h | 0102h | 0104h | 0104h | 0106h | 0106h |
| 0108h | 0108h | 0108h | 010Ah | 010Ah | 010Ch | 010Ch | 010Eh | 010Eh |
| 0110h | 0110h | 0110h | 0112h | 0112h | 0114h | 0114h | 0116h | 0116h |
| 0118h | 0118h | 0118h | 011Ah | 011Ah | 011Ch | 011Ch | 011Eh | 011Eh |
| 0120h | 0120h | 0120h | 0122h | 0122h | 0124h | 0124h | 0126h | 0126h |
| 0128h | 0128h | 0128h | 012Ah | 012Ah | 012Ch | 012Ch | 012Eh | 012Eh |
| 0130h | 0130h | 0131h | 0132h | 0132h | 0134h | 0134h | 0136h | 0136h |
| 0138h | 0138h | 0139h | 0139h | 013Bh | 013Bh | 013Dh | 013Dh | 013Fh |
| 0140h | 013Fh | 0141h | 0141h | 0143h | 0143h | 0145h | 0145h | 0147h |
| 0148h | 0147h | 0149h | 014Ah | 014Ah | 014Ch | 014Ch | 014Eh | 014Eh |
| 0150h | 0150h | 0150h | 0152h | 0152h | 0154h | 0154h | 0156h | 0156h |
| 0158h | 0158h | 0158h | 015Ah | 015Ah | 015Ch | 015Ch | 015Eh | 015Eh |
| 0160h | 0160h | 0160h | 0162h | 0162h | 0164h | 0164h | 0166h | 0166h |
| 0168h | 0168h | 0168h | 016Ah | 016Ah | 016Ch | 016Ch | 016Eh | 016Eh |
| 0170h | 0170h | 0170h | 0172h | 0172h | 0174h | 0174h | 0176h | 0176h |
| 0178h | 0178h | 0179h | 0179h | 017Bh | 017Bh | 017Dh | 017Dh | 017Fh |
| 0180h | 0243h | 0181h | 0182h | 0182h | 0184h | 0184h | 0186h | 0187h |
| 0188h | 0187h | 0189h | 018Ah | 018Bh | 018Bh | 018Dh | 018Eh | 018Fh |
| 0190h | 0190h | 0191h | 0191h | 0193h | 0194h | 01F6h | 0196h | 0197h |
| 0198h | 0198h | 0198h | 023Dh | 019Bh | 019Ch | 019Dh | 0220h | 019Fh |
| 01A0h | 01A0h | 01A0h | 01A2h | 01A2h | 01A4h | 01A4h | 01A6h | 01A7h |
| 01A8h | 01A7h | 01A9h | 01AAh | 01ABh | 01ACh | 01ACh | 01AEh | 01AFh |
| 01B0h | 01AFh | 01B1h | 01B2h | 01B3h | 01B3h | 01B5h | 01B5h | 01B7h |
| 01B8h | 01B8h | 01B8h | 01BAh | 01BBh | 01BCh | 01BCh | 01BEh | 01F7h |
| 01C0h | 01C0h | 01C1h | 01C2h | 01C3h | 01C4h | 01C5h | 01C4h | 01C7h |
| 01C8h | 01C8h | 01C7h | 01CAh | 01CBh | 01CAh | 01CDh | 01CDh | 01CFh |
| 01D0h | 01CFh | 01D1h | 01D1h | 01D3h | 01D3h | 01D5h | 01D5h | 01D7h |
| 01D8h | 01D7h | 01D9h | 01D9h | 01DBh | 01DBh | 018Eh | 01DEh | 01DEh |
| 01E0h | 01E0h | 01E0h | 01E2h | 01E2h | 01E4h | 01E4h | 01E6h | 01E6h |
| 01E8h | 01E8h | 01E8h | 01EAh | 01EAh | 01ECh | 01ECh | 01EEh | 01EEh |
| 01F0h | 01F0h | 01F1h | 01F2h | 01F1h | 01F4h | 01F4h | 01F6h | 01F7h |
| 01F8h | 01F8h | 01F8h | 01FAh | 01FAh | 01FCh | 01FCh | 01FEh | 01FEh |
| 0200h | 0200h | 0200h | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
| 0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
| 0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 0214h | 0216h | 0216h |
| 0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
| 0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | 0226h | 0226h |
| 0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
| 0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
| 0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
| 0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
| 0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
| 0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
| 0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
| 0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
| 0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
| 0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
| 0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
| 0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
| 0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
| 0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
| 0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
| 02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
| 02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
| 02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
| 02B8h | 02B8h | 02B9h | 02BAh | 02BBh | 02BCh | 02BDh | 02BEh | 02BFh |
| 02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
| 02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
| 02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
| 02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
| 02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
| 02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
| 02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
| 02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02FFh |
| 0300h | 0300h | 0301h | 0302h | 0303h | 0304h | 0305h | 0306h | 0307h |
| 0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
| 0310h | 0310h | 0311h | 0312h | 0313h | 0314h | 0315h | 0316h | 0317h |
| 0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
| 0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
| 0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
| 0330h | 0330h | 0331h | 0332h | 0333h | 0334h | 0335h | 0336h | 0337h |
| 0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
| 0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 0346h | 0347h |
| 0348h | 0348h | 0349h | 034Ah | 034Bh | 034Ch | 034Dh | 034Eh | 034Fh |
| 0350h | 0350h | 0351h | 0352h | 0353h | 0354h | 0355h | 0356h | 0357h |
| 0358h | 0358h | 0359h | 035Ah | 035Bh | 035Ch | 035Dh | 035Eh | 035Fh |
| 0360h | 0360h | 0361h | 0362h | 0363h | 0364h | 0365h | 0366h | 0367h |
| 0368h | 0368h | 0369h | 036Ah | 036Bh | 036Ch | 036Dh | 036Eh | 036Fh |
| 0370h | 0370h | 0371h | 0372h | 0373h | 0374h | 0375h | 0376h | 0377h |
| 0378h | 0378h | 0379h | 037Ah | 03FDh | 03FEh | 03FFh | 037Eh | 037Fh |
| 0380h | 0380h | 0381h | 0382h | 0383h | 0384h | 0385h | 0386h | 0387h |
| 0388h | 0388h | 0389h | 038Ah | 038Bh | 038Ch | 038Dh | 038Eh | 038Fh |
| 0390h | 0390h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
| 0398h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
| 03A0h | 03A0h | 03A1h | 03A2h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
| 03A8h | 03A8h | 03A9h | 03AAh | 03ABh | 0386h | 0388h | 0389h | 038Ah |
| 03B0h | 03B0h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
| 03B8h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
| 03C0h | 03A0h | 03A1h | 03A3h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
| 03C8h | 03A8h | 03A9h | 03AAh | 03ABh | 038Ch | 038Eh | 038Fh | 03CFh |
| 03D0h | 03D0h | 03D1h | 03D2h | 03D3h | 03D4h | 03D5h | 03D6h | 03D7h |
| 03D8h | 03D8h | 03D8h | 03DAh | 03DAh | 03DCh | 03DCh | 03DEh | 03DEh |
| 03E0h | 03E0h | 03E0h | 03E2h | 03E2h | 03E4h | 03E4h | 03E6h | 03E6h |
| 03E8h | 03E8h | 03E8h | 03EAh | 03EAh | 03ECh | 03ECh | 03EEh | 03EEh |
| 03F0h | 03F0h | 03F1h | 03F9h | 03F3h | 03F4h | 03F5h | 03F6h | 03F7h |
| 03F8h | 03F7h | 03F9h | 03FAh | 03FAh | 03FCh | 03FDh | 03FEh | 03FFh |
| 0400h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
| 0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
| 0410h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
| 0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
| 0420h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
| 0428h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
| 0430h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
| 0438h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
| 0440h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
| 0448h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
| 0450h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
| 0458h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
| 0460h | 0460h | 0460h | 0462h | 0462h | 0464h | 0464h | 0466h | 0466h |
| 0468h | 0468h | 0468h | 046Ah | 046Ah | 046Ch | 046Ch | 046Eh | 046Eh |
| 0470h | 0470h | 0470h | 0472h | 0472h | 0474h | 0474h | 0476h | 0476h |
| 0478h | 0478h | 0478h | 047Ah | 047Ah | 047Ch | 047Ch | 047Eh | 047Eh |
| 0480h | 0480h | 0480h | 0482h | 0483h | 0484h | 0485h | 0486h | 0487h |
| 0488h | 0488h | 0489h | 048Ah | 048Ah | 048Ch | 048Ch | 048Eh | 048Eh |
| 0490h | 0490h | 0490h | 0492h | 0492h | 0494h | 0494h | 0496h | 0496h |
| 0498h | 0498h | 0498h | 049Ah | 049Ah | 049Ch | 049Ch | 049Eh | 049Eh |
| 04A0h | 04A0h | 04A0h | 04A2h | 04A2h | 04A4h | 04A4h | 04A6h | 04A6h |
| 04A8h | 04A8h | 04A8h | 04AAh | 04AAh | 04ACh | 04ACh | 04AEh | 04AEh |
| 04B0h | 04B0h | 04B0h | 04B2h | 04B2h | 04B4h | 04B4h | 04B6h | 04B6h |
| 04B8h | 04B8h | 04B8h | 04BAh | 04BAh | 04BCh | 04BCh | 04BEh | 04BEh |
| 04C0h | 04C0h | 04C1h | 04C1h | 04C3h | 04C3h | 04C5h | 04C5h | 04C7h |
| 04C8h | 04C7h | 04C9h | 04C9h | 04CBh | 04CBh | 04CDh | 04CDh | 04C0h |
| 04D0h | 04D0h | 04D0h | 04D2h | 04D2h | 04D4h | 04D4h | 04D6h | 04D6h |
| 04D8h | 04D8h | 04D8h | 04DAh | 04DAh | 04DCh | 04DCh | 04DEh | 04DEh |
| 04E0h | 04E0h | 04E0h | 04E2h | 04E2h | 04E4h | 04E4h | 04E6h | 04E6h |
| 04E8h | 04E8h | 04E8h | 04EAh | 04EAh | 04ECh | 04ECh | 04EEh | 04EEh |
| 04F0h | 04F0h | 04F0h | 04F2h | 04F2h | 04F4h | 04F4h | 04F6h | 04F6h |
| 04F8h | 04F8h | 04F8h | 04FAh | 04FAh | 04FCh | 04FCh | 04FEh | 04FEh |
| 0500h | 0500h | 0500h | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
| 0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
| 0510h | 0510h | 0510h | 0512h | 0512h | 0514h | 0515h | 0516h | 0517h |
| 0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
| 0520h | 0520h | 0521h | 0522h | 0523h | 0524h | 0525h | 0526h | 0527h |
| 0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
| 0530h | 0530h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
| 0538h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
| 0540h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
| 0548h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
| 0550h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | 0557h |
| 0558h | 0558h | 0559h | 055Ah | 055Bh | 055Ch | 055Dh | 055Eh | 055Fh |
| 0560h | 0560h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
| 0568h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
| 0570h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
| 0578h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
| 0580h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | FFFFh |
| 0588h | 17F6h | 2C63h | 1D7Eh | 1D7Fh | 1D80h | 1D81h | 1D82h | 1D83h |
| 0590h | 1D84h | 1D85h | 1D86h | 1D87h | 1D88h | 1D89h | 1D8Ah | 1D8Bh |
| 0598h | 1D8Ch | 1D8Dh | 1D8Eh | 1D8Fh | 1D90h | 1D91h | 1D92h | 1D93h |
| 05A0h | 1D94h | 1D95h | 1D96h | 1D97h | 1D98h | 1D99h | 1D9Ah | 1D9Bh |
| 05A8h | 1D9Ch | 1D9Dh | 1D9Eh | 1D9Fh | 1DA0h | 1DA1h | 1DA2h | 1DA3h |
| 05B0h | 1DA4h | 1DA5h | 1DA6h | 1DA7h | 1DA8h | 1DA9h | 1DAAh | 1DABh |
| 05B8h | 1DACh | 1DADh | 1DAEh | 1DAFh | 1DB0h | 1DB1h | 1DB2h | 1DB3h |
| 05C0h | 1DB4h | 1DB5h | 1DB6h | 1DB7h | 1DB8h | 1DB9h | 1DBAh | 1DBBh |
| 05C8h | 1DBCh | 1DBDh | 1DBEh | 1DBFh | 1DC0h | 1DC1h | 1DC2h | 1DC3h |
| 05D0h | 1DC4h | 1DC5h | 1DC6h | 1DC7h | 1DC8h | 1DC9h | 1DCAh | 1DCBh |
| 05D8h | 1DCCh | 1DCDh | 1DCEh | 1DCFh | 1DD0h | 1DD1h | 1DD2h | 1DD3h |
| 05E0h | 1DD4h | 1DD5h | 1DD6h | 1DD7h | 1DD8h | 1DD9h | 1DDAh | 1DDBh |
| 05E8h | 1DDCh | 1DDDh | 1DDEh | 1DDFh | 1DE0h | 1DE1h | 1DE2h | 1DE3h |
| 05F0h | 1DE4h | 1DE5h | 1DE6h | 1DE7h | 1DE8h | 1DE9h | 1DEAh | 1DEBh |
| 05F8h | 1DECh | 1DEDh | 1DEEh | 1DEFh | 1DF0h | 1DF1h | 1DF2h | 1DF3h |
| 0600h | 1DF4h | 1DF5h | 1DF6h | 1DF7h | 1DF8h | 1DF9h | 1DFAh | 1DFBh |
| 0608h | 1DFCh | 1DFDh | 1DFEh | 1DFFh | 1E00h | 1E00h | 1E02h | 1E02h |
| 0610h | 1E04h | 1E04h | 1E06h | 1E06h | 1E08h | 1E08h | 1E0Ah | 1E0Ah |
| 0618h | 1E0Ch | 1E0Ch | 1E0Eh | 1E0Eh | 1E10h | 1E10h | 1E12h | 1E12h |
| 0620h | 1E14h | 1E14h | 1E16h | 1E16h | 1E18h | 1E18h | 1E1Ah | 1E1Ah |
| 0628h | 1E1Ch | 1E1Ch | 1E1Eh | 1E1Eh | 1E20h | 1E20h | 1E22h | 1E22h |
| 0630h | 1E24h | 1E24h | 1E26h | 1E26h | 1E28h | 1E28h | 1E2Ah | 1E2Ah |
| 0638h | 1E2Ch | 1E2Ch | 1E2Eh | 1E2Eh | 1E30h | 1E30h | 1E32h | 1E32h |
| 0640h | 1E34h | 1E34h | 1E36h | 1E36h | 1E38h | 1E38h | 1E3Ah | 1E3Ah |
| 0648h | 1E3Ch | 1E3Ch | 1E3Eh | 1E3Eh | 1E40h | 1E40h | 1E42h | 1E42h |
| 0650h | 1E44h | 1E44h | 1E46h | 1E46h | 1E48h | 1E48h | 1E4Ah | 1E4Ah |
| 0658h | 1E4Ch | 1E4Ch | 1E4Eh | 1E4Eh | 1E50h | 1E50h | 1E52h | 1E52h |
| 0660h | 1E54h | 1E54h | 1E56h | 1E56h | 1E58h | 1E58h | 1E5Ah | 1E5Ah |
| 0668h | 1E5Ch | 1E5Ch | 1E5Eh | 1E5Eh | 1E60h | 1E60h | 1E62h | 1E62h |
| 0670h | 1E64h | 1E64h | 1E66h | 1E66h | 1E68h | 1E68h | 1E6Ah | 1E6Ah |
| 0678h | 1E6Ch | 1E6Ch | 1E6Eh | 1E6Eh | 1E70h | 1E70h | 1E72h | 1E72h |
| 0680h | 1E74h | 1E74h | 1E76h | 1E76h | 1E78h | 1E78h | 1E7Ah | 1E7Ah |
| 0688h | 1E7Ch | 1E7Ch | 1E7Eh | 1E7Eh | 1E80h | 1E80h | 1E82h | 1E82h |
| 0690h | 1E84h | 1E84h | 1E86h | 1E86h | 1E88h | 1E88h | 1E8Ah | 1E8Ah |
| 0698h | 1E8Ch | 1E8Ch | 1E8Eh | 1E8Eh | 1E90h | 1E90h | 1E92h | 1E92h |
| 06A0h | 1E94h | 1E94h | 1E96h | 1E97h | 1E98h | 1E99h | 1E9Ah | 1E9Bh |
| 06A8h | 1E9Ch | 1E9Dh | 1E9Eh | 1E9Fh | 1EA0h | 1EA0h | 1EA2h | 1EA2h |
| 06B0h | 1EA4h | 1EA4h | 1EA6h | 1EA6h | 1EA8h | 1EA8h | 1EAAh | 1EAAh |
| 06B8h | 1EACh | 1EACh | 1EAEh | 1EAEh | 1EB0h | 1EB0h | 1EB2h | 1EB2h |
| 06C0h | 1EB4h | 1EB4h | 1EB6h | 1EB6h | 1EB8h | 1EB8h | 1EBAh | 1EBAh |
| 06C8h | 1EBCh | 1EBCh | 1EBEh | 1EBEh | 1EC0h | 1EC0h | 1EC2h | 1EC2h |
| 06D0h | 1EC4h | 1EC4h | 1EC6h | 1EC6h | 1EC8h | 1EC8h | 1ECAh | 1ECAh |
| 06D8h | 1ECCh | 1ECCh | 1ECEh | 1ECEh | 1ED0h | 1ED0h | 1ED2h | 1ED2h |
| 06E0h | 1ED4h | 1ED4h | 1ED6h | 1ED6h | 1ED8h | 1ED8h | 1EDAh | 1EDAh |
| 06E8h | 1EDCh | 1EDCh | 1EDEh | 1EDEh | 1EE0h | 1EE0h | 1EE2h | 1EE2h |
| 06F0h | 1EE4h | 1EE4h | 1EE6h | 1EE6h | 1EE8h | 1EE8h | 1EEAh | 1EEAh |
| 06F8h | 1EECh | 1EECh | 1EEEh | 1EEEh | 1EF0h | 1EF0h | 1EF2h | 1EF2h |
| 0700h | 1EF4h | 1EF4h | 1EF6h | 1EF6h | 1EF8h | 1EF8h | 1EFAh | 1EFBh |
| 0708h | 1EFCh | 1EFDh | 1EFEh | 1EFFh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
| 0710h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
| 0718h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
| 0720h | 1F1Ch | 1F1Dh | 1F16h | 1F17h | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
| 0728h | 1F1Ch | 1F1Dh | 1F1Eh | 1F1Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
| 0730h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
| 0738h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
| 0740h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
| 0748h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
| 0750h | 1F4Ch | 1F4Dh | 1F46h | 1F47h | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
| 0758h | 1F4Ch | 1F4Dh | 1F4Eh | 1F4Fh | 1F50h | 1F59h | 1F52h | 1F5Bh |
| 0760h | 1F54h | 1F5Dh | 1F56h | 1F5Fh | 1F58h | 1F59h | 1F5Ah | 1F5Bh |
| 0768h | 1F5Ch | 1F5Dh | 1F5Eh | 1F5Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
| 0770h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
| 0778h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1FBAh | 1FBBh | 1FC8h | 1FC9h |
| 0780h | 1FCAh | 1FCBh | 1FDAh | 1FDBh | 1FF8h | 1FF9h | 1FEAh | 1FEBh |
| 0788h | 1FFAh | 1FFBh | 1F7Eh | 1F7Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
| 0790h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
| 0798h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
| 07A0h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
| 07A8h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
| 07B0h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
| 07B8h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FB8h | 1FB9h | 1FB2h | 1FBCh |
| 07C0h | 1FB4h | 1FB5h | 1FB6h | 1FB7h | 1FB8h | 1FB9h | 1FBAh | 1FBBh |
| 07C8h | 1FBCh | 1FBDh | 1FBEh | 1FBFh | 1FC0h | 1FC1h | 1FC2h | 1FC3h |
| 07D0h | 1FC4h | 1FC5h | 1FC6h | 1FC7h | 1FC8h | 1FC9h | 1FCAh | 1FCBh |
| 07D8h | 1FC3h | 1FCDh | 1FCEh | 1FCFh | 1FD8h | 1FD9h | 1FD2h | 1FD3h |
| 07E0h | 1FD4h | 1FD5h | 1FD6h | 1FD7h | 1FD8h | 1FD9h | 1FDAh | 1FDBh |
| 07E8h | 1FDCh | 1FDDh | 1FDEh | 1FDFh | 1FE8h | 1FE9h | 1FE2h | 1FE3h |
| 07F0h | 1FE4h | 1FECh | 1FE6h | 1FE7h | 1FE8h | 1FE9h | 1FEAh | 1FEBh |
| 07F8h | 1FECh | 1FEDh | 1FEEh | 1FEFh | 1FF0h | 1FF1h | 1FF2h | 1FF3h |
| 0800h | 1FF4h | 1FF5h | 1FF6h | 1FF7h | 1FF8h | 1FF9h | 1FFAh | 1FFBh |
| 0808h | 1FF3h | 1FFDh | 1FFEh | 1FFFh | 2000h | 2001h | 2002h | 2003h |
| 0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
| 0818h | 200Ch | 200Dh | 200Eh | 200Fh | 2010h | 2011h | 2012h | 2013h |
| 0820h | 2014h | 2015h | 2016h | 2017h | 2018h | 2019h | 201Ah | 201Bh |
| 0828h | 201Ch | 201Dh | 201Eh | 201Fh | 2020h | 2021h | 2022h | 2023h |
| 0830h | 2024h | 2025h | 2026h | 2027h | 2028h | 2029h | 202Ah | 202Bh |
| 0838h | 202Ch | 202Dh | 202Eh | 202Fh | 2030h | 2031h | 2032h | 2033h |
| 0840h | 2034h | 2035h | 2036h | 2037h | 2038h | 2039h | 203Ah | 203Bh |
| 0848h | 203Ch | 203Dh | 203Eh | 203Fh | 2040h | 2041h | 2042h | 2043h |
| 0850h | 2044h | 2045h | 2046h | 2047h | 2048h | 2049h | 204Ah | 204Bh |
| 0858h | 204Ch | 204Dh | 204Eh | 204Fh | 2050h | 2051h | 2052h | 2053h |
| 0860h | 2054h | 2055h | 2056h | 2057h | 2058h | 2059h | 205Ah | 205Bh |
| 0868h | 205Ch | 205Dh | 205Eh | 205Fh | 2060h | 2061h | 2062h | 2063h |
| 0870h | 2064h | 2065h | 2066h | 2067h | 2068h | 2069h | 206Ah | 206Bh |
| 0878h | 206Ch | 206Dh | 206Eh | 206Fh | 2070h | 2071h | 2072h | 2073h |
| 0880h | 2074h | 2075h | 2076h | 2077h | 2078h | 2079h | 207Ah | 207Bh |
| 0888h | 207Ch | 207Dh | 207Eh | 207Fh | 2080h | 2081h | 2082h | 2083h |
| 0890h | 2084h | 2085h | 2086h | 2087h | 2088h | 2089h | 208Ah | 208Bh |
| 0898h | 208Ch | 208Dh | 208Eh | 208Fh | 2090h | 2091h | 2092h | 2093h |
| 08A0h | 2094h | 2095h | 2096h | 2097h | 2098h | 2099h | 209Ah | 209Bh |
| 08A8h | 209Ch | 209Dh | 209Eh | 209Fh | 20A0h | 20A1h | 20A2h | 20A3h |
| 08B0h | 20A4h | 20A5h | 20A6h | 20A7h | 20A8h | 20A9h | 20AAh | 20ABh |
| 08B8h | 20ACh | 20ADh | 20AEh | 20AFh | 20B0h | 20B1h | 20B2h | 20B3h |
| 08C0h | 20B4h | 20B5h | 20B6h | 20B7h | 20B8h | 20B9h | 20BAh | 20BBh |
| 08C8h | 20BCh | 20BDh | 20BEh | 20BFh | 20C0h | 20C1h | 20C2h | 20C3h |
| 08D0h | 20C4h | 20C5h | 20C6h | 20C7h | 20C8h | 20C9h | 20CAh | 20CBh |
| 08D8h | 20CCh | 20CDh | 20CEh | 20CFh | 20D0h | 20D1h | 20D2h | 20D3h |
| 08E0h | 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 | 2104h | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
| 0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 2113h |
| 0920h | 2114h | 2115h | 2116h | 2117h | 2118h | 2119h | 211Ah | 211Bh |
| 0928h | 211Ch | 211Dh | 211Eh | 211Fh | 2120h | 2121h | 2122h | 2123h |
| 0930h | 2124h | 2125h | 2126h | 2127h | 2128h | 2129h | 212Ah | 212Bh |
| 0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131h | 2132h | 2133h |
| 0940h | 2134h | 2135h | 2136h | 2137h | 2138h | 2139h | 213Ah | 213Bh |
| 0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
| 0950h | 2144h | 2145h | 2146h | 2147h | 2148h | 2149h | 214Ah | 214Bh |
| 0958h | 214Ch | 214Dh | 2132h | 214Fh | 2150h | 2151h | 2152h | 2153h |
| 0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
| 0968h | 215Ch | 215Dh | 215Eh | 215Fh | 2160h | 2161h | 2162h | 2163h |
| 0970h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
| 0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160h | 2161h | 2162h | 2163h |
| 0980h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
| 0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
| 0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
| 0998h | 24BBh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
| 09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
| 09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 0746h | 2C00h |
| 09B0h | 2C01h | 2C02h | 2C03h | 2C04h | 2C05h | 2C06h | 2C07h | 2C08h |
| 09B8h | 2C09h | 2C0Ah | 2C0Bh | 2C0Ch | 2C0Dh | 2C0Eh | 2C0Fh | 2C10h |
| 09C0h | 2C11h | 2C12h | 2C13h | 2C14h | 2C15h | 2C16h | 2C17h | 2C18h |
| 09C8h | 2C19h | 2C1Ah | 2C1Bh | 2C1Ch | 2C1Dh | 2C1Eh | 2C1Fh | 2C20h |
| 09D0h | 2C21h | 2C22h | 2C23h | 2C24h | 2C25h | 2C26h | 2C27h | 2C28h |
| 09D8h | 2C29h | 2C2Ah | 2C2Bh | 2C2Ch | 2C2Dh | 2C2Eh | 2C5Fh | 2C60h |
| 09E0h | 2C60h | 2C62h | 2C63h | 2C64h | 2C65h | 2C66h | 2C67h | 2C67h |
| 09E8h | 2C69h | 2C69h | 2C6Bh | 2C6Bh | 2C6Dh | 2C6Eh | 2C6Fh | 2C70h |
| 09F0h | 2C71h | 2C72h | 2C73h | 2C74h | 2C75h | 2C75h | 2C77h | 2C78h |
| 09F8h | 2C79h | 2C7Ah | 2C7Bh | 2C7Ch | 2C7Dh | 2C7Eh | 2C7Fh | 2C80h |
| 0A00h | 2C80h | 2C82h | 2C82h | 2C84h | 2C84h | 2C86h | 2C86h | 2C88h |
| 0A08h | 2C88h | 2C8Ah | 2C8Ah | 2C8Ch | 2C8Ch | 2C8Eh | 2C8Eh | 2C90h |
| 0A10h | 2C90h | 2C92h | 2C92h | 2C94h | 2C94h | 2C96h | 2C96h | 2C98h |
| 0A18h | 2C98h | 2C9Ah | 2C9Ah | 2C9Ch | 2C9Ch | 2C9Eh | 2C9Eh | 2CA0h |
| 0A20h | 2CA0h | 2CA2h | 2CA2h | 2CA4h | 2CA4h | 2CA6h | 2CA6h | 2CA8h |
| 0A28h | 2CA8h | 2CAAh | 2CAAh | 2CACh | 2CACh | 2CAEh | 2CAEh | 2CB0h |
| 0A30h | 2CB0h | 2CB2h | 2CB2h | 2CB4h | 2CB4h | 2CB6h | 2CB6h | 2CB8h |
| 0A38h | 2CB8h | 2CBAh | 2CBAh | 2CBCh | 2CBCh | 2CBEh | 2CBEh | 2CC0h |
| 0A40h | 2CC0h | 2CC2h | 2CC2h | 2CC4h | 2CC4h | 2CC6h | 2CC6h | 2CC8h |
| 0A48h | 2CC8h | 2CCAh | 2CCAh | 2CCCh | 2CCCh | 2CCEh | 2CCEh | 2CD0h |
| 0A50h | 2CD0h | 2CD2h | 2CD2h | 2CD4h | 2CD4h | 2CD6h | 2CD6h | 2CD8h |
| 0A58h | 2CD8h | 2CDAh | 2CDAh | 2CDCh | 2CDCh | 2CDEh | 2CDEh | 2CE0h |
| 0A60h | 2CE0h | 2CE2h | 2CE2h | 2CE4h | 2CE5h | 2CE6h | 2CE7h | 2CE8h |
| 0A68h | 2CE9h | 2CEAh | 2CEBh | 2CECh | 2CEDh | 2CEEh | 2CEFh | 2CF0h |
| 0A70h | 2CF1h | 2CF2h | 2CF3h | 2CF4h | 2CF5h | 2CF6h | 2CF7h | 2CF8h |
| 0A78h | 2CF9h | 2CFAh | 2CFBh | 2CFCh | 2CFDh | 2CFEh | 2CFFh | 10A0h |
| 0A80h | 10A1h | 10A2h | 10A3h | 10A4h | 10A5h | 10A6h | 10A7h | 10A8h |
| 0A88h | 10A9h | 10AAh | 10ABh | 10ACh | 10ADh | 10AEh | 10AFh | 10B0h |
| 0A90h | 10B1h | 10B2h | 10B3h | 10B4h | 10B5h | 10B6h | 10B7h | 10B8h |
| 0A98h | 10B9h | 10BAh | 10BBh | 10BCh | 10BDh | 10BEh | 10BFh | 10C0h |
| 0AA0h | 10C1h | 10C2h | 10C3h | 10C4h | 10C5h | FFFFh | D21Bh | FF21h |
| 0AA8h | FF22h | FF23h | FF24h | FF25h | FF26h | FF27h | FF28h | FF29h |
| 0AB0h | FF2Ah | FF2Bh | FF2Ch | FF2Dh | FF2Eh | FF2Fh | FF30h | FF31h |
| 0AB8h | FF32h | FF33h | FF34h | FF35h | FF36h | FF37h | FF38h | FF39h |
| 0AC0h | FF3Ah | FF5Bh | FF5Ch | FF5Dh | FF5Eh | FF5Fh | FF60h | FF61h |
| 0AC8h | FF62h | FF63h | FF64h | FF65h | FF66h | FF67h | FF68h | FF69h |
| 0AD0h | FF6Ah | FF6Bh | FF6Ch | FF6Dh | FF6Eh | FF6Fh | FF70h | FF71h |
| 0AD8h | FF72h | FF73h | FF74h | FF75h | FF76h | FF77h | FF78h | FF79h |
| 0AE0h | FF7Ah | FF7Bh | FF7Ch | FF7Dh | FF7Eh | FF7Fh | FF80h | FF81h |
| 0AE8h | FF82h | FF83h | FF84h | FF85h | FF86h | FF87h | FF88h | FF89h |
| 0AF0h | FF8Ah | FF8Bh | FF8Ch | FF8Dh | FF8Eh | FF8Fh | FF90h | FF91h |
| 0AF8h | FF92h | FF93h | FF94h | FF95h | FF96h | FF97h | FF98h | FF99h |
| 0B00h | FF9Ah | FF9Bh | FF9Ch | FF9Dh | FF9Eh | FF9Fh | FFA0h | FFA1h |
| 0B08h | FFA2h | FFA3h | FFA4h | FFA5h | FFA6h | FFA7h | FFA8h | FFA9h |
| 0B10h | FFAAh | FFABh | FFACh | FFADh | FFAEh | FFAFh | FFB0h | FFB1h |
| 0B18h | FFB2h | FFB3h | FFB4h | FFB5h | FFB6h | FFB7h | FFB8h | FFB9h |
| 0B20h | FFBAh | FFBBh | FFBCh | FFBDh | FFBEh | FFBFh | FFC0h | FFC1h |
| 0B28h | FFC2h | FFC3h | FFC4h | FFC5h | FFC6h | FFC7h | FFC8h | FFC9h |
| 0B30h | FFCAh | FFCBh | FFCCh | FFCDh | FFCEh | FFCFh | FFD0h | FFD1h |
| 0B38h | FFD2h | FFD3h | FFD4h | FFD5h | FFD6h | FFD7h | FFD8h | FFD9h |
| 0B40h | FFDAh | FFDBh | FFDCh | FFDDh | FFDEh | FFDFh | FFE0h | FFE1h |
| 0B48h | FFE2h | FFE3h | FFE4h | FFE5h | FFE6h | FFE7h | FFE8h | FFE9h |
| 0B50h | FFEAh | FFEBh | FFECh | FFEDh | FFEEh | FFEFh | FFF0h | FFF1h |
| 0B58h | FFF2h | FFF3h | FFF4h | FFF5h | FFF6h | FFF7h | FFF8h | FFF9h |
| 0B60h | FFFAh | FFFBh | FFFCh | FFFDh | FFFEh | FFFFh |
7.3 Volumebezeichnungsverzeichniseintrag
Die Volumebezeichnung ist eine Unicode-Zeichenfolge, mit der Endbenutzer ihre Speichervolumes unterscheiden können. Im ExFAT-Dateisystem ist die Volumebezeichnung als wichtiger primärer Verzeichniseintrag im Stammverzeichnis vorhanden (siehe Tabelle 26). Die gültige Anzahl von Volume Label-Verzeichniseinträgen liegt zwischen 0 und 1.
Tabelle 26 Volume label DirectoryEntry Structure
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.3.1 definiert seinen Inhalt. |
| CharacterCount | 1 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.3.2 definiert seinen Inhalt. |
| VolumeLabel | 2 | 22 | Dieses Feld ist obligatorisch, und Abschnitt 7.3.3 definiert seinen Inhalt. |
| Reserviert | 24 | 8 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
7.3.1 EntryType-Feld
Das Feld EntryType muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (siehe Abschnitt 6.3.1)angegeben ist.
7.3.1.1 TypCodefeld
Das TypeCode-Feld muss der Definition entsprechen, die in der Generischen primären DirectoryEntry-Vorlage angegeben ist (siehe Abschnitt 6.3.1.1).
Für den Verzeichniseintrag Volume Label ist der gültige Wert für dieses Feld. 3.
7.3.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.2).
Für den Verzeichniseintrag Volume Label ist der gültige Wert für dieses Feld. 0.
7.3.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (siehe Abschnitt 6.3.1.3)angegeben ist.
7.3.1.4 Feld "InUse"
Das Feld InUse muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.4).
7.3.2 CharacterCount-Feld
Das Feld CharacterCount muss die Länge der Unicode-Zeichenfolge enthalten, die das VolumeLabel-Feld enthält.
Der gültige Wertebereich für dieses Feld muss:
Mindestens 0, d.h. die Unicode-Zeichenfolge ist 0 Zeichen lang (entspricht keiner Volumebezeichnung).
Höchstens 11, was bedeutet, dass die Unicode-Zeichenfolge 11 Zeichen lang ist
7.3.3 VolumeLabel-Feld
Das Feld VolumeLabel muss eine Unicode-Zeichenfolge enthalten, bei der es sich um den benutzerfreundlichen Namen des Volumes handelt. Das VolumeLabel-Feld weist den gleichen Satz ungültiger Zeichen auf wie das FileName-Feld des Dateinamen-Verzeichniseintrags (siehe Abschnitt 7.7.3).
7.4 Dateiverzeichniseintrag
Dateiverzeichniseinträge beschreiben Dateien und Verzeichnisse. Dabei handelt es sich um wichtige primäre Verzeichniseinträge, und jedes Verzeichnis kann null oder mehr Dateiverzeichniseinträge enthalten (siehe Tabelle 27). Damit ein Dateiverzeichniseintrag gültig ist, muss genau ein Eintrag für das Verzeichnis der Stream-Erweiterung und mindestens ein Dateinamen-Verzeichniseintrag unmittelbar auf den Eintrag Dateiverzeichnis folgen (siehe Abschnitt 7.6 bzw. Abschnitt 7.7).
Tabelle 27: DateiverzeichnisEntry
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.4.1 definiert seinen Inhalt. |
| SecondaryCount | 1 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.4.2 definiert seinen Inhalt. |
| SetChecksum | 2 | 2 | Dieses Feld ist obligatorisch, und Abschnitt 7.4.3 definiert seinen Inhalt. |
| FileAttributes | 4 | 2 | Dieses Feld ist obligatorisch, und Abschnitt 7.4.4 definiert seinen Inhalt. |
| Reserved1 | 6 | 2 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
| CreateTimestamp | 8 | 4 | Dieses Feld ist obligatorisch, und Abschnitt 7.4.5 a> definiert seinen Inhalt. |
| LastModifiedTimestamp | 12 | 4 | Dieses Feld ist obligatorisch, und Abschnitt 7.4.6 definiert seinen Inhalt. |
| LastAccessedTimestamp | 16 | 4 | Dieses Feld ist obligatorisch, und Abschnitt 7.4.7 definiert seinen Inhalt. |
| Create10msIncrement | 20 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.4.5 a> definiert seinen Inhalt. |
| LastModified10msIncrement | 21 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.4.6 definiert seinen Inhalt. |
| CreateUtcOffset | 22 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.4.5 a> definiert seinen Inhalt. |
| LastModifiedUtcOffset | 23 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.6 wird der Inhalt definiert. |
| LastAccessedUtcOffset | 24 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.7 wird der Inhalt definiert. |
| Reserved2 | 25 | 7 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
7.4.1 EntryType-Feld
Das EntryType-Feld muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1).
7.4.1.1 TypeCode-Feld
Das TypeCode-Feld muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.1).
Für einen Dateiverzeichniseintrag ist der gültige Wert für dieses Feld 5.
7.4.1.2 TypeImportance-Feld
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.2).
Für einen Dateiverzeichniseintrag ist der gültige Wert für dieses Feld 0.
7.4.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.3).
7.4.1.4 InUse-Feld
Das Feld InUse muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.4).
7.4.2 SecondaryCount-Feld
Das Feld SecondaryCount muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.2).
7.4.3 SetChecksum-Feld
Das Feld SetChecksum muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (Generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.3).
7.4.4 FileAttributes-Feld
Das Feld FileAttributes enthält Flags (siehe Tabelle 28).
FileAttributes-Feldstruktur in Tabelle 28
| Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
|---|---|---|---|
| ReadOnly | 0 | 1 | Dieses Feld ist obligatorisch und entspricht der MS-DOS-Definition. |
| Ausgeblendet | 1 | 1 | Dieses Feld ist obligatorisch und entspricht der MS-DOS-Definition. |
| System | 2 | 1 | Dieses Feld ist obligatorisch und entspricht der MS-DOS-Definition. |
| Reserved1 | 3 | 1 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
| Verzeichnis | 4 | 1 | Dieses Feld ist obligatorisch und entspricht der MS-DOS-Definition. |
| Archivieren | 5 | 1 | Dieses Feld ist obligatorisch und entspricht der MS-DOS-Definition. |
| Reserved2 | 6 | 10 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
7.4.5 CreateTimestamp, Create10msIncrement und CreateUtcOffset Fields
In Kombination müssen die Felder CreateTimestamp und CreateTime10msIncrement das lokale Datum und die Uhrzeit der Erstellung der angegebenen Datei bzw. des angegebenen Verzeichnisses beschreiben. Das Feld CreateUtcOffset beschreibt den Offset des lokalen Datums und der Uhrzeit von UTC. Implementierungen müssen diese Felder bei der Erstellung des angegebenen Verzeichniseintragssets festlegen.
Diese Felder müssen den Definitionen der Felder Timestamp, 10msIncrement und UtcOffset entsprechen (siehe Abschnitt 7.4.8, Abschnitt 7.4.9und Abschnitt 7.4.10).
7.4.6 LastModifiedTimestamp, LastModified10msIncrement und LastModifiedUtcOffset Fields
In Kombination müssen die Felder LastModifiedTimestamp und LastModifiedTime10msIncrement das lokale Datum und die Uhrzeit beschreiben, zu der der Inhalt eines der Cluster, die dem angegebenen Verzeichniseintrag der Stream-Erweiterung zugeordnet sind, zuletzt geändert wurde. Das Feld LastModifiedUtcOffset beschreibt den Offset des lokalen Datums und der Uhrzeit von UTC. Implementierungen müssen diese Felder aktualisieren:
Nach dem Ändern des Inhalts eines der Cluster, die dem angegebenen Verzeichniseintrag für die Streamerweiterung zugeordnet sind (mit Ausnahme von Inhalten, die über den Punkt hinausgehen, den das Feld ValidDataLength beschreibt)
Beim Ändern der Werte der Felder ValidDataLength oder DataLength
Diese Felder müssen den Definitionen der Felder Timestamp, 10msIncrement und UtcOffset entsprechen (siehe Abschnitt 7.4.8, Abschnitt 7.4.9und Abschnitt 7.4.10).
7.4.7 LastAccessedTimestamp- und LastAccessedUtcOffset-Felder
Das Feld LastAccessedTimestamp muss das lokale Datum und die Uhrzeit des letzten Zugriffes auf den Inhalt eines der Cluster beschreiben, die dem angegebenen Verzeichniseintrag für die Streamerweiterung zugeordnet sind. Das Feld LastAccessedUtcOffset beschreibt den Offset des lokalen Datums und der Uhrzeit von UTC. Implementierungen müssen diese Felder aktualisieren:
Nach dem Ändern des Inhalts eines der Cluster, die dem angegebenen Verzeichniseintrag für die Streamerweiterung zugeordnet sind (mit Ausnahme von Inhalten, die außerhalb von ValidDataLength vorhanden sind)
Beim Ändern der Werte der Felder ValidDataLength oder DataLength
Implementierungen sollten diese Felder aktualisieren, nachdem sie den Inhalt eines der Cluster gelesen haben, die dem angegebenen Verzeichniseintrag für die Streamerweiterung zugeordnet sind.
Diese Felder müssen den Definitionen der Felder Timestamp und UtcOffset entsprechen (siehe Abschnitt 7.4.8 bzw. Abschnitt 7.4.10).
7.4.8 Zeitstempelfelder
Zeitstempelfelder beschreiben sowohl lokale Datums- als auch Uhrzeit bis zu einer Auflösung von zwei Sekunden (siehe Tabelle 29).
Tabelle 29: Zeitstempelfeldstruktur
| Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
|---|---|---|---|
| DoubleSeconds | 0 | 5 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.8.1 wird der Inhalt definiert. |
| Minute | 5 | 6 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.8.2 wird der Inhalt definiert. |
| Stunde | 11 | 5 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.8.3 wird der Inhalt definiert. |
| Tag | 16 | 5 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.8.4 wird der Inhalt definiert. |
| Month (Monat) | 21 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.8.5 wird der Inhalt definiert. |
| Year | 25 | 7 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.8.6 wird der Inhalt definiert. |
7.4.8.1 DoubleSeconds-Feld
Das Feld DoubleSeconds muss den Sekundenteil des Zeitstempelfelds in Zweisekunden-Vielfachen beschreiben.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
0, was 0 Sekunden darstellt
29, was 58 Sekunden darstellt.
Feld "7.4.8.2 Minute"
Das Feld Minute muss den Minutenteil des Felds Zeitstempel beschreiben.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
0, was 0 Minuten darstellt
59, was 59 Minuten entspricht
7.4.8.3 Stundenfeld
Das Feld Stunde muss den Stundenteil des Felds Zeitstempel beschreiben.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
0, was 00:00 Stunden darstellt.
23, was 23:00 Stunden darstellt
Feld "7.4.8.4 Day"
Das Feld Tag muss den Tagesteil des Felds Zeitstempel beschreiben.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
1, der erste Tag des angegebenen Monats
Der letzte Tag des angegebenen Monats (der gegebene Monat definiert die Anzahl der gültigen Tage)
Feld "7.4.8.5 Month"
Das Feld Monat muss den Monatsteil des Felds Zeitstempel beschreiben.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
Mindestens 1, was den Januar darstellt.
Mindestens 12, was Dezember darstellt.
7.4.8.6 Year Field
Im Feld Jahr muss der Jahresteil des Felds Zeitstempel relativ zum Jahr 1980 beschrieben werden. Dieses Feld stellt das Jahr 1980 mit dem Wert 0 und das Jahr 2107 mit dem Wert 127 dar.
Alle möglichen Werte für dieses Feld sind gültig.
7.4.9 10msIncrement Fields
10msIncrement-Felder müssen zusätzliche Zeitauflösung für ihre entsprechenden Zeitstempelfelder in Vielfachen von zehn Millisekunden bereitstellen.
Der gültige Wertebereich für diese Felder muss wie hier angegeben sein:
Mindestens 0, was 0 Millisekunden darstellt.
Mindestens 199, was 1.990 Millisekunden entspricht
7.4.10 UtcOffset-Felder
UtcOffset-Felder (siehe Tabelle 30) müssen den Offset von UTC zum lokalen Datum und zur lokalen Uhrzeit beschreiben, die die entsprechenden Felder Timestamp und 10msIncrement beschreiben. Der Offset von UTC zum lokalen Datum und zur lokalen Uhrzeit umfasst die Auswirkungen von Zeitzonen und anderen Datums-/Uhrzeitanpassungen, z. B. Sommerzeit und regionale Sommerzeitänderungen.
Tabelle 30 UtcOffset-Feldstruktur
| Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
|---|---|---|---|
| OffsetFromUtc | 0 | 7 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.10.1wird der Inhalt definiert. |
| OffsetValid | 7 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.10.2 wird der Inhalt definiert. |
7.4.10.1 OffsetFromUtc-Feld
Das Feld OffsetFromUtc muss den Offset von UTC des lokalen Datums und der Lokalen Uhrzeit beschreiben, die die zugehörigen Felder Timestamp und 10msIncrement enthalten. Dieses Feld beschreibt den Offset von UTC in Intervallen von 15 Minuten (siehe Tabelle 31).
Tabelle 31 Bedeutung der Werte des Felds OffsetFromUtc
| Wert | Äquivalente dezimale Dezimalstellen mit Vorzeichen | Beschreibung |
|---|---|---|
| 3Fh | 63 | Ortsdatum und -uhrzeit ist UTC + 15:45 |
| 3Eh | 62 | Ortsdatum und -uhrzeit ist UTC + 15:30 |
. . . |
. . . |
. . . |
| 01h | 1 | Ortsdatum und -uhrzeit ist UTC + 00:15 |
| 00h | 0 | Lokale Datums- und Uhrzeitzeit ist UTC |
| 7Fh | -1 | Ortsdatum und -uhrzeit ist UTC – 00:15 |
. . . |
. . . |
. . . |
| 41h | -63 | Ortsdatum und -uhrzeit ist UTC – 15:45 |
| 40h | -64 | Ortsdatum und -uhrzeit ist UTC – 16:00 Uhr |
Wie in der obigen Tabelle angegeben, sind alle möglichen Werte für dieses Feld gültig. Implementierungen sollten jedoch nur den Wert 00h für dieses Feld aufzeichnen, wenn:
Lokale Datums- und Uhrzeitwerte sind tatsächlich identisch mit UTC. In diesem Fall muss der Wert des Felds OffsetValid 1 sein.
Lokales Datum und lokale Uhrzeit sind nicht bekannt. In diesem Fall muss der Wert des Felds OffsetValid 1 sein, und Implementierungen sollten UTC als lokales Datum und lokale Uhrzeit betrachten.
UTC ist nicht bekannt. In diesem Fall muss der Wert des Felds OffsetValid 0 sein.
Wenn der lokale Datums- und Uhrzeitoffset von UTC kein Vielfaches von 15-Minuten-Intervallen ist, müssen Implementierungen 00h im Feld OffsetFromUtc aufzeichnen und UTC als lokales Datum und lokale Uhrzeit betrachten.
7.4.10.2 OffsetValid-Feld
Das Feld OffsetValid muss wie folgt beschreiben, ob der Inhalt des OffsetFromUtc-Felds gültig ist oder nicht:
0 bedeutet, dass der Inhalt des OffsetFromUtc-Felds ungültig ist.
und müssen 00h sein.
1 bedeutet, dass der Inhalt des OffsetFromUtc-Felds gültig ist.
Implementierungen sollten dieses Feld nur auf den Wert 0 festlegen, wenn UTC nicht zum Berechnen des Werts des OffsetFromUtc-Felds verfügbar ist. Wenn dieses Feld den Wert 0 enthält, müssen Implementierungen die Felder Timestamp und 10msIncrement so behandeln, dass sie den gleichen UTC-Offset wie das aktuelle lokale Datum und die aktuelle lokale Uhrzeit aufweisen.
7.5 Volume GUID Directory Entry
Der Volume-GUID-Verzeichniseintrag enthält eine GUID, die es Implementierungen ermöglicht, Volumes eindeutig und programmgesteuert zu unterscheiden. Die Volume-GUID ist als unbedenklicher primärer Verzeichniseintrag im Stammverzeichnis vorhanden (siehe Tabelle 32). Die gültige Anzahl von Volume GUID-Verzeichniseinträgen liegt zwischen 0 und 1.
Tabelle 32 Volume GUID DirectoryEntry
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.5.1 definiert seinen Inhalt. |
| SecondaryCount | 1 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.5.2 definiert seinen Inhalt. |
| SetChecksum | 2 | 2 | Dieses Feld ist obligatorisch, und Abschnitt 7.5.3 definiert seinen Inhalt. |
| GeneralPrimaryFlags | 4 | 2 | Dieses Feld ist obligatorisch, und Abschnitt 7.5.4 definiert seinen Inhalt. |
| VolumeGuid | 6 | 16 | Dieses Feld ist obligatorisch, und Abschnitt 7.5.5 definiert seinen Inhalt. |
| Reserviert | 22 | 10 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
7.5.1 EntryType-Feld
Das Feld EntryType muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (siehe Abschnitt 6.3.1)angegeben ist.
7.5.1.1 TypCodefeld
Das TypeCode-Feld muss der Definition entsprechen, die in der Generischen primären DirectoryEntry-Vorlage angegeben ist (siehe Abschnitt 6.3.1.1).
Für den Volume GUID-Verzeichniseintrag ist der gültige Wert für dieses Feld. 0.
7.5.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.2).
Für den Volume GUID-Verzeichniseintrag ist der gültige Wert für dieses Feld. 1.
7.5.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (siehe Abschnitt 6.3.1.3)angegeben ist.
7.5.1.4 Feld "InUse"
Das Feld InUse muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.1.4).
7.5.2 SecondaryCount-Feld
Das Feld SecondaryCount muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (generisches primäres Verzeichnis) angegeben ist (siehe Abschnitt 6.3.2).
Für den Volume GUID-Verzeichniseintrag ist der gültige Wert für dieses Feld. 0.
7.5.3 SetChecksum-Feld
Das SetChecksum-Feld muss der Definition in der Vorlage Generic Primary DirectoryEntry entsprechen (siehe Abschnitt 6.3.3).
7.5.4 GeneralPrimaryFlags-Feld
Das Feld GeneralPrimaryFlags muss der Definition in der Vorlage Generic Primary DirectoryEntry (siehe Abschnitt 6.3.4)entsprechen und den Inhalt des zu reservierenden CustomDefined-Felds definieren.
7.5.4.1 AllocationPossible-Feld
Das Feld AllocationPossible muss der Definition in der Vorlage Generic Primary DirectoryEntry entsprechen (siehe Abschnitt 6.3.4.1).
Für den Volume GUID-Verzeichniseintrag ist der gültige Wert für dieses Feld. 0.
7.5.4.2 NoFatChain-Feld
Das Feld NoFatChain muss der Definition in der Vorlage Generic Primary DirectoryEntry entsprechen (siehe Abschnitt 6.3.4.2).
7.5.5 VolumeGuid-Feld
Das Feld VolumeGuid muss eine GUID enthalten, die das angegebene Volume eindeutig identifiziert.
Alle möglichen Werte für dieses Feld sind gültig, mit Ausnahme der NULL-GUID, die {00000000-0000-0000-0000-000000000000} ist.
7.6 Eintrag des Streamerweiterungsverzeichnisses
Der Verzeichniseintrag der Streamerweiterung ist ein wichtiger sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 33). Die gültige Anzahl von Stream Extension-Verzeichniseinträgen in einem Dateiverzeichniseintragssatz ist 1. Darüber hinaus ist dieser Verzeichniseintrag nur gültig, wenn er unmittelbar auf den Eintrag Dateiverzeichnis folgt.
Tabelle 33: Verzeichnis der StreamerweiterungEntry
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.6.1 definiert seinen Inhalt. |
| GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.6.2 definiert seinen Inhalt. |
| Reserved1 | 2 | 1 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
| NameLength | 3 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.6.3 definiert seinen Inhalt. |
| NameHash | 4 | 2 | Dieses Feld ist obligatorisch, und in Abschnitt 7.6.4 wird der Inhalt definiert. |
| Reserved2 | 6 | 2 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
| ValidDataLength | 8 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 7.6.5 wird der Inhalt definiert. |
| Reserved3 | 16 | 4 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
| FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 7.6.6 wird der Inhalt definiert. |
| DataLength | 24 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 7.6.7 wird der Inhalt definiert. |
7.6.1 EntryType-Feld
Das EntryType-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres DirectoryEntry) angegeben ist (siehe Abschnitt 6.4.1).
7.6.1.1 TypeCode-Feld
Das TypeCode-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.1).
Für den Verzeichniseintrag Streamerweiterung ist der gültige Wert für dieses Feld 0.
7.6.1.2 TypeImportance-Feld
Das TypeImportance-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.2).
Für den Verzeichniseintrag Streamerweiterung ist der gültige Wert für dieses Feld 0.
7.6.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.4.1.3).
7.6.1.4 InUse-Feld
Das Feld InUse muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.4).
7.6.2 GeneralSecondaryFlags-Feld
Das Feld GeneralSecondaryFlags muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.2)angegeben ist, und definiert den Inhalt des zu reservierten CustomDefined-Felds.
7.6.2.1 ZuordnungPossible-Feld
Das Feld AllocationPossible muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.2.1).
Für den Verzeichniseintrag Streamerweiterung ist der gültige Wert für dieses Feld 1.
7.6.2.2 NoFatChain-Feld
Das NoFatChain-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres DirectoryEntry) angegeben ist (siehe Abschnitt 6.4.2.2).
7.6.3 NameLength-Feld
Das Feld NameLength muss die Länge der Unicode-Zeichenfolge enthalten, die die nachfolgenden Dateinamenverzeichniseinträge (siehe Abschnitt 7.7) zusammen enthalten.
Der gültige Wertebereich für dieses Feld muss wie hier angegeben sein:
Mindestens 1. Dies ist der kürzest mögliche Dateiname.
Mindestens 255, dies ist der längste mögliche Dateiname.
Der Wert des Felds NameLength wirkt sich auch auf die Anzahl der Dateinamenverzeichniseinträge aus (siehe Abschnitt 7.7).
7.6.4 NameHash-Feld
Das Feld NameHash muss einen 2-Byte-Hash (siehe Abbildung 4)des Dateinamens mit bis zuerster Fall enthalten. Dadurch können Implementierungen bei der Suche nach einer Datei nach Namen einen schnellen Vergleich durchführen. Wichtig ist, dass NameHash eine sichere Überprüfung eines Konflikts bietet. Implementierungen überprüfen alle NameHash-Übereinstimmungen mit einem Vergleich des Dateinamens mit voreinbestellungsbasiertem Wert.
Abbildung 4: NameHash-Berechnung
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 ValidDataLength-Feld
Das Feld ValidDataLength soll beschreiben, wie weit die Benutzerdaten des Datenstroms geschrieben wurden. Implementierungen müssen dieses Feld aktualisieren, wenn sie Daten weiter in den Datenstrom schreiben. Auf dem Speichermedium sind die Daten zwischen der gültigen Datenlänge und der Datenlänge des Datenstroms nicht definiert. Implementierungen müssen Nullen für Lesevorgänge zurückgeben, die über die gültige Datenlänge hinausgehen.
Wenn der entsprechende Dateiverzeichniseintrag ein Verzeichnis beschreibt, ist der einzige gültige Wert für dieses Feld gleich dem Wert des DataLength-Felds. Andernfalls muss der Bereich der gültigen Werte für dieses Feld wie der folgende sein:
Mindestens 0, d.&a; bedeutet, dass keine Benutzerdaten in den Datenstrom geschrieben wurden.
Dies bedeutet, dass Benutzerdaten bis zur gesamten Länge des Datenstroms geschrieben wurden.
7.6.6 FirstCluster-Feld
Das FirstCluster-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres DirectoryEntry) angegeben ist (siehe Abschnitt 6.4.3).
Dieses Feld muss den Index des ersten Clusters des Datenstroms enthalten, der die Benutzerdaten hostet.
7.6.7 DataLength-Feld
Das DataLength-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres DirectoryEntry) angegeben ist (siehe Abschnitt 6.4.4).
Wenn der entsprechende Dateiverzeichniseintrag ein Verzeichnis beschreibt, ist der gültige Wert für dieses Feld die gesamte Größe der zugeordneten Zuordnung in Bytes, die 0 sein kann. Darüber hinaus beträgt der Höchstwert für dieses Feld für Verzeichnisse 256 MB.
7.7 Dateinamenverzeichniseintrag
Verzeichniseinträge für Dateinamen sind wichtige sekundäre Verzeichniseinträge in Dateiverzeichniseintragssätzen (siehe Tabelle 34). Die gültige Anzahl von Dateinamen-Verzeichniseinträgen in einem Dateiverzeichniseintragssatz ist NameLength/15, aufgerundet auf die nächste ganze Zahl. Darüber hinaus sind Verzeichniseinträge für Dateinamen nur gültig, wenn sie unmittelbar auf den Verzeichniseintrag Streamerweiterung als aufeinander folgende Reihe folgen. Dateinamen-Verzeichniseinträge werden kombiniert, um den Dateinamen für den Dateiverzeichniseintragssatz zu bilden.
Alle unteren Namen eines bestimmten Verzeichniseintrags müssen eindeutige Verzeichniseintragssätze für Dateinamen haben. Das heißt, es können keine doppelten Datei- oder Verzeichnisnamen vorhanden sein, nachdem eine Up-Casing innerhalb eines Verzeichnisses erstellt wurde.
Table 34 File Name DirectoryEntry
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.7.1 wird der Inhalt definiert. |
| GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.7.2 wird der Inhalt definiert. |
| FileName | 2 | 30 | Dieses Feld ist obligatorisch, und in Abschnitt 7.7.3 wird der Inhalt definiert. |
7.7.1 EntryType-Feld
Das EntryType-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres DirectoryEntry) angegeben ist (siehe Abschnitt 6.4.1).
7.7.1.1 TypeCode-Feld
Das TypeCode-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.1).
Für den Verzeichniseintrag Streamerweiterung ist der gültige Wert für dieses Feld 1.
7.7.1.2 TypeImportance-Feld
Das TypeImportance-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.2).
Für den Verzeichniseintrag Streamerweiterung ist der gültige Wert für dieses Feld 0.
7.7.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.4.1.3).
7.7.1.4 InUse Field
Das Feld InUse muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.4).
7.7.2 GeneralSecondaryFlags-Feld
Das Feld GeneralSecondaryFlags muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.2)angegeben ist, und definiert den Inhalt des zu reservierten CustomDefined-Felds.
7.7.2.1 ZuordnungPossible-Feld
Das Feld AllocationPossible muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.2.1).
Für den Verzeichniseintrag Streamerweiterung ist der gültige Wert für dieses Feld 0.
7.7.2.2 NoFatChain-Feld
Das NoFatChain-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres DirectoryEntry) angegeben ist (siehe Abschnitt 6.4.2.2).
7.7.3 FileName-Feld
Das Feld FileName muss eine Unicode-Zeichenfolge enthalten, die ein Teil des Dateinamens ist. In der Reihenfolge, in der Dateinamen-Verzeichniseinträge in einem Dateiverzeichniseintragssatz vorhanden sind, werden die FileName-Felder verkettet, um den Dateinamen für den Dateiverzeichniseintragssatz zu bilden. Angesichts der Länge des Felds "FileName", 15 Zeichen und der maximalen Anzahl von Dateinamen-Verzeichniseinträgen (17) beträgt die maximale Länge des endgültigen, verketteten Dateinamens. 255.
Der verkettete Dateiname hat denselben Satz unzulässiger Zeichen wie andere FAT-basierte Dateisysteme (siehe Tabelle 35). Implementierungen sollten die nicht verwendeten Zeichen von FileName-Feldern auf den Wert 0000h festlegen.
Tabelle 35 Ungültige FileName-Zeichen
| Zeichencode | Beschreibung | Zeichencode | Beschreibung | Zeichencode | Beschreibung |
|---|---|---|---|---|---|
| 0000h | Steuerungscode | 0001h | Steuerungscode | 0002h | Steuerungscode |
| 0003h | Steuerungscode | 0004h | Steuerungscode | 0005h | Steuerungscode |
| 0006h | Steuerungscode | 0007h | Steuerungscode | 0008h | Steuerungscode |
| 0009h | Steuerungscode | 000Ah | Steuerungscode | 000Bh | Steuerungscode |
| 000Ch | Steuerungscode | 000Dh | Steuerungscode | 000Eh | Steuerungscode |
| 000Fh | Steuerungscode | 0010h | Steuerungscode | 0011h | Steuerungscode |
| 0012h | Steuerungscode | 0013h | Steuerungscode | 0014h | Steuerungscode |
| 0015h | Steuerungscode | 0016h | Steuerungscode | 0017h | Steuerungscode |
| 0018h | Steuerungscode | 0019h | Steuerungscode | 001Ah | Steuerungscode |
| 001Bh | Steuerungscode | 001Ch | Steuerungscode | 001Dh | Steuerungscode |
| 001Eh | Steuerungscode | 001Fh | Steuerungscode | 0022h | Anführungszeichen |
| 002Ah | Asterisk | 002Fh | Schrägstrich | 003Ah | Doppelpunkt |
| 003Ch | Kleiner-als-Zeichen | 003Eh | Größer-als-Zeichen | 003Fh | Fragezeichen |
| 005Ch | Umgekehrter Schrägstrich | 007Ch | Senkrechter Strich |
Die Dateinamen "." und ".." haben die besondere Bedeutung von "this directory" bzw. "containing directory". Implementierungen dürfen keinen dieser reservierten Dateinamen im Feld FileName aufzeichnen. Implementierungen können diese beiden Dateinamen jedoch in Verzeichnisauflistungen generieren, um auf das aufgeführte Verzeichnis und das enthaltende Verzeichnis zu verweisen.
Implementierungen können Datei- und Verzeichnisnamen auf den ASCII-Zeichensatz beschränken. Wenn ja, sollten sie ihre Zeichenverwendung auf den Bereich gültiger Zeichen in den ersten 128 Unicode-Einträgen beschränken. Sie müssen weiterhin Datei- und Verzeichnisnamen in Unicode auf dem Volume speichern und in/aus ASCII/Unicode übersetzen, wenn sie mit dem Benutzer verbunden sind.
7.8 Verzeichniseintrag der Anbietererweiterung
Der Verzeichniseintrag der Anbietererweiterung ist ein unbedenklicher sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 36). Ein Dateiverzeichniseintragssatz kann eine beliebige Anzahl von Verzeichniseinträgen der Anbietererweiterung bis zum Grenzwert der sekundären Verzeichniseinträge enthalten, abzüglich der Anzahl anderer sekundärer Verzeichniseinträge. Darüber hinaus sind Verzeichniseinträge der Anbietererweiterung nur gültig, wenn sie nicht den erforderlichen Einträgen für Das Stream-Erweiterungs- und Dateinamenverzeichnis vorangestellt sind.
Verzeichniseinträge der Anbietererweiterung ermöglichen es Anbietern, eindeutige, herstellerspezifische Verzeichniseinträge in einzelnen Dateiverzeichniseintragssätzen über das Feld VendorGuid zu erhalten (siehe Tabelle 36). Eindeutige Verzeichniseinträge ermöglichen es Anbietern effektiv, das exFAT-Dateisystem zu erweitern. Anbieter können den Inhalt des Felds VendorDefined definieren (siehe Tabelle 36). Anbieterimplementierungen können den Inhalt des Felds VendorDefined beibehalten und anbieterspezifische Funktionen bereitstellen.
Implementierungen, die die GUID eines Verzeichniseintrags der Anbietererweiterung nicht erkennen, müssen den Verzeichniseintrag wie jeden anderen nicht erkannten, unbedenklichen sekundären Verzeichniseintrag behandeln (siehe Abschnitt 8.2).
Tabelle 36 Verzeichnis der AnbietererweiterungEntry
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.8.1 definiert seinen Inhalt. |
| GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.8.2 definiert seinen Inhalt. |
| VendorGuid | 2 | 16 | Dieses Feld ist obligatorisch, und Abschnitt 7.8.3 definiert seinen Inhalt. |
| VendorDefined | 18 | 14 | Dieses Feld ist obligatorisch, und Anbieter können ihren Inhalt definieren. |
7.8.1 EntryType-Feld
Das Feld EntryType muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.1)angegeben ist.
7.8.1.1 TypCodefeld
Das Feld TypeCode muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.1).
Für den Verzeichniseintrag Vendor Extension ist der gültige Wert für dieses Feld 0.
7.8.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition in der Vorlage Generic Secondary DirectoryEntry entsprechen (siehe Abschnitt 6.4.1.2).
Für den Verzeichniseintrag Vendor Extension ist der gültige Wert für dieses Feld 1.
7.8.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition in der Vorlage Generic Secondary DirectoryEntry entsprechen (siehe Abschnitt 6.4.1.3).
7.8.1.4 Feld "InUse"
Das Feld InUse muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.4).
7.8.2 GeneralSecondaryFlags-Feld
Das Feld GeneralSecondaryFlags muss der Definition in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.2)entsprechen und den Inhalt des zu reservierenden CustomDefined-Felds definieren.
7.8.2.1 AllocationPossible-Feld
Das Feld AllocationPossible muss der Definition in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.2.1)entsprechen.
Für den Verzeichniseintrag Vendor Extension ist der gültige Wert für dieses Feld 0.
7.8.2.2 NoFatChain-Feld
Das Feld NoFatChain muss der Definition in der Vorlage Generic Secondary DirectoryEntry entsprechen (siehe Abschnitt 6.4.2.2).
7.8.3 VendorGuid-Feld
Das Feld VendorGuid muss eine GUID enthalten, die die angegebene Anbietererweiterung eindeutig identifiziert.
Alle möglichen Werte für dieses Feld sind gültig, mit Ausnahme der NULL-GUID, die {00000000-0000-0000-0000-000000000000} ist. Anbieter sollten jedoch ein GUID-generierungstool wie GuidGen.exe verwenden, um eine GUID auszuwählen, wenn sie ihre Erweiterungen definieren.
Der Wert dieses Felds bestimmt die herstellerspezifische Struktur des Felds VendorDefined.
7.9 Eintrag "Anbieterzuordnungsverzeichnis"
Der Verzeichniseintrag Vendor Allocation ist ein unbedenklicher sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 37). Ein Dateiverzeichniseintragssatz kann eine beliebige Anzahl von Verzeichniseinträgen für die Anbieterzuordnung enthalten, bis zum Grenzwert für sekundäre Verzeichniseinträge, abzüglich der Anzahl anderer sekundärer Verzeichniseinträge. Darüber hinaus sind Verzeichniseinträge der Anbieterzuordnung nur gültig, wenn sie den erforderlichen Einträgen für Streamerweiterung und Dateinamenverzeichnis nicht vorangestellt sind.
Anbieterzuordnungsverzeichniseinträge ermöglichen es Anbietern, eindeutige, herstellerspezifische Verzeichniseinträge in einzelnen Dateiverzeichniseintragssätzen über das Feld VendorGuid zu erhalten (siehe Tabelle 37). Eindeutige Verzeichniseinträge ermöglichen es Anbietern effektiv, das exFAT-Dateisystem zu erweitern. Anbieter können ggf. den Inhalt der zugeordneten Cluster definieren. Anbieterimplementierungen können ggf. den Inhalt der zugeordneten Cluster beibehalten und anbieterspezifische Funktionen bereitstellen.
Implementierungen, die die GUID eines Verzeichniseintrags für die Anbieterzuordnung nicht erkennen, müssen den Verzeichniseintrag wie jeden anderen nicht erkannten nicht erkannten eintragen des sekundären sekundären Verzeichnisses behandeln (siehe Abschnitt 8.2).
Tabelle 37 Vendor Allocation DirectoryEntry
| Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
|---|---|---|---|
| EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.9.1 definiert seinen Inhalt. |
| GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.9.2 definiert seinen Inhalt. |
| VendorGuid | 2 | 16 | Dieses Feld ist obligatorisch, und Abschnitt 7.9.3 definiert seinen Inhalt. |
| VendorDefined | 18 | 2 | Dieses Feld ist obligatorisch, und Anbieter können seinen Inhalt definieren. |
| FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 7.9.4 wird der Inhalt definiert. |
| DataLength | 24 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 7.9.5 wird der Inhalt definiert. |
7.9.1 EntryType-Feld
Das EntryType-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres DirectoryEntry) angegeben ist (siehe Abschnitt 6.4.1).
7.9.1.1 TypeCode-Feld
Das TypeCode-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.1).
Für den Verzeichniseintrag Vendor Allocation ist der gültige Wert für dieses Feld 1.
7.9.1.2 TypeImportance-Feld
Das TypeImportance-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.2).
Für den Verzeichniseintrag Vendor Allocation ist der gültige Wert für dieses Feld 1.
7.9.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.4.1.3).
7.9.1.4 InUse Field
Das Feld InUse muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.1.4).
7.9.2 GeneralSecondaryFlags-Feld
Das Feld GeneralSecondaryFlags muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.2)angegeben ist, und definiert den Inhalt des zu reservierten CustomDefined-Felds.
7.9.2.1 ZuordnungPossible-Feld
Das Feld AllocationPossible muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres Verzeichnis) angegeben ist (siehe Abschnitt 6.4.2.1).
Für den Verzeichniseintrag Vendor Allocation ist der gültige Wert für dieses Feld 1.
7.9.2.2 NoFatChain-Feld
Das NoFatChain-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres DirectoryEntry) angegeben ist (siehe Abschnitt 6.4.2.2).
7.9.3 VendorGuid-Feld
Das Feld VendorGuid muss eine GUID enthalten, die die bestimmte Anbieterzuordnung eindeutig identifiziert.
Alle möglichen Werte für dieses Feld sind gültig, mit Ausnahme der NULL-GUID, die {00000000-0000-0000-0000-000000000000} ist. Anbieter sollten jedoch ein GUID-generierendes Tool verwenden, z. B. GuidGen.exe, um eine GUID auszuwählen, wenn sie ihre Erweiterungen definieren.
Der Wert dieses Felds bestimmt die herstellerspezifische Struktur des Inhalts der zugeordneten Cluster, sofern vorhanden.
7.9.4 FirstCluster-Feld
Das FirstCluster-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres DirectoryEntry) angegeben ist (siehe Abschnitt 6.4.3).
7.9.5 DataLength-Feld
Das DataLength-Feld muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (Generisches sekundäres DirectoryEntry) angegeben ist (siehe Abschnitt 6.4.4).
7.10 TexFAT Padding Directory Entry
Diese Spezifikation, exFAT Revision 1.00 File System Basic Specification, definiert den TexFAT Padding-Verzeichniseintrag nicht. Der Typcode ist jedoch 1 und die Typ wichtigkeit 1. Implementierungen dieser Spezifikation müssen TexFAT Padding-Verzeichniseinträge genauso behandeln wie alle anderen nicht unbekannten, unbedenklichen primären Verzeichniseinträge. Implementierungen dürfen keine TexFAT Padding-Verzeichniseinträge verschieben.
8 Hinweise zur Implementierung
8.1 Empfohlene Schreibbestellung
Implementierungen sollten sicherstellen, dass das Volume so resilient wie möglich gegen Stromausfälle und andere unvermeidbare Fehler ist. Wenn Sie neue Verzeichniseinträge erstellen oder Clusterzuordnungen ändern, sollten Implementierungen in der Regel die folgende Schreib reihenfolge befolgen:
Legen Sie den Wert des Felds VolumeDirty auf 1 fest.
Aktualisieren Sie bei Bedarf das aktive FAT.
Aktualisieren der aktiven Zuordnungsbitmap
Erstellen oder Aktualisieren des Verzeichniseintrags, falls erforderlich
Löschen Sie den Wert des Felds VolumeDirty auf 0, wenn der Wert vor dem ersten Schritt 0 war.
Beim Löschen von Verzeichniseinträgen oder dem Freischreiben von Clusterzuordnungen sollten Implementierungen die folgende Schreib reihenfolge befolgen:
Legen Sie den Wert des Felds VolumeDirty auf 1 fest.
Löschen oder aktualisieren Sie bei Bedarf den Verzeichniseintrag.
Aktualisieren Sie bei Bedarf das aktive FAT.
Aktualisieren der aktiven Zuordnungsbitmap
Löschen Sie den Wert des Felds VolumeDirty auf 0, wenn der Wert vor dem ersten Schritt 0 war.
8.2 Auswirkungen von unbekannten Verzeichniseinträgen
Zukünftige ExFAT-Spezifikationen mit der gleichen Hauptrevisionsnummer 1 und einer kleineren Revisionsnummer, die höher als 0 ist, können neue unbedenkliche primäre, kritische sekundäre und unbedenkliche sekundäre Verzeichniseinträge definieren. Nur exFAT-Spezifikationen einer höheren Hauptrevisionsnummer können neue kritische primäre Verzeichniseinträge definieren. Implementierungen dieser Spezifikation, exFAT Revision 1.00 File System Basic Specification, sollten in der Lage sein, ein beliebiges ExFAT-Volume der Hauptrevisionsnummer 1 und eine kleinere Revisionsnummer ein- und darauf zu zugreifen. Dies stellt Szenarien vor, in denen eine Implementierung auf Verzeichniseinträge stoßen kann, die sie nicht erkennt. Im Folgenden werden die Auswirkungen dieser Szenarien beschrieben:
Das Vorhandensein von unbekannten kritischen primären Verzeichniseinträgen im Stammverzeichnis macht das Volume ungültig. Das Vorhandensein eines kritischen primären Verzeichniseintrags mit Ausnahme von Dateiverzeichniseinträgen in einem anderen Verzeichnis als dem Stammverzeichnis macht das Hostverzeichnis ungültig.
Implementierungen dürfen nicht unbekannte, unbedenkliche primäre Verzeichniseinträge oder ihre zugeordneten Clusterzuordnungen nicht ändern. Beim Löschen eines Verzeichnisses und nur beim Löschen eines Verzeichnisses löschen Implementierungen jedoch nicht unbekannte, unbedenkliche primäre Verzeichniseinträge und geben alle zugeordneten Clusterzuordnungen frei( falls vorhanden).
Implementierungen dürfen nicht unbekannte kritische sekundäre Verzeichniseinträge oder ihre zugeordneten Clusterzuordnungen nicht ändern. Das Vorhandensein von mindestens einem unbekannten kritischen sekundären Verzeichniseintrag in einem Verzeichniseintragssatz macht den gesamten Verzeichniseintragssatz unerkannt. Beim Löschen eines Verzeichniseintragssets, der mindestens einen unbekannten kritischen sekundären Verzeichniseintrag enthält, geben Implementierungen alle Clusterzuordnungen frei, sofern vorhanden, die nicht unbekannten kritischen sekundären Verzeichniseinträgen zugeordnet sind. Wenn der Verzeichniseintragssatz ein Verzeichnis beschreibt, können Implementierungen außerdem Folgendes:
Durchlaufen des Verzeichnisses
Aufzählen der verzeichniseinträge, die sie enthält
Löschen enthaltener Verzeichniseinträge
Verschieben enthaltener Verzeichniseinträge in ein anderes Verzeichnis
Implementierungen dürfen jedoch nicht:
Ändern sie enthaltene Verzeichniseinträge mit Ausnahme von "delete", wie bereits erwähnt.
Erstellen neuer eigenständiger Verzeichniseinträge
Öffnen Sie eigenständige Verzeichniseinträge, mit Ausnahme von "traverse" und "enumerate", wie bereits erwähnt.
Implementierungen dürfen nicht unbekannte, unbedenkliche sekundäre Verzeichniseinträge oder ihre zugeordneten Clusterzuordnungen nicht ändern. Implementierungen sollten unbekannte, unbedenkliche sekundäre Verzeichniseinträge ignorieren. Beim Löschen eines Verzeichniseintragssets müssen Implementierungen alle Clusterzuordnungen(sofern vorhanden) freistellen, die nicht unbekannten, unbedenklichen sekundären Verzeichniseinträgen zugeordnet sind.
9 Dateisystemgrenzwerte
9.1 Sektorgrößenbeschränkungen
Das Feld BytesPerSectorShift definiert die Größenbeschränkungen für den unteren und oberen Sektor (die als untere Grenze ausgewertet werden: 512 Byte; Obergrenze: 4.096 Byte).
9.2 Grenzwerte für die Clustergröße
Das Feld SectorPerClusterShift definiert die unteren und oberen Clustergrößenlimits ( untere Grenze: 1 Sektor; Obergrenze: 25 -- BytesPerSectorShift-Sektoren, die zu 32 MB ausgewertet werden).
9.3 Größenbeschränkungen für Clusterhaps
Der Cluster heap muss mindestens genügend Speicherplatz zum Hosten der folgenden grundlegenden Dateisystemstrukturen enthalten: das Stammverzeichnis, alle Zuordnungsbitmaps und die Up-case-Tabelle.
Der untere Grenzwert für die Cluster heap-Größe ist eine Funktion der unteren Größenbeschränkung für jede der grundlegenden Dateisystemstrukturen, die sich im Cluster heap befinden. Selbst bei einem klein möglichen Cluster (512 Bytes) benötigt jede der grundlegenden Dateisystemstrukturen nicht mehr als einen Cluster. Daher ist die untere Grenze: 2 + NumberOfFats-Cluster, die je nach Wert des NumberOfFats-Felds entweder zu 3 oder 4 Clustern ausgewertet werden.
Die Obergrenze für die Cluster heap-Größe ist eine einfache Funktion der maximal möglichen Anzahl von Clustern, die im ClusterCount-Feld definiert wird (Obergrenze: 2 32bis 11 Cluster). Unabhängig von der Clustergröße verfügt ein solcher Clusterhap über genügend Speicherplatz, um mindestens die grundlegenden Dateisystemstrukturen zu hosten.
9.4 Volumegrößenlimits
Das VolumeLength-Feld definiert die unteren und oberen Volumegrößenlimits (untere Grenze: 2 20/2BytesPerSectorShift-Sektoren, die zu 1 MB ausgewertet werden; Obergrenze: 2 64bis 1 Sektoren, die bei einer möglichst großen Sektorgröße ungefähr 64VERwertt). Diese Spezifikation empfiehlt jedoch nicht mehr als2 24bis 2 Cluster im Cluster heap (siehe Abschnitt 3.1.9). Daher ist die empfohlene Obergrenze für ein Volume: ClusterHeapOffset + (224- 2) * 2SectorsPerClusterShift. Angesichts der größtmöglichen Clustergröße von 32 MB und der Annahme, dass ClusterHeapOffset 96 MB beträgt (ausreichend Speicherplatz für die Bereiche Haupt- und Sicherungsstart und nur das erste FAT), wird die empfohlene Obergrenze eines Volumes auf ca. 512 TB ausgewertet.
9.5 Grenzwerte für die Verzeichnisgröße
Im Feld DataLength des Eintrags Stream Extension directory (Streamerweiterungsverzeichnis) werden die unteren und oberen Grenzwerte für die Verzeichnisgröße (unterer Grenzwert: 0 Byte; Obergrenze: 256 MB) definiert. Dies bedeutet, dass ein Verzeichnis bis zu 8.388.608 Verzeichniseinträge hosten kann (jeder Verzeichniseintrag verbraucht 32 Bytes). Bei der kleinstmöglichen Dateiverzeichniseintragsmenge, drei Verzeichniseinträgen, kann ein Verzeichnis bis zu 2.796.202 Dateien hosten.
10 Anhang
10.1 Globally Unique Identifiers (GUIDs)
Eine GUID ist die Microsoft-Implementierung eines universell eindeutigen Bezeichners. Eine GUID ist ein 128-Bit-Wert, der aus einer Gruppe von acht Hexadezimalziffern besteht, gefolgt von drei Gruppen mit jeweils 4 Hexadezimalziffern und einer Gruppe von 12 Hexadezimalziffern, z.B. {6B29FC40-CA47-1067-B31D-00DD010662DA} (siehe Tabelle 38).
Guid-Struktur in Tabelle 38
| Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
|---|---|---|---|
| Data1 | 0 | 4 | Dieses Feld ist obligatorisch und enthält die vier Bytes aus der ersten Gruppe der GUID (6B29FC40h aus dem Beispiel). |
| Data2 | 4 | 2 | Dieses Feld ist obligatorisch und enthält die beiden Bytes aus der zweiten Gruppe der GUID (CA47h aus dem Beispiel). |
| Data3 | 6 | 2 | Dieses Feld ist obligatorisch und enthält die beiden Bytes aus der dritten Gruppe der GUID (1067h aus dem Beispiel). |
| Data4[0] | 8 | 1 | Dieses Feld ist obligatorisch und enthält das wichtigste Byte aus der vierten Gruppe der GUID (B3h aus dem Beispiel). |
| Data4[1] | 9 | 1 | Dieses Feld ist obligatorisch und enthält das am wenigsten signifikante Byte aus der vierten Gruppe der GUID (1Dh aus dem Beispiel). |
| Data4[2] | 10 | 1 | Dieses Feld ist obligatorisch und enthält das erste Byte aus der fünften Gruppe der GUID (00h aus dem Beispiel). |
| Data4[3] | 11 | 1 | Dieses Feld ist obligatorisch und enthält das zweite Byte aus der fünften Gruppe der GUID (DDh aus dem Beispiel). |
| Data4[4] | 12 | 1 | Dieses Feld ist obligatorisch und enthält das dritte Byte aus der fünften Gruppe der GUID (01h aus dem Beispiel). |
| Data4[5] | 13 | 1 | Dieses Feld ist obligatorisch und enthält das vierte Byte aus der fünften Gruppe der GUID (06h aus dem Beispiel). |
| Data4[6] | 14 | 1 | Dieses Feld ist obligatorisch und enthält das fünfte Byte aus der fünften Gruppe der GUID (62h aus dem Beispiel). |
| Data4[7] | 15 | 1 | Dieses Feld ist obligatorisch und enthält das sechste Byte aus der fünften Gruppe der GUID (DAh aus dem Beispiel). |
10.2 Partitionstabellen
Um die Interoperabilität von exFAT-Volumes in einer vielzahl von Verwendungsszenarien sicherzustellen, sollten Implementierungen den Partitionstyp 07h für partitionierten MBR-Speicher und die Partitions-GUID {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} für partitionierten GPT-Speicher verwenden.
11 Änderungsverlauf der Dokumentation
In Tabelle 39 wird der Verlauf der Releases, Korrekturen an, Ergänzungen zu, Entfernungen aus und Erläuterungen zu diesem Dokument beschrieben.
Änderungsverlauf der Dokumentation in Tabelle 39
| Date | Beschreibung der Änderung |
|---|---|
| 08-Jan-2008 | Erste Version der Basic-Spezifikation, die Folgendes umfasst:
|
| 08-Jun-2008 | Zweite Version der Basic-Spezifikation, die die folgenden Änderungen enthält:
|
| 01-Oct-2008 | Drittes Release der Basic-Spezifikation, das die folgenden Änderungen enthält:
|
| 01-Jan-2009 | Viertes Release der Basic-Spezifikation, das die folgenden Änderungen enthält:
|
| 02-Sep-2009 | Fünfte Version der Basic-Spezifikation, die die folgenden Änderungen enthält:
|
| 24-Feb-2010 | Sechste Version der Basic-Spezifikation, die die folgenden Änderungen enthält:
|
| 26-Aug-2019 | Dies ist die siebente Version der Basic-Spezifikation, die die folgenden Änderungen enthält:
|