exFAT-Dateisystemspezifikation
1 Einführung
Das exFAT-Dateisystem ist der Nachfolger von FAT32 in der FAT-Dateisystemfamilie. Diese Spezifikation beschreibt das exFAT-Dateisystem und enthält alle Informationen, 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 von FAT-basierten Dateisystemen bei.
Zwei der Stärken von FAT-basierten Dateisystemen sind ihre relative Einfachheit und einfache Implementierung. Im Sinne 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 Größe von bis zu 32 MB und ermöglicht somit sehr große Speichergeräte.
Integration der Erweiterbarkeit für zukünftige Innovationen.
Das exFAT-Dateisystem integriert Erweiterbarkeit in sein Design, sodass das Dateisystem mit Neuerungen im Speicher und Änderungen in der Nutzung Schritt halten kann.
1.2 Spezifische Terminologie
Im Rahmen dieser Spezifikation haben bestimmte Begriffe (siehe Tabelle 1) eine besondere 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 "shall" verwendet, um ein Verhalten zu beschreiben, das obligatorisch ist. |
Optional | Diese Spezifikation verwendet den Begriff "sollte", um ein Verhalten zu beschreiben, das sie dringend empfiehlt, aber nicht obligatorisch macht. |
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 von einer Implementierung geändert werden soll, und muss gemäß der Beschreibung dieser Spezifikation interpretiert werden. |
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 entsprechend der Beschreibung ändern und interpretieren. |
Nicht definiert | Dieser Begriff beschreibt Feld- oder Strukturinhalte, die eine Implementierung bei Bedarf ändern kann (d. h. beim Festlegen von umgebenden Feldern oder Strukturen klar auf Null) und darf nicht so interpretiert werden, dass sie eine bestimmte Bedeutung haben. |
Reserviert | Dieser Begriff beschreibt Feld- oder Strukturinhalte, die Folgendes implementieren:
|
1.3 Volltext allgemeiner Akronyme
Diese Spezifikation verwendet Akronyme, die in der Pc-Industrie häufig verwendet werden (siehe Tabelle 2).
Tabelle 2 Volltext allgemeiner Akronyme
Akronym | Volltext |
---|---|
ASCII | Amerikanischer Standardcode für Den Informationsaustausch |
BIOS | Basic Input Output System |
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 | Globally Unique Identifier (siehe Abschnitt 10.1) |
INT | Interrupt |
MBR | Master Boot Record |
texFAT | Transaktionssichere exFAT |
UTC | Koordinierte Weltzeit (UTC) |
1.4 Standardfeld- und Strukturqualifizierer
Felder und Strukturen in dieser Spezifikation verfügen über die folgenden Qualifizierer (siehe Liste unten), es sei denn, die Spezifikation weist etwas anderes auf.
Sind nicht signiert
Verwenden Sie die Dezimalschreibweise, um Werte zu beschreiben, sofern nicht anders angegeben; Diese Spezifikation verwendet den Nachbehebungsbuchstaben "h", um hexadezimale Zahlen anzugeben und GUIDs in geschweifte Klammern einzuschließen.
Sind im Little-Endian-Format
Kein NULL-Endzeichen für Zeichenfolgen erforderlich
1.5 Windows CE und TexFAT
TexFAT ist eine Erweiterung von exFAT, die transaktionssichere operative Semantik auf dem Basisdateisystem hinzufügt. TexFAT wird von Windows CE verwendet. TexFAT erfordert die Verwendung der beiden FATs und Zuordnungsbitbits 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, der zum Speichern und Abrufen von Benutzerdaten erforderlich ist. Alle exFAT-Volumes enthalten vier Regionen (siehe Tabelle 3).
Tabelle 3 Volumestruktur
Name der Unterregion | Offset (Sektor) |
Größe (Sektoren) |
Kommentare |
---|---|---|---|
Hauptstartregion | |||
Hauptstartsektor | 0 | 1 | Dieser Unterbereich ist obligatorisch, und in Abschnitt 3.1 wird der Inhalt definiert. |
Hauptsektoren für den erweiterten Start | 1 | 8 | Diese Unterregion ist obligatorisch, und abschnitt 3.2) definiert ihren Inhalt. |
Haupt-OEM-Parameter | 9 | 1 | Diese Unterregion ist obligatorisch, und in Abschnitt 3.3 wird derEn Inhalt definiert. |
Haupt reserviert | 10 | 1 | Diese Unterregion ist obligatorisch, und ihr Inhalt ist reserviert. |
Hauptstartprüfsumme | 11 | 1 | Diese Unterregion ist obligatorisch, und in Abschnitt 3.4 wird derEn Inhalt definiert. |
Sicherungsstartregion | |||
Sicherungsstartsektor | 12 | 1 | Diese Unterregion ist obligatorisch, und in Abschnitt 3.1 wird derEn Inhalt definiert. |
Erweiterte Startsektoren sichern | 13 | 8 | Diese Unterregion ist obligatorisch, und abschnitt 3.2 definiert den Inhalt. |
OEM-Parameter für die Sicherung | 21 | 1 | Diese Unterregion ist obligatorisch, und in Abschnitt 3.3 wird derEn Inhalt definiert. |
Reservierte Sicherung | 22 | 1 | Diese Unterregion ist obligatorisch, und ihr Inhalt ist reserviert. |
Sicherungsstart-Prüfsumme | 23 | 1 | Diese Unterregion ist obligatorisch, und in Abschnitt 3.4 wird derEn Inhalt definiert. |
FAT-Region | |||
FAT-Ausrichtung | 24 | FatOffset – 24 | Diese Unterregion ist obligatorisch, und ihr Inhalt ist, falls vorhanden, nicht definiert. Hinweis: Der Haupt- und der Sicherungsstartsektor enthalten das Feld FatOffset. |
Erste FAT | FatOffset | FatLength | Diese Unterregion ist obligatorisch, und abschnitt 4.1 definiert den Inhalt. Hinweis: Der Haupt- und der Sicherungsstartsektor enthalten die Felder FatOffset und FatLength. |
Zweites FAT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | Diese Unterregion ist obligatorisch, und in Abschnitt 4.1 wird der Inhalt definiert, falls vorhanden. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder FatOffset, FatLength und NumberOfFats. Das Feld NumberOfFats darf nur die Werte 1 und 2 enthalten. |
Datenregion | |||
Clusterheapausrichtung | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | Diese Unterregion ist obligatorisch, und ihr Inhalt ist, falls vorhanden, nicht definiert. Hinweis: Der Haupt- und der Sicherungsstartsektor enthalten 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 den Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder ClusterHeapOffset, ClusterCount und SectorsPerClusterShift. |
Überschüssiger Speicherplatz | ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift) | Diese Unterregion ist obligatorisch, und ihr Inhalt ist, falls vorhanden, nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder ClusterHeapOffset, ClusterCount, SectorsPerClusterShift und VolumeLength. |
3 Haupt- und Sicherungsstartregionen
Der Hauptstartbereich enthält alle erforderlichen Startumreifungsanweisungen, Identifizieren von Informationen und Dateisystemparametern, 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 Sicherungsstartregion ist eine Sicherung der Hauptstartregion. Es unterstützt die Wiederherstellung des exFAT-Volumes, wenn sich die Main Boot-Region in einem inkonsistenten Zustand befindet. Außer in seltenen Fällen, z. B. beim Aktualisieren von Startumreifungsanweisungen, sollten Implementierungen den Inhalt der Sicherungsstartregion nicht ändern.
3.1 Haupt- und Sicherungsstartsektor-Unterregionen
Der Hauptstartsektor enthält Code für die Startumreifung von einem exFAT-Volume und grundlegende exFAT-Parameter, die die Volumestruktur beschreiben (siehe Tabelle 4). BIOS, MBR oder andere Startumreifungs-Agents können diesen Sektor untersuchen und alle darin enthaltenen Startumreifungsanweisungen laden und ausführen.
Der Sicherungsstartsektor ist eine Sicherung des Hauptstartsektors und weist die gleiche Struktur auf (siehe Tabelle 4). Der Sicherungsstartsektor 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 Sicherungsstartsektors 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 Sicherungsstartsektors initialisiert, können Implementierungen diese Sektoren bei Bedarf aktualisieren (und auch die 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 Sicherungsstartsektors
Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
---|---|---|---|
JumpBoot | 0 | 3 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.1 wird der Inhalt definiert. |
FileSystemName | 3 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 3.1.2 wird der Inhalt definiert. |
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. |
SektorenPerClusterShift | 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 vorhanden, nicht definiert. Hinweis: Der Haupt- und der Sicherungsstartsektor enthalten das Feld BytesPerSectorShift. |
3.1.1 JumpBoot-Feld
Das JumpBoot-Feld muss die Sprunganweisung für CPUs enthalten, die auf PCs üblich sind, die bei Ausführung die CPU "springt", um die Boot-Umreifungsanweisungen im BootCode-Feld auszuführen.
Der gültige Wert für dieses Feld ist (in der Reihenfolge von Byte niedriger Ordnung bis Byte hoher Ordnung) EBh 76h 90h.
3.1.2 FileSystemName Field
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", was drei nachfolgende Leerzeichen enthält.
3.1.3 MustBeZero Field
Das Feld MustBeZero 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, wodurch verhindert wird, dass FAT12/16/32-Implementierungen versehentlich ein exFAT-Volume einbinden.
3.1.4 PartitionOffset-Feld
Das Feld PartitionOffset muss den medienrelativen Sektoroffset der Partition beschreiben, die das angegebene exFAT-Volume hostet. Dieses Feld unterstützt das Starten des Volumes mithilfe des erweiterten 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 müssen.
3.1.5 VolumeLength Field
Das Feld VolumeLength muss die Größe des angegebenen exFAT-Volumens in Sektoren beschreiben.
Der gültige Wertebereich für dieses Feld ist:
Mindestens 220/2BytesPerSectorShift, wodurch sichergestellt wird, dass das kleinste Volume mindestens 1 MB beträgt.
Höchstens 264-1, der größte Wert, den dieses Feld beschreiben kann.
Wenn die Größe des Unterbereichs "Überschüssiger Speicherplatz" jedoch 0 ist, ist der größte Wert dieses Felds ClusterHeapOffset + (232-11) * 2SectorsPerClusterShift.
3.1.6 FatOffset-Feld
Das Feld FatOffset beschreibt den volumenrelativen Sektoroffset des ersten FAT. In diesem Feld können Implementierungen die erste FAT an den Merkmalen der zugrunde liegenden Speichermedien ausrichten.
Der gültige Wertebereich für dieses Feld ist:
Mindestens 24, in denen die Sektoren der Hauptstart- und Sicherungsstartregionen verwendet werden
Höchstens ClusterHeapOffset - (FatLength * NumberOfFats), das die Sektoren erfasst, die der Clusterheap verbraucht
3.1.7 FatLength Field
Das Feld FatLength muss die Länge jeder FAT-Tabelle in Sektoren beschreiben (das Volumen kann bis zu zwei FATs enthalten).
Der gültige Wertebereich für dieses Feld ist:
Mindestens (ClusterCount + 2) * 22/2BytesPerSectorShiftwird auf die nächste ganze Zahl aufgerundet, wodurch sichergestellt wird, dass jede FAT über ausreichend Speicherplatz zum Beschreiben aller Cluster im Clusterheap verfügt.
Höchstens (ClusterHeapOffset - FatOffset) / NumberOfFats auf die nächste ganze Zahl gerundet, wodurch sichergestellt wird, dass die FATs vor dem Clusterheap vorhanden sind.
Dieses Feld kann einen Wert enthalten, der über seine untere Grenze (wie oben beschrieben) hinaus liegt, damit die zweite FAT, falls vorhanden, auch an den Merkmalen des zugrunde liegenden Speichermediums ausgerichtet werden kann. Der Inhalt des Raums, der über den vom FAT selbst benötigten Wert hinausgeht, ist nicht definiert.
3.1.8 ClusterHeapOffset-Feld
Das Feld ClusterHeapOffset muss den volumenrelativen Sektoroffset des Clusterheaps beschreiben. Mit diesem Feld können Implementierungen den Clusterheap an den Merkmalen der zugrunde liegenden Speichermedien ausrichten.
Der gültige Wertebereich für dieses Feld ist:
Mindestens FatOffset + FatLength * NumberOfFats, um die Sektoren zu berücksichtigen, die alle vorherigen Regionen verbrauchen
Höchstens 232-1 oder VolumeLength - (ClusterCount * 2SectorsPerClusterShift), je nachdem, welche Berechnung kleiner ist
3.1.9 ClusterCount Field
Das Feld ClusterCount muss die Anzahl von Clustern beschreiben, die der Clusterheap enthält.
Der gültige Wert für dieses Feld ist der geringere der folgenden Werte:
(VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShiftgerundet auf die nächste ganze Zahl, die genau die Anzahl von Clustern ist, die zwischen dem Anfang des Clusterheaps und dem Ende des Volumes passen können.
232-11, die maximale Anzahl von Clustern, die ein FAT beschreiben kann
Der Wert des Felds ClusterCount bestimmt die Mindestgröße einer 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 SektorenPerClusterShift). Diese Spezifikation empfiehlt nicht mehr als 224-2 Cluster im Clusterheap. Implementierungen müssen jedoch Volumes mit bis zu 232-11 Clustern im Clusterheap 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 die Zuordnungsbitbit und die Up-Case-Tabelle nutzen.
Der gültige Wertebereich für dieses Feld ist:
Mindestens 2, der Index des ersten Clusters im Clusterheap
Höchstens ClusterCount + 1, der Index des letzten Clusters im Clusterheap
3.1.11 VolumeSerialNumber Field
Das VolumeSerialNumber-Feld 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 zu einer Seriennummer ist implementierungsspezifisch.
Alle möglichen Werte für dieses Feld sind gültig.
3.1.12 FileSystemRevision Field
Das Feld FileSystemRevision muss die Haupt- und Nebenrevisionsnummern der exFAT-Strukturen auf dem angegebenen Volume beschreiben.
Das hochgeordnete Byte ist die Hauptrevisionsnummer, und das Byte mit niedriger Ordnung ist die Nebenrevisionsnummer. Wenn das Byte mit hoher Ordnung beispielsweise den Wert 01h und das Byte mit niedriger Reihenfolge den Wert 05h enthält, beschreibt das FileSystemRevision-Feld die Revisionsnummer 1.05. Ebenso beschreibt das Feld FileSystemRevision die Revisionsnummer 10.15, wenn das Byte mit hoher Ordnung den Wert 0Ah enthält und das Byte mit niedriger Reihenfolge den Wert 0Fh enthält.
Der gültige Wertebereich für dieses Feld ist:
Mindestens 0 für das Byte mit niedriger Ordnung und 1 für das Byte hoher Ordnung
Höchstens 99 für das Low-Order-Byte und 99 für das hochgeordnete Byte
Die in dieser Spezifikation beschriebene Revisionsnummer von exFAT ist 1,00. Implementierungen dieser Spezifikation sollten jedes exFAT-Volume mit der Hauptrevisionsnummer 1 einbinden und kein exFAT-Volume mit einer anderen größeren Revisionsnummer einbinden. Implementierungen müssen die Nebenrevisionsnummer berücksichtigen 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 die status verschiedener Dateisystemstrukturen auf dem exFAT-Volume angeben (siehe Tabelle 5).
Implementierungen dürfen dieses Feld nicht einschließen, wenn die prüfsumme des jeweiligen Hauptstarts oder der Sicherungsstartregion festgelegt wird. Wenn sich auf den Sicherungsstartsektor bezieht, 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 Field
Das ActiveFat-Feld muss wie folgt beschreiben, welche FAT- und Zuordnungsbit aktiv sind (und die Implementierungen verwenden müssen):
0, was bedeutet, dass die Bitmap "Erste FAT" und "Erste Zuordnung" aktiv sind.
1, was bedeutet, dass die Zweite FAT- und die zweite Zuordnungsbitbit aktiv sind und nur möglich sind, wenn das Feld NumberOfFats den Wert 2 enthält.
Implementierungen müssen die inaktive FAT- und Zuordnungsbitbit als veraltet betrachten. Nur texFAT-fähige Implementierungen dürfen die aktiven FAT- und Zuordnungsbitbits ändern (siehe Abschnitt 7.1).
3.1.13.2 VolumeDirty Field
Das Feld VolumeDirty muss wie folgt beschreiben, ob das Volume modifiziert 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 Dateisystemmetadateninkonsistenzen auftreten, die nicht aufgelöst werden. 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 löschen. Solche Implementierungen dürfen den Wert dieses Felds erst auf 0 löschen, nachdem sichergestellt ist, 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 sie Dateisystemmetadaten aktualisieren und dieses Feld anschließend auf 0 löschen, ähnlich der empfohlenen Schreibreihenfolge, die in Abschnitt 8.1 beschrieben wird.
3.1.13.3 MediaFailure Field
Das Feld MediaFailure muss wie folgt beschreiben, ob eine Implementierung Medienfehler festgestellt hat oder nicht:
0, was bedeutet, dass das Hostmedium keine Fehler gemeldet hat oder bekannte Fehler bereits in der FAT als "schlechte" Cluster aufgezeichnet wurden.
1, was bedeutet, dass das Hostmedium Fehler gemeldet hat (d. h. Lese- oder Schreibvorgänge fehlgeschlagen sind).
Eine Implementierung sollte dieses Feld in folgenden Fällen auf 1 festlegen:
Das Hostmedium versucht nicht, auf eine Region im Volume zuzugreifen.
Die Implementierung verfügt über erschöpfte Zugriffswiebelegorithmen, 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 löschen.
3.1.13.4 ClearToZero-Feld
Das ClearToZero-Feld hat in dieser Spezifikation keine signifikante Bedeutung.
Die gültigen Werte für dieses Feld sind:
0, das keine besondere Bedeutung hat
1, d. h. implementierungen müssen dieses Feld vor der Änderung von Dateisystemstrukturen, Verzeichnissen oder Dateien in 0 löschen.
3.1.14 BytesPerSectorShift-Feld
Das Feld BytesPerSectorShift beschreibt die Bytes pro Sektor, 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 sein:
Mindestens 9 (Sektorgröße von 512 Bytes), was der kleinste Sektor ist, der für ein ExFAT-Volume möglich ist
Höchstens 12 (Sektorgröße von 4.096 Byte), dies ist die Speicherseitengröße von CPUs, 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 die Anzahl der Sektoren pro Cluster ist. Für 8 Sektoren pro Cluster ist der Wert dieses Felds beispielsweise 3.
Der gültige Wertebereich für dieses Feld muss sein:
Mindestens 0 (1 Sektor pro Cluster), was der kleinste mögliche Cluster ist
Höchstens 25 – BytesPerSectorShift, was eine Clustergröße von 32 MB ergibt
3.1.16 NumberOfFats-Feld
Im Feld NumberOfFats wird die Anzahl von FATs und Zuordnungsbitbits beschrieben, die das Volume enthält.
Der gültige Wertebereich für dieses Feld muss sein:
1, der angibt, dass das Volume nur die Bitmap "First FAT" und "First Allocation" enthält.
2, die angibt, dass das Volume die Erste FAT, zweite FAT, First Allocation Bitmap und Second Allocation Bitmap enthält; Dieser Wert ist nur für TexFAT-Volumes gültig.
3.1.17 LaufwerkAuswahlfeld
Das Feld DriveSelect muss die erweiterte INT 13h-Laufwerksnummer enthalten, die das Starten von diesem Volume mithilfe des erweiterten 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
Im Feld PercentInUse wird der Prozentsatz der Cluster im Clusterheap beschrieben, die zugeordnet sind.
Der gültige Wertebereich für dieses Feld muss sein:
Zwischen 0 und 100 inklusive, d. h. der Prozentsatz der zugeordneten Cluster im Clusterheap, gerundet auf die nächste ganze Zahl
Genau FFh, der angibt, dass der Prozentsatz der zugeordneten Cluster im Clusterheap nicht verfügbar ist.
Implementierungen ändern den Wert dieses Felds, um Änderungen in der Zuordnung von Clustern im Clusterheap widerzuspiegeln, oder ändern ihn in FFh.
Implementierungen dürfen dieses Feld bei der Berechnung der jeweiligen Prüfsumme der Region "Hauptstart" oder "Sicherungsstart" nicht enthalten. Wenn auf den Backup Boot-Sektor verwiesen wird, müssen Implementierungen dieses Feld als veraltet betrachten.
3.1.19 BootCode-Feld
Das BootCode-Feld muss Boot-Umreifungsanweisungen enthalten. Implementierungen können dieses Feld mit den CPU-Anweisungen auffüllen, die zum Starten eines Computersystems erforderlich sind. Implementierungen, die keine Boot-Umreifungsanweisungen bereitstellen, müssen jedes Byte in diesem Feld als Teil ihres Formatvorgangs in 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 Sektors darin besteht, dass es sich um einen Startsektor handelt oder nicht.
Der gültige Wert für dieses Feld ist AA55h. Jeder andere Wert in diesem Feld ungültig den jeweiligen Startsektor. Implementierungen sollten den Inhalt dieses Felds überprüfen, bevor sie von einem anderen Feld im jeweiligen Startsektor abhängig sind.
3.2 Unterregionen für Haupt- und Sicherungsbereiche für erweiterte Startsektoren
Jeder Sektor der Hauptsektoren für erweiterte Startboote hat dieselbe Struktur. Jeder Sektor kann jedoch unterschiedliche Boot-Umreifungsanweisungen enthalten (siehe Tabelle 6). Start-Umreifungs-Agents, z. B. die Boot-Umreifungsanweisungen im Hauptstartsektor, alternative BIOS-Implementierungen oder die Firmware eines eingebetteten Systems, können diese Sektoren laden und die darin enthaltenen Anweisungen ausführen.
Die Sicherungssektoren für erweiterte Startsektoren sind eine Sicherung der Hauptsektoren für erweiterte Starte und verfügen über die gleiche Struktur (siehe Tabelle 6).
Vor der Ausführung der Anweisungen des Haupt- oder Sicherungssektors für den erweiterten Startsektor sollten Implementierungen ihren Inhalt überprüfen, indem sie sicherstellen, dass das Feld ExtendedBootSignature jedes Sektors den vorgeschriebenen Wert enthält.
Während der anfängliche Formatvorgang den Inhalt des Haupt- und Sicherungs-Erweiterten Startsektors initialisiert, können implementierungen diese Sektoren aktualisieren (und müssen auch die jeweilige Startprüfsumme aktualisieren) nach Bedarf.
Tabelle 6: Struktur des erweiterten Startsektors
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.2.1 wird der Inhalt definiert. Hinweis: Der Haupt- und der Sicherungsstartsektor enthalten beide das Feld BytesPerSectorShift. |
ExtendedBootSignature | 2BytesPerSectorShift – 4 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 3.2.2 wird der Inhalt definiert. Hinweis: Der Haupt- und der Sicherungsstartsektor enthalten beide das Feld BytesPerSectorShift. |
3.2.1 ExtendedBootCode-Feld
Das Feld ExtendedBootCode muss Boot-Umreifungsanweisungen enthalten. Implementierungen können dieses Feld mit den CPU-Anweisungen auffüllen, die zum Starten eines Computersystems erforderlich sind. Implementierungen, die keine Boot-Umreifungsanweisungen bereitstellen, müssen jedes Byte in diesem Bereich im Rahmen ihres Formatvorgangs auf 00h initialisieren.
3.2.2 ExtendedBootSignature Field
Das Feld ExtendedBootSignature muss beschreiben, ob die Absicht eines bestimmten Sektors darin besteht, dass es sich um einen erweiterten Startsektor handelt.
Der gültige Wert für dieses Feld ist AA550000h. Jeder andere Wert in diesem Feld ungültig den jeweiligen Main- oder Backup Extended Boot Sector. Implementierungen sollten den Inhalt dieses Felds überprüfen, bevor sie von einem anderen Feld im jeweiligen erweiterten Startsektor abhängig sind.
3.3 Haupt- und Sicherungs-OEM-Parameter unter regionen
Die Unterregion Haupt-OEM-Parameter enthält zehn Parameterstrukturen, die herstellerspezifische Informationen enthalten können (siehe Tabelle 7). Jede der zehn Parameterstrukturen wird von der Vorlage Generische Parameter abgeleitet (siehe Abschnitt 3.3.2). Hersteller können ihre eigenen benutzerdefinierten Parameterstrukturen von der Vorlage Generische Parameter ableiten. Diese Spezifikation selbst definiert zwei Parameterstrukturen: NULL-Parameter (siehe Abschnitt 3.3.3) und Blitzparameter (siehe Abschnitt 3.3.4).
Die OEM-Parameter für die Sicherung sind eine Sicherung der OEM-Hauptparameter und haben die gleiche Struktur (siehe Tabelle 7).
Vor der Verwendung des Inhalts 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-Parameter Main und Backup mit eigenen benutzerdefinierten Parameterstrukturen (sofern vorhanden) und anderen Parameterstrukturen auffüllen. Nachfolgende Formatvorgänge müssen den Inhalt der OEM-Parameter Main und Backup beibehalten.
Implementierungen können die OEM-Parameter Main und Backup bei Bedarf aktualisieren (und müssen auch die jeweilige Startprüfsumme aktualisieren).
Tabelle 7 OEM-Parameterstruktur
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Parameter[0] | 0 | 48 | Dieses Feld ist obligatorisch, und in Abschnitt 3.3.1 wird der Inhalt definiert. |
. . . |
. . . |
. . . |
. . . |
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: Der Haupt- und der Sicherungsstartsektor enthalten 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 abgeleitet ist (siehe Abschnitt 3.3.2). Jedes nicht verwendete Parameterfeld muss so beschrieben werden, dass es eine Null-Parameter-Struktur enthält (siehe Abschnitt 3.3.3).
3.3.2 Vorlage für generische Parameter
Die Vorlage Generische Parameter stellt die Basisdefinition einer Parameterstruktur bereit (siehe Tabelle 8). Alle Parameterstrukturen stammen von dieser Vorlage ab. Die Unterstützung für diese Vorlage für generische Parameter ist obligatorisch.
Tabelle 8 Vorlage für generische Parameter
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 abgeleitet werden, definieren den Inhalt. |
3.3.2.1 ParameterGuid Field
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-generierendes Tool wie GuidGen.exe verwenden, um beim Ableiten benutzerdefinierter Parameterstrukturen aus dieser Vorlage eine GUID auszuwählen.
3.3.3 Null-Parameter
Die Null-Parameter-Struktur stammt aus der Vorlage Generische Parameter (siehe Abschnitt 3.3.2) und muss ein nicht verwendetes Parameterfeld beschreiben (siehe Tabelle 9). Beim Erstellen oder Aktualisieren der OEM-Parameter-Struktur müssen Implementierungen nicht verwendete Parameterfelder mit der Null-Parameter-Struktur auffüllen. Außerdem sollten Implementierungen beim Erstellen oder Aktualisieren der OEM-Parameterstruktur NULL-Parameter-Strukturen am Ende des Arrays konsolidieren, sodass alle anderen Parameterstrukturen am Anfang der OEM-Parameterstruktur stehen.
Die Unterstützung der Null-Parameter-Struktur ist obligatorisch.
Tabelle 9 NULL-Parameterstruktur
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 ParameterGuid Field
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 der GUID-Notation ist {00000000-0000-0000-0000-000000000000}.
3.3.4 Blitzparameter
Die Flash-Parameterstruktur stammt aus der Vorlage Generische Parameter (siehe Abschnitt 3.3.2) und enthält Parameter für Flashmedien (siehe Tabelle 10). Hersteller von Flash-basierten Speichergeräten können ein Parameterfeld (vorzugsweise das Feld Parameter[0] ) mit dieser Parameterstruktur auffüllen. Implementierungen können die Informationen in der Flash-Parameter-Struktur verwenden, um Zugriffsvorgänge während Lese-/Schreibvorgängen zu optimieren und für die Ausrichtung von Dateisystemstrukturen zu verwenden, die die Formatierung der Medien nicht beeinträchtigen.
Die Unterstützung für die Struktur "Flashparameter" 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 in Abschnitt 3.3.4.8 wird der Inhalt definiert. |
Reserviert | 44 | 4 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
Alle möglichen Werte für alle FlashParameter-Felder mit Ausnahme des ParametersGuid-Felds sind gültig. Der Wert 0 gibt jedoch an, dass das Feld tatsächlich bedeutungslos ist (Implementierungen ignorieren das angegebene Feld).
3.3.4.1 ParameterGuid-Feld
Das Feld ParametersGuid muss der Definition in der Vorlage Generische Parameter entsprechen (siehe Abschnitt 3.3.2.1).
Der gültige Wert für dieses Feld in der GUID-Notation ist {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.
3.3.4.2 EraseBlockSize-Feld
Das Feld EraseBlockSize muss die Größe des Löschblocks des Flashmediums in Bytes beschreiben.
3.3.4.3 PageSize Field
Das PageSize-Feld muss die Größe der Seite des Flashmediums in Byte beschreiben.
3.3.4.4 SpareSectors Field
Im Feld "SpareSektoren" wird die Anzahl der Sektoren beschrieben, die das Flash-Medium 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 Field
Das Feld ProgrammingTime soll die durchschnittliche Programmierzeit des Flashmediums in Nanosekunden beschreiben.
3.3.4.7 ReadCycle Field
Das Feld ReadCycle muss die durchschnittliche Lesezykluszeit des Flashmediums in Nanosekunden beschreiben.
3.3.4.8 WriteCycle Field
Das Feld WriteCycle muss die durchschnittliche Schreibzykluszeit in Nanosekunden beschreiben.
3.4 Unterregionen der Haupt- und Sicherungsstartprüfsumme
Die Haupt- und Sicherungsstartprüfsummen enthalten jeweils ein wiederholtes Muster der Vier-Byte-Prüfsumme des Inhalts aller anderen Unterregionen in den jeweiligen Startregionen. Die Prüfsummenberechnung darf die Felder VolumeFlags und PercentInUse im jeweiligen Startsektor nicht enthalten (siehe Abbildung 1). Das wiederholte Muster der Vier-Byte-Prüfsumme füllt den jeweiligen Unterbereich der Startprüfsumme vom Anfang bis zum Ende des Unterbereichs aus.
Vor der Verwendung der Inhalte einer der anderen Unterregionen in den Regionen Main oder Backup Boot müssen Implementierungen ihren Inhalt überprüfen, indem sie ihre jeweilige Startprüfsumme überprüfen.
Während der anfängliche Formatvorgang sowohl die Main- als auch die Sicherungsstartprüfsummen mit dem wiederholten Prüfsummenmuster auffüllt, müssen Implementierungen diese Sektoren aktualisieren, wenn sich der Inhalt der anderen Sektoren in den jeweiligen Startregionen ändert.
Abbildung 1 Berechnung der Startprüfsumme
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 Dateizuordnungstabellenregion
Der FAT-Bereich (File Allocation Table) kann bis zu zwei FATs enthalten, eines in der ersten FAT-Unterregion und ein weiteres in der zweiten FAT-Unterregion. Das Feld NumberOfFats beschreibt, wie viele FATs dieser Bereich enthält. Die gültigen Werte für das Feld NumberOfFats sind 1 und 2. Daher enthält der erste FAT-Unterbereich immer eine FAT. Wenn das NumberOfFats-Feld zwei ist, enthält der zweite FAT-Unterbereich ebenfalls ein FAT.
Das ActiveFat-Feld des VolumeFlags-Felds beschreibt, welches FAT aktiv ist. Nur das Feld VolumeFlags im Hauptstartsektor ist aktuell. Bei implementierungen wird die nicht aktive FAT als veraltet behandelt. 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 der Inhalte von Dateien, Verzeichnissen und anderen Dateisystemstrukturen bietet. Ein FAT stellt eine Clusterkette als eine eng verknüpfte Liste von Clusterindizes dar. Mit Ausnahme der ersten beiden Einträge stellt jeder Eintrag in einem FAT genau einen Cluster dar.
Tabelle 11 Dateizuordnungstabellenstruktur
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
FatEntry[0] | 0 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 4.1.1 wird der Inhalt definiert. |
FatEntry[1] | 4 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 4.1.2 wird der Inhalt definiert. |
FatEntry[2] | 8 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 4.1.3 wird der Inhalt definiert. |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 4.1.3 wird der Inhalt definiert. ClusterCount + 1 darf FFFFFFF6h nie überschreiten. Hinweis: Der Hauptsektor und der Sicherungsstartsektor enthalten beide das Feld ClusterCount. |
ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4) | Dieses Feld ist obligatorisch, und sein Inhalt ist, falls vorhanden, undefiniert. Hinweis: Der Haupt- und der Sicherungsstartsektor enthalten beide 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 Ordnung) 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] existiert nur aufgrund der historischen Rangfolge und beschreibt nichts interessantes.
Der gültige Wert für dieses Feld ist FFFFFFFFh. Implementierungen müssen dieses Feld mit dem vorgeschriebenen Wert initialisieren und dürfen dieses Feld nicht zu irgendeinem Zweck verwenden. Implementierungen sollten dieses Feld nicht interpretieren und dessen Inhalt über Vorgänge hinweg beibehalten, die umgebende Felder ändern.
4.1.3 FatEntry[2] ... FatEntry[ClusterCount+1] Felder
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 ist:
Zwischen 2 und ClusterCount + 1, einschließlich, der auf die nächste FatEntry in der angegebenen Clusterkette verweist; die angegebene FatEntry darf nicht auf FatEntry verweisen, die ihm in der angegebenen Clusterkette vorangestellt ist.
Genau FFFFFFF7h, das den entsprechenden FatEntry-Cluster als "schlecht" markiert
Genau FFFFFFFFh, die den entsprechenden FatEntry-Cluster als letzten Cluster einer Clusterkette markiert; Dies ist der einzige gültige Wert für das letzte FatEntry einer bestimmten Clusterkette.
5 Datenregion
Der Datenbereich enthält den Clusterheap, der verwalteten Speicherplatz für Dateisystemstrukturen, Verzeichnisse und Dateien bereitstellt.
5.1 Unterregion des Clusterheaps
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 ist, dass der erste Cluster des Clusterheaps index zwei aufweist, der direkt dem Index von FatEntry[2] entspricht.
In einem exFAT-Volume verwaltet eine Zuordnungsbitbitbit (siehe Abschnitt 7.1.5) den Datensatz des Zuordnungsstatus aller Cluster. Dies ist ein erheblicher Unterschied zu den Vorgängern von exFAT (FAT12, FAT16 und FAT32), in denen ein FAT einen Datensatz des Zuordnungsstatus aller Cluster im Clusterheap verwaltete.
Tabelle 12: Clusterheapstruktur
Feldname | Offset (Sektor) |
Größe (Sektoren) |
Kommentare |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2SektorenPerClusterShift | 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) * 2SektorenPerClusterShift | 2SektorenPerClusterShift | 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] ... Cluster[ClusterCount+1] Felder
Jedes Clusterfeld in diesem Array ist eine 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 Clusterheap vorhanden sind. Verzeichnisse verfügen über eine 1:n-Beziehung zwischen übergeordnetem und untergeordnetem Element in der Verzeichnisstruktur.
Das Verzeichnis, auf das das Feld FirstClusterOfRootDirectory verweist, ist das Stammverzeichnis der Verzeichnisstruktur. Alle anderen Verzeichnisse stammen in einer singly verknüpften Weise vom Stammverzeichnis ab.
Jedes Verzeichnis besteht aus einer Reihe von Verzeichniseinträgen (siehe Tabelle 13).
Ein oder mehrere Verzeichniseinträge werden zu einem Verzeichniseintragssatz kombiniert, der interessante Elemente beschreibt, z. B. eine Dateisystemstruktur, ein Unterverzeichnis oder eine Datei.
Verzeichnisstruktur in Tabelle 13
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 angegebene Verzeichnis enthält, dividiert durch die Größe eines DirectoryEntry-Felds, 32 Bytes. |
6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]
Jedes DirectoryEntry-Feld in diesem Array leitet sich von der Generischen DirectoryEntry-Vorlage ab (siehe Abschnitt 6.2).
6.2 Generic DirectoryEntry Template
Die Vorlage Generic DirectoryEntry stellt die Basisdefinition für Verzeichniseinträge bereit (siehe Tabelle 14). Alle Verzeichniseintragsstrukturen stammen von dieser Vorlage ab, und nur von Microsoft definierte Verzeichniseintragsstrukturen sind gültig (exFAT hat keine Bestimmungen für vom Hersteller definierte Verzeichniseintragsstrukturen, außer wie in Abschnitt 7.8 und Abschnitt 7.9 definiert). Die Möglichkeit, die Generische DirectoryEntry-Vorlage zu interpretieren, ist obligatorisch.
Tabelle 14 Generische Verzeichniseintragsvorlage
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 abgeleitet sind, können den 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 Field
Das EntryType-Feld verfügt über drei Nutzungsmodi, die der Wert des Felds definiert (siehe Liste unten).
00h, das ist ein Marker zum Ende des Verzeichnisses, und es gelten die folgenden Bedingungen:
Alle anderen Felder im angegebenen DirectoryEntry sind tatsächlich reserviert.
Alle nachfolgenden Verzeichniseinträge im angegebenen Verzeichnis sind auch End-of-Directory-Marker
Markierungen zum Ende des Verzeichnisses sind nur außerhalb von Verzeichniseintragssätzen gültig.
Implementierungen können bei Bedarf Markierungen zum Ende des Verzeichnisses überschreiben
Zwischen 01h und 7Fh inklusive, die ein nicht verwendeter Verzeichniseintragsmarker ist und die folgenden Bedingungen gelten:
Alle anderen Felder im angegebenen DirectoryEntry sind tatsächlich undefiniert.
Nicht verwendete Verzeichniseinträge sind nur außerhalb von Verzeichniseintragssätzen gültig.
Implementierungen können bei Bedarf nicht verwendete Verzeichniseinträge überschreiben
Dieser Wertebereich entspricht dem Feld InUse (siehe Abschnitt 6.2.1.4), das den Wert 0 enthält.
Zwischen 81h und FFh inklusive, die ein regulärer Verzeichniseintrag ist und die folgenden Bedingungen gelten:
Der Inhalt des EntryType-Felds (siehe Tabelle 15) bestimmt das Layout des restlichen Elements der DirectoryEntry-Struktur.
Dieser Wertebereich und nur dieser Wertebereich sind innerhalb eines Verzeichniseintragssatzes gültig.
Dieser Wertebereich entspricht direkt dem Feld InUse (siehe Abschnitt 6.2.1.4), das den Wert 1 enthält.
Um Änderungen am InUse-Feld zu verhindern (siehe Abschnitt 6.2.1.4), 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 Field
Das Feld TypeCode beschreibt teilweise den spezifischen Typ des angegebenen Verzeichniseintrags. Dieses Feld sowie die Felder TypeImportance und TypeCategory (siehe Abschnitt 6.2.1.2 bzw . Abschnitt 6.2.1.3) identifizieren den Typ des angegebenen Verzeichniseintrags eindeutig.
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 Field
Das Feld TypeImportance muss die Bedeutung des angegebenen Verzeichniseintrags beschreiben.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass der angegebene Verzeichniseintrag kritisch ist (siehe Abschnitt 6.3.1.2.1 und Abschnitt 6.4.1.2.1 für kritische primäre und kritische sekundäre Verzeichniseinträge).
1, was bedeutet, dass der angegebene Verzeichniseintrag gutartig ist (siehe Abschnitt 6.3.1.2.2 und Abschnitt 6.4.1.2.2 für gutartige primäre und gutartige sekundäre Verzeichniseinträge)
6.2.1.3 TypeCategory Field
Das Feld TypeCategory muss die Kategorie des angegebenen Verzeichniseintrags beschreiben.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass der angegebene Verzeichniseintrag primär ist (siehe Abschnitt 6.3).
1 bedeutet, dass der angegebene Verzeichniseintrag sekundär ist (siehe Abschnitt 6.4).
6.2.1.4 InUse Field
Das Feld InUse muss beschreiben, ob der angegebene Verzeichniseintrag verwendet wird oder nicht.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass der angegebene Verzeichniseintrag nicht verwendet wird; Dies bedeutet, dass es sich bei der angegebenen Struktur tatsächlich um einen nicht verwendeten Verzeichniseintrag handelt.
1, was bedeutet, dass der angegebene Verzeichniseintrag verwendet wird; Dies bedeutet, dass die angegebene Struktur ein regulärer Verzeichniseintrag ist.
6.2.2 FirstCluster Field
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 ist:
Genau 0, was bedeutet, dass keine Clusterzuordnung vorhanden ist
Zwischen 2 und ClusterCount + 1, was der Bereich der gültigen Clusterindizes ist
Strukturen, die von dieser Vorlage abgeleitet werden, können sowohl die Felder FirstCluster als auch DataLength neu definieren, wenn eine Clusterzuordnung nicht mit der abgeleiteten Struktur kompatibel ist.
6.2.3 DataLength Field
Das Feld DataLength beschreibt die Größe der Daten in Bytes, die die zugeordnete Clusterzuordnung enthält.
Der gültige Wertbereich für dieses Feld lautet:
Mindestens 0; wenn das Feld FirstCluster den Wert 0 enthält, ist der einzige gültige Wert dieses Felds 0.
Höchstens 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 VerzeichnisVorlage
Der erste Verzeichniseintrag in einem Verzeichniseintragssatz muss ein primärer Verzeichniseintrag sein. Alle nachfolgenden Verzeichniseinträge, sofern vorhanden, im Verzeichniseintragssatz sind sekundäre Verzeichniseinträge (siehe Abschnitt 6.4).
Die Möglichkeit, die Vorlage Generisches primäres Verzeichnis Zu interpretieren, ist obligatorisch.
Alle primären Verzeichniseintragsstrukturen leiten sich von der Vorlage Generic Primary DirectoryEntry ab (siehe Tabelle 16), die von der Vorlage Generic DirectoryEntry abgeleitet ist (siehe Abschnitt 6.2).
Tabelle 16 Generisches primäres VerzeichnisVorlage
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 abgeleitet sind, definieren den 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 Field
Das Feld EntryType muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.2.1).
6.3.1.1 TypeCode Field
Das Feld TypeCode muss der Definition entsprechen, die in der Generischen DirectoryEntry-Vorlage bereitgestellt wird (siehe Abschnitt 6.2.1.1).
6.3.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.2.1.2).
6.3.1.2.1 Wichtige Primäre Verzeichniseinträge
Wichtige 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 korreliert mit der hauptrefat-Revisionsnummer. Implementierungen müssen alle wichtigen primären Verzeichniseinträge unterstützen und nur die von dieser Spezifikation definierten strukturen für kritische primäre Verzeichnisse aufzeichnen.
6.3.1.2.2 Gutartige Primäre Verzeichniseinträge
Gutartige primäre Verzeichniseinträge enthalten zusätzliche Informationen, die für die Verwaltung eines exFAT-Volumes nützlich sein können. Jedes Verzeichnis kann gutartige primäre Verzeichniseinträge enthalten.
Die Definition von gutartigen primären Verzeichniseinträgen korreliert mit der nebensächlichen exFAT-Revisionsnummer. Die Unterstützung für jeden gutartigen primären Verzeichniseintrag, den diese Spezifikation oder eine nachfolgende Spezifikation definiert, ist optional. Ein nicht erkannter gutartiger primärer Verzeichniseintrag rendert den gesamten Verzeichniseintragssatz als nicht erkannt (über die Definition der entsprechenden Verzeichniseintragsvorlagen hinaus).
6.3.1.3 TypeCategory Field
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 Field
Das Feld InUse muss der Definition in der Vorlage "Generic DirectoryEntry" entsprechen (siehe Abschnitt 6.2.1.4).
6.3.2 SecondaryCount Field
Das Feld SecondaryCount muss die Anzahl der sekundären Verzeichniseinträge beschreiben, die unmittelbar auf den angegebenen Primären Verzeichniseintrag 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 sein:
Mindestens 0. Dies bedeutet, dass dieser primäre Verzeichniseintrag der einzige Eintrag im Verzeichniseintragssatz ist.
Höchstens 255, d. h. die nächsten 255 Verzeichniseinträge und dieser primäre Verzeichniseintrag umfassen den Verzeichniseintragssatz.
Wichtige primäre Verzeichniseintragsstrukturen, die von dieser Vorlage abgeleitet werden, können sowohl die Felder SecondaryCount als auch SetChecksum neu definieren.
6.3.3 SetChecksum Field
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.
Wichtige primäre Verzeichniseintragsstrukturen, die von dieser Vorlage abgeleitet werden, können sowohl die Felder SecondaryCount als auch 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 Field
Das Feld GeneralPrimaryFlags enthält Flags (siehe Tabelle 17).
Kritische primäre Verzeichniseintragsstrukturen, die von dieser Vorlage abgeleitet werden, 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 abgeleitet sind, können dieses Feld definieren. |
6.3.4.1 AllocationPossible Field
Das Feld AllocationPossible muss beschreiben, ob eine Zuordnung im Clusterheap für den angegebenen Verzeichniseintrag möglich ist.
Gültige Werte für dieses Feld sind:
0, was bedeutet, dass eine zugeordnete Zuordnung von Clustern nicht möglich ist und die Felder FirstCluster und DataLength tatsächlich undefiniert sind (Strukturen, die von dieser Vorlage abgeleitet werden, können diese Felder neu definieren).
1, d. h. eine zugeordnete Zuordnung von Clustern ist möglich, und die Felder FirstCluster und DataLength sind wie definiert.
6.3.4.2 NoFatChain-Feld
Das Feld NoFatChain muss angeben, ob die aktive FAT die Clusterkette der angegebenen Zuordnung beschreibt oder nicht.
Gültige Werte für dieses Feld sind:
0, d. h. die entsprechenden FAT-Einträge für die Clusterkette der Zuteilung sind gültig, und die Implementierungen müssen sie interpretieren; Wenn das Feld AllocationPossible den Wert 0 enthält oder das Feld AllocationPossible den Wert 1 und das Feld FirstCluster den Wert 0 enthält, ist der einzige gültige Wert dieses Felds 0.
1, d. h. die zugeordnete Zuordnung ist eine zusammenhängende Reihe von Clustern; die entsprechenden FAT-Einträge für die Cluster ungültig sind, 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 wichtige primäre Verzeichniseintragsstrukturen, die von dieser Vorlage abgeleitet werden, das Feld GeneralPrimaryFlags neu definieren, sind die entsprechenden FAT-Einträge für die Clusterkette der zugeordneten Zuordnung gültig.
6.3.5 FirstCluster Field
Das Feld FirstCluster muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry (siehe Abschnitt 6.2.2) bereitgestellt wird.
Wenn das NoFatChain-Bit 1 ist, muss FirstCluster auf einen gültigen Cluster im Clusterheap verweisen.
Wichtige primäre Verzeichniseintragsstrukturen, die von dieser Vorlage abgeleitet werden, können die Felder FirstCluster und DataLength neu definieren. Andere Von dieser Vorlage abgeleitete Strukturen können die Felder FirstCluster und DataLength nur neu definieren, wenn das Feld AllocationPossible den Wert 0 enthält.
6.3.6 DataLength-Feld
Das Feld DataLength muss der Definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.3).
Wenn das NoFatChain-Bit 1 ist, darf DataLength nicht 0 sein. Wenn das FirstCluster-Feld null ist, muss DataLength ebenfalls 0 sein.
Wichtige primäre Verzeichniseintragsstrukturen, die von dieser Vorlage abgeleitet werden, können die Felder FirstCluster und DataLength neu definieren. Andere Von dieser Vorlage abgeleitete Strukturen können die Felder FirstCluster und DataLength nur neu definieren, wenn das Feld AllocationPossible den Wert 0 enthält.
6.4 Generische sekundäre VerzeichnisVorlage
Der zentrale Zweck sekundärer Verzeichniseinträge besteht darin, zusätzliche Informationen zu einem Verzeichniseintragssatz bereitzustellen. Die Möglichkeit, die Vorlage Generisches sekundäres Verzeichnis Zu interpretieren, ist obligatorisch.
Die Definition sowohl kritischer als auch gutartiger sekundärer Verzeichniseinträge korreliert mit der nebengeordneten exFAT-Revisionsnummer. Die Unterstützung für alle kritischen oder harmlosen sekundären Verzeichniseinträge, die diese Spezifikation oder nachfolgende Spezifikationen definiert, ist optional.
Alle sekundären Verzeichniseintragsstrukturen werden von der Vorlage Generic Secondary DirectoryEntry abgeleitet (siehe Tabelle 18), die von der Vorlage Generic DirectoryEntry abgeleitet ist (siehe Abschnitt 6.2).
Tabelle 18 Generische sekundäre VerzeichnisVorlage
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und abschnitt 6.4.1 definiert seinen Inhalt. |
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 von dieser Vorlage abgeleitete Strukturen definieren den 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 Field
Das Feld EntryType muss der definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.1).
6.4.1.1 TypeCode Field
Das Feld TypeCode muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.2.1.1).
6.4.1.2 TypeImportance Field
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 Wichtige sekundäre Verzeichniseinträge
Wichtige sekundäre Verzeichniseinträge enthalten Informationen, die für die ordnungsgemäße Verwaltung des enthaltenden Verzeichniseintragssatzes von entscheidender Bedeutung sind. Obwohl die Unterstützung für einen bestimmten kritischen sekundären Verzeichniseintrag optional ist, rendert ein unbekannter kritischer Verzeichniseintragseintrag den gesamten Verzeichniseintragssatz als nicht erkannt (über die Definition der entsprechenden Verzeichniseintragsvorlagen hinaus).
Wenn jedoch ein Verzeichniseintragssatz mindestens einen kritischen sekundären Verzeichniseintrag enthält, den eine Implementierung nicht erkennt, interpretiert die Implementierung höchstens die Vorlagen der Verzeichniseinträge im Verzeichniseintragssatz und nicht die Daten, die einer Zuordnung zugeordnet sind, im Verzeichniseintragssatz (Dateiverzeichniseinträge sind eine Ausnahme, siehe Abschnitt 7.4).
6.4.1.2.2 Gutartige sekundäre Verzeichniseinträge
Gutartige 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 gutartigen sekundären Verzeichniseintrag ist optional. Nicht erkannte gutartige sekundäre Verzeichniseinträge rendern nicht den gesamten Verzeichniseintrag als unerkannt.
Implementierungen ignorieren möglicherweise jeden harmlosen sekundären Eintrag, den sie nicht erkennt.
6.4.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 ist der gültige Wert für dieses Feld 1.
6.4.1.4 InUse Field
Das Feld InUse muss der Definition in der Vorlage "Generic DirectoryEntry" entsprechen (siehe Abschnitt 6.2.1.4).
6.4.2 GeneralSecondaryFlags Field
Das Feld GeneralSecondaryFlags enthält Flags (siehe Tabelle 19).
Tabelle 19 Generische GeneralSecondaryFlags-Feldstruktur
Feldname | Offset (Bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
AllocationPossible | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.4.2.1 wird der Inhalt definiert. |
NoFatChain | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 6.4.2.2 wird der Inhalt definiert. |
CustomDefined | 2 | 6 | Dieses Feld ist obligatorisch, und strukturen, die von dieser Vorlage abgeleitet sind, können dieses Feld definieren. |
6.4.2.1 AllocationPossible Field
Das Feld AllocationPossible muss dieselbe Definition wie das feld mit dem gleichen Namen in der Vorlage Generisches primäres Verzeichnis Aufweisen aufweisen (siehe Abschnitt 6.3.4.1).
6.4.2.2 NoFatChain-Feld
Das Feld "NoFatChain" muss dieselbe Definition wie das gleichnamige Feld in der Vorlage Generisches primäres Verzeichnis (siehe Abschnitt 6.3.4.2) aufweisen.
6.4.3 FirstCluster Field
Das Feld FirstCluster muss der Definition entsprechen, die in der Vorlage Generic DirectoryEntry (siehe Abschnitt 6.2.2) bereitgestellt wird.
Wenn das NoFatChain-Bit 1 ist, muss FirstCluster auf einen gültigen Cluster im Clusterheap verweisen.
6.4.4 DataLength Field
Das Feld DataLength muss der Definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.3).
Wenn das NoFatChain-Bit 1 ist, darf DataLength nicht 0 sein. Wenn das FirstCluster-Feld null ist, muss DataLength ebenfalls 0 sein.
7 Verzeichniseintragsdefinitionen
Revision 1.00 des exFAT-Dateisystems definiert die folgenden Verzeichniseinträge:
Kritisches primäres Element
Zuordnungsbitbit (Abschnitt 7.1)
Up-Case-Tabelle (Abschnitt 7.2)
Volumebezeichnung (Abschnitt 7.3)
Datei (Abschnitt 7.4)
Gutartige primäre
Volume-GUID (Abschnitt 7.5)
TexFAT-Auffüllung (Abschnitt 7.10)
Kritische sekundäre
Stream-Erweiterung (Abschnitt 7.6)
Dateiname (Abschnitt 7.7)
Gutartige sekundäre
Anbietererweiterung (Abschnitt 7.8)
Anbieterzuordnung (Abschnitt 7.9)
7.1 Zuordnungs-Bitmap-Verzeichniseintrag
Im exFAT-Dateisystem beschreibt ein FAT nicht den Zuordnungsstatus von Clustern. eine Zuordnungsbit tut dies. Zuordnungsbits sind im Clusterheap vorhanden (siehe Abschnitt 7.1.5) und verfügen über entsprechende wichtige primäre Verzeichniseinträge im Stammverzeichnis (siehe Tabelle 20).
Das Feld NumberOfFats bestimmt die Anzahl gültiger Zuordnungsbitbit-Verzeichniseinträge im Stammverzeichnis. Wenn das Feld NumberOfFats den Wert 1 enthält, ist die einzige gültige Anzahl von Zuordnungs-Bitmap-Verzeichniseinträgen 1. Darüber hinaus ist der einzige Zuordnungsbitbit-Verzeichniseintrag nur gültig, wenn er die Erste Zuordnungsbit beschreibt (siehe Abschnitt 7.1.2.1). Wenn das Feld NumberOfFats den Wert 2 enthält, ist die einzige gültige Anzahl von Allocation Bitmap-Verzeichniseinträgen 2. Darüber hinaus sind die beiden Zuordnungsbitbit-Verzeichniseinträge nur gültig, wenn einer die Erste Zuordnungsbit und der andere die zweite Zuordnungsbit beschreibt.
Table 20 Allocation Bitmap DirectoryEntry Structure
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.1.1 wird der Inhalt definiert. |
BitmapFlags | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.1.2 wird der Inhalt definiert. |
Reserviert | 2 | 18 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 7.1.3 wird der Inhalt definiert. |
DataLength | 24 | 8 | Dieses Feld ist obligatorisch, und in Abschnitt 7.1.4 wird der Inhalt definiert. |
7.1.1 EntryType Field
Das Feld EntryType muss der Definition entsprechen, die in der Vorlage Generisches primäres Verzeichnis (siehe Abschnitt 6.3.1) bereitgestellt wird.
7.1.1.1 TypeCode-Feld
Das Feld TypeCode muss der Definition in der Vorlage Generisches primäres Verzeichnis entsprechen (siehe Abschnitt 6.3.1.1).
Für einen Zuordnungsbitbit-Verzeichniseintrag ist der gültige Wert für dieses Feld 1.
7.1.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.2).
Für einen Zuordnungs-Bitmap-Verzeichniseintrag ist der gültige Wert für dieses Feld 0.
7.1.1.3 TypeCategory Field
Das Feld TypeCategory muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.3).
7.1.1.4 InUse Field
Das Feld InUse muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.4).
7.1.2 BitmapFlags-Feld
Das Feld BitmapFlags enthält Flags (siehe Tabelle 21).
Tabelle 21 BitmapFlags-Feldstruktur
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 Field
Das BitmapIdentifier-Feld muss angeben, welche Zuordnungs-Bitmap der angegebene Verzeichniseintrag beschreibt. Implementierungen verwenden die Bitmap "Erste Zuordnung" in Verbindung mit dem ersten FAT und die zweite Zuordnungsbitbit in Verbindung mit dem zweiten FAT. Das Feld ActiveFat beschreibt, welche FAT- und Zuordnungsbit aktiv sind.
Die gültigen Werte für dieses Feld sind:
0, d. h. der angegebene Verzeichniseintrag beschreibt die Bitmap "First Allocation"
1, was bedeutet, dass der angegebene Verzeichniseintrag die zweite Zuordnungsbitbit beschreibt und nur möglich ist, wenn NumberOfFats den Wert 2 enthält.
7.1.3 FirstCluster Field
Das Feld FirstCluster muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.5).
Dieses Feld enthält den Index des ersten Clusters der Clusterkette, wie im FAT beschrieben, der die Zuordnungsbitbitbit hostet.
7.1.4 DataLength Field
Das Feld DataCluster muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.6).
7.1.5 Zuordnungsbitbit
Eine Zuordnungsbitbit zeichnet den Zuordnungsstatus der Cluster im Clusterheap auf. Jedes Bit in einer Zuordnungsbitbit gibt an, ob der entsprechende Cluster für die Zuordnung verfügbar ist oder nicht.
Eine Zuordnungs-Bitmap stellt Cluster vom niedrigsten bis zum höchsten Index dar (siehe Tabelle 22). Aus historischen Gründen weist der erste Cluster den Index 2 auf. Hinweis: Das erste Bit in der Bitmap ist das Bit der niedrigsten Reihenfolge des ersten Byte.
Bitmapstruktur der Zuordnung in Tabelle 22
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: Der Haupt- und der Sicherungsstartsektor enthalten beide das Feld ClusterCount. |
Reserviert | ClusterCount | (DataLength * 8) – ClusterCount | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert, falls vorhanden. Hinweis: Der Haupt- und der Sicherungsstartsektor 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 Clusterheap dar. BitmapEntry[2] stellt den ersten Cluster im Clusterheap dar, und BitmapEntry[ClusterCount+1] stellt den letzten Cluster im Clusterheap dar.
Die gültigen Werte für diese Felder müssen sein:
0, der den entsprechenden Cluster als für die Zuordnung verfügbar beschreibt
1, die den entsprechenden Cluster als nicht für die Zuordnung verfügbar beschreibt (eine Clusterzuordnung kann bereits den entsprechenden Cluster nutzen oder die aktive FAT den entsprechenden Cluster als schlecht bezeichnen)
7.2 Up-Case-Tabellenverzeichniseintrag
Die Großbuchstabentabelle definiert die Konvertierung von Klein- in Großbuchstaben. Dies ist wichtig, da der Dateiname-Verzeichniseintrag (siehe Abschnitt 7.7) Unicode-Zeichen verwendet und das exFAT-Dateisystem die Groß- und Kleinschreibung nicht beachtet. Die Up-Case-Tabelle ist im Clusterheap 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 der Einträge im Up-Case-Tabellenverzeichnis ist 1.
Aufgrund der Beziehung zwischen der Up-Case-Tabelle und dateinamen sollten Implementierungen die Up-Case-Tabelle nicht ändern, außer als Ergebnis von Formatvorgängen.
Table 23 Up-Case-TabellenverzeichnisVerzeichnisStruktur
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 Field
Das Feld EntryType muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1).
7.2.1.1 TypeCode Field
Das Feld TypeCode muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.1).
Für den Eintrag Tabelle nach oben ist der gültige Wert für dieses Feld 2.
7.2.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.2).
Für den Eintrag Tabelle nach oben ist der gültige Wert für dieses Feld 0.
7.2.1.3 TypeCategory Field
Das Feld TypeCategory muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.3).
7.2.1.4 InUse-Feld
Das Feld InUse muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.4).
7.2.2 TableChecksum Field
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 Field
Das Feld FirstCluster muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.5).
Dieses Feld enthält den Index des ersten Clusters der Clusterkette, wie die FAT beschreibt, in dem die Up-Case-Tabelle gehostet wird.
7.2.4 DataLength Field
Das Feld DataCluster muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.6).
7.2.5 Up-Case-Tabelle
Eine Tabelle mit up-case ist eine Reihe von Unicode-Zeichenzuordnungen. Eine Zeichenzuordnung besteht aus einem 2-Byte-Feld, wobei der Index des Felds in der Tabelle mit dem Groß-/Kleinschreibungsfall das unicode-Zeichen darstellt, das groß geschrieben werden soll, und dem 2-Byte-Feld, das das Unicode-Zeichen mit up-cased darstellt.
Die ersten 128 Unicode-Zeichen weisen obligatorische Zuordnungen auf (siehe Tabelle 24). Eine Tabelle mit up-case, die über eine andere Zeichenzuordnung für eines der ersten 128 Unicode-Zeichen verfügt, ist ungültig.
Implementierungen, die nur Zeichen aus dem obligatorischen Zuordnungsbereich unterstützen, ignorieren möglicherweise die Zuordnungen der restlichen Tabelle mit up-case. Diese Implementierungen dürfen beim Erstellen oder Umbenennen von Dateien nur Zeichen aus dem obligatorischen Zuordnungsbereich verwenden (über den Verzeichniseintrag Dateiname, siehe Abschnitt 7.7). Beim Up-Casing vorhandener Dateinamen dürfen solche Implementierungen keine Großbuchstaben aus dem nicht obligatorischen Zuordnungsbereich übernehmen, sondern sie im sich ergebenden up-cased-Dateinamen intakt lassen (dies ist ein teilweises Up-Casing). Beim Vergleich von Dateinamen dürfen solche Implementierungen Dateinamen, die sich vom Vergleichsnamen unterscheiden, nur durch Unicode-Zeichen aus dem nicht obligatorischen Zuordnungsbereich als gleichwertig behandeln. Obwohl solche Dateinamen nur potenziell gleichwertig sind, können solche Implementierungen nicht sicherstellen, dass der vollständig aufgesetzte Dateiname nicht mit dem vergleichsbezogenen Namen kollidiert.
Tabelle 24 Obligatorische erste 128 Up-Case-Tabelleneinträge
Tabellenindex | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004 Stunden | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000 Bh | 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 Nicht-Identitäts-Up-Case-Zuordnungen sind fett formatiert)
Beim Formatieren eines Volumes können Implementierungen mithilfe der Identitätszuordnungskomprimierung eine Up-Case-Tabelle in einem komprimierten Format generieren, da ein großer Teil des Unicode-Zeichenraums kein Konzept der Groß-/Kleinschreibung hat (d. h. die Zeichen "Kleinbuchstaben" und "Großbuchstaben" sind gleichwertig). Implementierungen komprimieren eine Tabelle mit up-case, indem sie eine Reihe von Identitätszuordnungen mit dem Wert FFFFh gefolgt von der Anzahl der Identitätszuordnungen darstellen.
Beispielsweise kann eine Implementierung die ersten 100 (64h)-Zeichenzuordnungen mit den folgenden acht Einträgen einer komprimierten Tabelle mit up-case 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 Tabelle mit up-case bereitzustellen, ist optional. Die Möglichkeit, sowohl eine unkomprimierte als auch eine komprimierte Tabelle mit up-case zu interpretieren, ist jedoch obligatorisch. Der Wert des TableChecksum-Felds entspricht immer der Existenz der Up-Case-Tabelle auf dem Volume, die entweder im komprimierten oder nicht komprimierten Format vorliegen kann.
7.2.5.1 Empfohlene Tabelle für den Up-Case-Fall
Beim Formatieren eines Volumes sollten Implementierungen die empfohlene Up-Case-Tabelle in komprimiertem 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 Tabelle im komprimierten Format
Unformatierter Offset | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004 Stunden | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000 Bh | 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 | 00 BAh | 00Bh | 00BCh | 00 BDh | 00 BEh | 00 BFh |
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 | 01Bh | 01BCh | 01BCh | 01BEh | 01F7h |
01C0h | 01C0h | 01C1h | 01C2h | 01C3h | 01C4h | 01C5h | 01C4h | 01C7h |
01C8h | 01C8h | 01C7h | 01CAh | 01CBh | 01CAh | 01CDh | 01CDh | 01CFh |
01D0h | 01CFh | 01D1h | 01D1h | 01D3h | 01D3h | 01D5h | 01D5h | 01D7h |
01D8h | 01D7h | 01D9h | 01D9h | 01DBh | 01DBh | 018Eh | 01DEh | 01DEh |
01E0h | 01E0h | 01E0h | 01E2h | 01E2h | 01E4h | 01E4h | 01E6h | 01E6h |
01E8h | 01E8h | 01E8h | 01EAh | 01EAh | 01ECh | 01ECh | 01EEh | 01EEh |
01F0h | 01F0h | 01F1h | 01F2h | 01F1h | 01F4h | 01F4h | 01F6h | 01F7h |
01F8h | 01F8h | 01F8h | 01FAh | 01FAh | 01FCh | 01FCh | 01FEh | 01FEh |
0200h | 0200h | 0200h | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 0214h | 0216h | 0216h |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | 0226h | 0226h |
0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
02B8h | 02B8h | 02B9h | 02BAh | 02BH | 02BCh | 02BDh | 02BEh | 02BFh |
02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02FFh |
0300h | 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 | 200 Bh |
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 | 20 ABh |
08B8h | 20ACh | 20 ADh | 20AEh | 20 AFh | 20B0h | 20B1h | 20B2h | 20B3h |
08C0h | 20B4h | 20B5h | 20B6h | 20B7h | 20B8h | 20B9h | 20 BAh | 20Bh |
08C8h | 20BCh | 20BDh | 20BEh | 20 BFh | 20C0h | 20C1h | 20C2h | 20C3h |
08D0h | 20C4h | 20C5h | 20C6h | 20C7h | 20C8h | 20C9h | 20CAh | 20CBh |
08D8h | 20CCh | 20CDh | 20CEh | 20CFh | 20D0h | 20D1h | 20D2h | 20D3h |
08E0h | 20D4h | 20D5h | 20D6h | 20D7h | 20D8h | 20D9h | 20DAh | 20DBh |
08E8h | 20DCh | 20DDh | 20DEh | 20DFh | 20E0h | 20E1h | 20E2h | 20E3h |
08F0h | 20E4h | 20E5h | 20E6h | 20E7h | 20E8h | 20E9h | 20EAh | 20EBh |
08F8h | 20ECh | 20EDh | 20EEh | 20EFh | 20F0h | 20F1h | 20F2h | 20F3h |
0900h | 20F4h | 20F5h | 20F6h | 20F7h | 20F8h | 20F9h | 20FAh | 20FBh |
0908h | 20FCh | 20FDh | 20FEh | 20FFh | 2100h | 2101h | 2102h | 2103h |
0910h | 2104 Stunden | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 2113h |
0920h | 2114 Stunden | 2115h | 2116h | 2117h | 2118h | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 2120h | 2121h | 2122h | 2123h |
0930h | 2124 Stunden | 2125h | 2126h | 2127h | 2128 Stunden | 2129h | 212Ah | 212Bh |
0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131h | 2132 Stunden | 2133h |
0940h | 2134h | 2135h | 2136h | 2137h | 2138 Stunden | 2139h | 213Ah | 213Bh |
0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
0950h | 2144 Stunden | 2145h | 2146 Stunden | 2147h | 2148h | 2149h | 214Ah | 214Bh |
0958h | 214Ch | 214Dh | 2132h | 214Fh | 2150h | 2151h | 2152h | 2153h |
0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
0968h | 215Ch | 215Dh | 215Eh | 215Fh | 2160h | 2161h | 2162h | 2163h |
0970h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160h | 2161h | 2162h | 2163h |
0980h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 24Bh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 0746h | 2C00h |
09B0h | 2C01h | 2C02h | 2C03h | 2C04h | 2C05h | 2C06h | 2C07h | 2C08h |
09B8h | 2C09h | 2C0Ah | 2C0Bh | 2C0Ch | 2C0Dh | 2C0Eh | 2C0Fh | 2C10h |
09C0h | 2C11h | 2C12h | 2C13h | 2C14h | 2C15h | 2C16h | 2C17h | 2C18h |
09C8h | 2C19h | 2C1Ah | 2C1Bh | 2C1Ch | 2C1Dh | 2C1Eh | 2C1Fh | 2C20h |
09D0h | 2C21h | 2C22h | 2C23h | 2C24h | 2C25h | 2C26h | 2C27h | 2C28h |
09D8h | 2C29h | 2C2Ah | 2C2Bh | 2C2Ch | 2C2Dh | 2C2Eh | 2C5Fh | 2C60h |
09E0h | 2C60h | 2C62h | 2C63h | 2C64h | 2C65h | 2C66h | 2C67h | 2C67h |
09E8h | 2C69h | 2C69h | 2C6Bh | 2C6Bh | 2C6Dh | 2C6Eh | 2C6Fh | 2C70h |
09F0h | 2C71h | 2C72h | 2C73h | 2C74h | 2C75h | 2C75h | 2C77h | 2C78h |
09F8h | 2C79h | 2C7Ah | 2C7Bh | 2C7Ch | 2C7Dh | 2C7Eh | 2C7Fh | 2C80h |
0A00h | 2C80h | 2C82h | 2C82h | 2C84h | 2C84h | 2C86h | 2C86h | 2C88h |
0A08h | 2C88h | 2C8Ah | 2C8Ah | 2C8Ch | 2C8Ch | 2C8Eh | 2C8Eh | 2C90h |
0A10h | 2C90h | 2C92h | 2C92h | 2C94h | 2C94h | 2C96h | 2C96h | 2C98h |
0A18h | 2C98h | 2C9Ah | 2C9Ah | 2C9Ch | 2C9Ch | 2C9Eh | 2C9Eh | 2CA0h |
0A20h | 2CA0h | 2CA2h | 2CA2h | 2CA4h | 2CA4h | 2CA6h | 2CA6h | 2CA8h |
0A28h | 2CA8h | 2CAAh | 2CAAh | 2CACh | 2CACh | 2CAEh | 2CAEh | 2CB0h |
0A30h | 2CB0h | 2CB2h | 2CB2h | 2CB4h | 2CB4h | 2CB6h | 2CB6h | 2CB8h |
0A38h | 2CB8h | 2CBAh | 2CBAh | 2CBCh | 2CBCh | 2CBEh | 2CBEh | 2CC0h |
0A40h | 2CC0h | 2CC2h | 2CC2h | 2CC4h | 2CC4h | 2CC6h | 2CC6h | 2CC8h |
0A48h | 2CC8h | 2CCAh | 2CCAh | 2CCCh | 2CCCh | 2CCEh | 2CCEh | 2CD0h |
0A50h | 2CD0h | 2CD2h | 2CD2h | 2CD4h | 2CD4h | 2CD6h | 2CD6h | 2CD8h |
0A58h | 2CD8h | 2CDAh | 2CDAh | 2CDCh | 2CDCh | 2CDEh | 2CDEh | 2CE0h |
0A60h | 2CE0h | 2CE2h | 2CE2h | 2CE4h | 2CE5h | 2CE6h | 2CE7h | 2CE8h |
0A68h | 2CE9h | 2CEAh | 2CEBh | 2CECh | 2CEDh | 2CEEh | 2CEFh | 2CF0h |
0A70h | 2CF1h | 2CF2h | 2CF3h | 2CF4h | 2CF5h | 2CF6h | 2CF7h | 2CF8h |
0A78h | 2CF9h | 2CFAh | 2CFBh | 2CFCh | 2CFDh | 2CFEh | 2CFFh | 10A0h |
0A80h | 10A1h | 10A2h | 10A3h | 10A4h | 10A5h | 10A6h | 10A7h | 10A8h |
0A88h | 10A9h | 10AAh | 10 ABh | 10ACh | 10 ADh | 10AEh | 10 AFh | 10B0h |
0A90h | 10B1h | 10B2h | 10B3h | 10B4h | 10B5h | 10B6h | 10B7h | 10B8h |
0A98h | 10B9h | 10 BAh | 10Bh | 10BCh | 10BDh | 10 BEh | 10 BFh | 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 Verzeichniseintrag für Volumebezeichnungen
Die Volumebezeichnung ist eine Unicode-Zeichenfolge, mit der Endbenutzer ihre Speichervolumes unterscheiden können. Im exFAT-Dateisystem ist die Volumebezeichnung als kritischer primärer Verzeichniseintrag im Stammverzeichnis vorhanden (siehe Tabelle 26). Die gültige Anzahl der Verzeichniseinträge der Volumebezeichnung reicht von 0 bis 1.
Tabelle 26 Volume label DirectoryEntry-Struktur
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.3.1 wird der Inhalt definiert. |
CharacterCount | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.3.2 wird der Inhalt definiert. |
VolumeLabel | 2 | 22 | Dieses Feld ist obligatorisch, und in Abschnitt 7.3.3 wird der Inhalt definiert. |
Reserviert | 24 | 8 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
7.3.1 EntryType Field
Das Feld EntryType muss der Definition entsprechen, die in der Vorlage Generisches primäres Verzeichnis (siehe Abschnitt 6.3.1) bereitgestellt wird.
7.3.1.1 TypeCode Field
Das Feld TypeCode muss der Definition in der Vorlage Generisches primäres Verzeichnis entsprechen (siehe Abschnitt 6.3.1.1).
Für den Verzeichniseintrag Volumebeschriftung ist der gültige Wert für dieses Feld 3.
7.3.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition in der Vorlage Generisches primäres Verzeichnis entsprechen (siehe Abschnitt 6.3.1.2).
Für den Verzeichniseintrag Volumebeschriftung ist der gültige Wert für dieses Feld 0.
7.3.1.3 TypeCategory-Feld
Das Feld TypeCategory muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.3).
7.3.1.4 InUse Field
Das Feld InUse muss der Definition in der Vorlage Generisches primäres Verzeichnis entsprechen (siehe Abschnitt 6.3.1.4).
7.3.2 CharacterCount Field
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 sein:
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 VolumeLabel-Feld muss eine Unicode-Zeichenfolge enthalten, bei der es sich um den benutzerfreundlichen Namen des Volumes handelt. Das VolumeLabel-Feld weist denselben Satz ungültiger Zeichen wie das Feld FileName des Verzeichniseintrags "Dateiname" auf (siehe Abschnitt 7.7.3).
7.4 Dateiverzeichniseintrag
Dateiverzeichniseinträge beschreiben Dateien und Verzeichnisse. Sie sind wichtige primäre Verzeichniseinträge, und jedes Verzeichnis kann null oder mehr Dateiverzeichniseinträge enthalten (siehe Tabelle 27). Damit ein Dateiverzeichniseintrag gültig ist, müssen genau ein Verzeichniseintrag der Streamerweiterung und mindestens ein Dateiname-Verzeichniseintrag unmittelbar auf den Dateiverzeichniseintrag 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 in Abschnitt 7.4.1 wird der Inhalt definiert. |
SecondaryCount | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.2 wird der Inhalt definiert. |
SetChecksum | 2 | 2 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.3 wird der Inhalt definiert. |
FileAttributes | 4 | 2 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.4 wird der Inhalt definiert. |
Reserved1 | 6 | 2 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
CreateTimestamp | 8 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.5 a> wird der Inhalt definiert. |
LastModifiedTimestamp | 12 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.6 wird der Inhalt definiert. |
LastAccessedTimestamp | 16 | 4 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.7 wird der Inhalt definiert. |
Create10msIncrement | 20 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.5 a> wird der Inhalt definiert. |
LastModified10msIncrement | 21 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.6 wird der Inhalt definiert. |
CreateUtcOffset | 22 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.4.5 a> wird der Inhalt definiert. |
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 Field
Das Feld EntryType muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1).
7.4.1.1 TypeCode Field
Das Feld TypeCode muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (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 Field
Das Feld TypeImportance muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (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 Field
Das Feld TypeCategory muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.3).
7.4.1.4 InUse Field
Das Feld InUse muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.4).
7.4.2 SecondaryCount Field
Das Feld SecondaryCount muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (siehe Abschnitt 6.3.2) bereitgestellt wird.
7.4.3 SetChecksum Field
Das Feld SetChecksum muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.3).
7.4.4 FileAttributes Field
Das FileAttributes-Feld enthält Flags (siehe Tabelle 28).
Tabelle 28 FileAttributes-Feldstruktur
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 Felder CreateTimestamp, Create10msIncrement und CreateUtcOffset
In Kombination müssen die Felder CreateTimestamp und CreateTime10msIncrement das lokale Datum und die Uhrzeit der Erstellung der angegebenen Datei/des angegebenen Verzeichnisses beschreiben. Das Feld CreateUtcOffset beschreibt den Offset des lokalen Datums und der lokalen Uhrzeit von UTC. Implementierungen müssen diese Felder bei der Erstellung des angegebenen Verzeichniseintragssatzes festlegen.
Diese Felder müssen den Definitionen der Felder Timestamp, 10msIncrement und UtcOffset entsprechen (siehe Abschnitt 7.4.8, Abschnitt 7.4.9 und Abschnitt 7.4.10).
7.4.6 Felder LastModifiedTimestamp, LastModified10msIncrement und LastModifiedUtcOffset
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 lokalen Uhrzeit von UTC. Die Implementierungen müssen diese Felder aktualisieren:
Nach dem Ändern des Inhalts eines der Cluster, die dem angegebenen Verzeichniseintrag der Stream-Erweiterung zugeordnet sind (mit Ausnahme von Inhalten, die über den im Feld ValidDataLength beschriebenen Punkt hinausgehen)
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.9 und Abschnitt 7.4.10).
7.4.7 Felder LastAccessedTimestamp und LastAccessedUtcOffset
Das Feld LastAccessedTimestamp muss das lokale Datum und die Uhrzeit des letzten Zugriffs auf den Inhalt eines der Cluster beschreiben, die dem angegebenen Verzeichniseintrag der Streamerweiterung zugeordnet sind. Das Feld LastAccessedUtcOffset beschreibt den Offset des lokalen Datums und der lokalen Uhrzeit von UTC. Die Implementierungen müssen diese Felder aktualisieren:
Nach dem Ändern des Inhalts eines der Cluster, die dem angegebenen Verzeichniseintrag der Stream-Erweiterung zugeordnet sind (mit Ausnahme von Inhalten, die außerhalb der 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 der 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 das lokale Datum als auch die 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. |
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 Field
Das DoubleSeconds-Feld muss den Sekundenteil des Zeitstempelfelds in Zwei-Sekunden-Vielfachen beschreiben.
Der gültige Wertebereich für dieses Feld ist:
0, das 0 Sekunden darstellt
29, die 58 Sekunden darstellt
Feld 7.4.8.2 Minuten
Das Feld Minute muss den Minutenanteil des Zeitstempelfelds beschreiben.
Der gültige Wertebereich für dieses Feld ist:
0, was 0 Minuten darstellt
59, das entspricht 59 Minuten
Feld 7.4.8.3 Stunden
Das Feld Stunde muss den Stundenteil des Zeitstempelfelds beschreiben.
Der gültige Wertebereich für dieses Feld ist:
0, was 00:00 Stunden darstellt
23, was 23:00 Stunden darstellt
7.4.8.4 Tagesfeld
Das Feld Tag muss den Tagesteil des Zeitstempelfelds beschreiben.
Der gültige Wertebereich für dieses Feld ist:
1, der erste Tag des jeweiligen Monats
Der letzte Tag des angegebenen Monats (der angegebene Monat definiert die Anzahl der gültigen Tage)
Feld 7.4.8.5 Monate
Das Feld Monat muss den Monatsteil des Zeitstempelfelds beschreiben.
Der gültige Wertebereich für dieses Feld ist:
Mindestens 1, das den Januar darstellt
Höchstens 12, was Dezember darstellt
7.4.8.6 Jahr Feld
Das Feld Jahr beschreibt den Jahresanteil des Zeitstempelfelds im Verhältnis zum Jahr 1980. 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 10msInkrementfelder
10 msIncrementfelder müssen zusätzliche Zeitauflösungen für die entsprechenden Zeitstempelfelder in Zehn-Millisekunden-Vielfachen bereitstellen.
Der gültige Wertebereich für diese Felder ist:
Mindestens 0, was 0 Millisekunden darstellt
Höchstens 199, was 1990 Millisekunden entspricht
7.4.10 UtcOffset-Felder
UtcOffset-Felder (siehe Tabelle 30) beschreiben den Offset von UTC auf das lokale Datum und die Uhrzeit der entsprechenden Felder Timestamp und 10msIncrement. Der Offset von UTC auf das lokale Datum und die lokale Uhrzeit enthält die Auswirkungen von Zeitzonen und anderen Datum-Uhrzeit-Anpassungen, 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 Field
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 OffsetFromUtc-Felds
Wert | Signierte Dezimaläquivalente | Beschreibung |
---|---|---|
3Fh | 63 | Lokales Datum und Uhrzeit ist UTC + 15:45 |
3Eh | 62 | Lokales Datum und Uhrzeit ist UTC + 15:30 |
. . . |
. . . |
. . . |
01h | 1 | Lokales Datum und Uhrzeit ist UTC + 00:15 |
00h | 0 | Lokales Datum und Uhrzeit ist UTC |
7Fh | -1 | Lokales Datum und Uhrzeit ist UTC – 00:15 |
. . . |
. . . |
. . . |
41 Stunden | -63 | Lokales Datum und Uhrzeit ist UTC – 15:45 Uhr |
40 Stunden | -64 | Lokales Datum und Uhrzeit ist UTC – 16:00 Uhr |
Wie die obige Tabelle zeigt, sind alle möglichen Werte für dieses Feld gültig. Implementierungen sollten jedoch nur den Wert 00h für dieses Feld aufzeichnen, wenn:
Das lokale Datum und die lokale Uhrzeit sind tatsächlich identisch mit UTC. In diesem Fall muss der Wert des Felds OffsetValid 1 sein.
Lokales Datum und Uhrzeit sind nicht bekannt. In diesem Fall muss der Wert des OffsetValid-Felds 1 sein, und Implementierungen müssen UTC als lokales Datum und lokale Uhrzeit betrachten.
UTC ist nicht bekannt. In diesem Fall muss der Wert des OffsetValid-Felds 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 Uhrzeit betrachten.
7.4.10.2 OffsetValid Field
Das Feld OffsetValid muss wie folgt beschreiben, ob der Inhalt des Felds OffsetFromUtc gültig ist oder nicht:
0, was bedeutet, dass der Inhalt des Felds OffsetFromUtc ungültig ist.
und muss 00h sein
1, was bedeutet, dass der Inhalt des Felds OffsetFromUtc gültig ist.
Implementierungen sollten dieses Feld nur dann auf den Wert 0 festlegen, wenn UTC für die Berechnung des Werts des OffsetFromUtc-Felds nicht verfügbar ist. Wenn dieses Feld den Wert 0 enthält, behandeln Implementierungen die Felder Timestamp und 10msIncrement mit demselben UTC-Offset wie das aktuelle lokale Datum und die aktuelle lokale Uhrzeit.
7.5 Volume-GUID-Verzeichniseintrag
Der Verzeichniseintrag volume GUID enthält eine GUID, die es Implementierungen ermöglicht, Volumes eindeutig und programmgesteuert zu unterscheiden. Die Volume-GUID ist als gutartiger primärer Verzeichniseintrag im Stammverzeichnis vorhanden (siehe Tabelle 32). Die gültige Anzahl der Volume-GUID-Verzeichniseinträge reicht von 0 bis 1.
Tabelle 32 Volume-GUID DirectoryEntry
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.5.1 wird der Inhalt definiert. |
SecondaryCount | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.5.2 wird der Inhalt definiert. |
SetChecksum | 2 | 2 | Dieses Feld ist obligatorisch, und in Abschnitt 7.5.3 wird der Inhalt definiert. |
GeneralPrimaryFlags | 4 | 2 | Dieses Feld ist obligatorisch, und in Abschnitt 7.5.4 wird der Inhalt definiert. |
VolumeGuid | 6 | 16 | Dieses Feld ist obligatorisch, und in Abschnitt 7.5.5 wird der Inhalt definiert. |
Reserviert | 22 | 10 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
7.5.1 EntryType Field
Das Feld EntryType muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1).
7.5.1.1 TypeCode Field
Das Feld TypeCode muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.1).
Für den Verzeichniseintrag Volume GUID ist der gültige Wert für dieses Feld 0.
7.5.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.2).
Für den Verzeichniseintrag Volume GUID ist der gültige Wert für dieses Feld 1.
7.5.1.3 TypeCategory Field
Das Feld TypeCategory muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.3).
7.5.1.4 InUse Field
Das Feld InUse muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.1.4).
7.5.2 SecondaryCount Field
Das Feld SecondaryCount muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (siehe Abschnitt 6.3.2) bereitgestellt wird.
Für den Verzeichniseintrag Volume GUID ist der gültige Wert für dieses Feld 0.
7.5.3 SetChecksum Field
Das Feld SetChecksum muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.3).
7.5.4 GeneralPrimaryFlags Field
Das Feld GeneralPrimaryFlags muss der Definition entsprechen, die in der Vorlage Generic Primary DirectoryEntry (siehe Abschnitt 6.3.4) bereitgestellt wird, und definiert den Inhalt des zu reservierenden Felds CustomDefined.
7.5.4.1 ZuordnungPossible-Feld
Das Feld AllocationPossible muss der Definition in der Vorlage Generic Primary DirectoryEntry entsprechen (siehe Abschnitt 6.3.4.1).
Für den Verzeichniseintrag Volume GUID ist der gültige Wert für dieses Feld 0.
7.5.4.2 NoFatChain Field
Das Feld NoFatChain muss der Definition in der Vorlage Generisches primäres Verzeichnis Entsprechen (siehe Abschnitt 6.3.4.2).
7.5.5 VolumeGuid Field
Das VolumeGuid-Feld 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.{00000000-0000-0000-0000-000000000000}
7.6 Eintrag im Stream-Erweiterungsverzeichnis
Der Verzeichniseintrag stream extension ist ein kritischer sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 33). Die gültige Anzahl von Stream Extension-Verzeichniseinträgen in einem Dateiverzeichniseintragssatz ist 1. Außerdem ist dieser Verzeichniseintrag nur gültig, wenn er unmittelbar auf den Dateiverzeichniseintrag folgt.
Tabelle 33 Stream-Erweiterung DirectoryEntry
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.6.1 wird der Inhalt definiert. |
GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.6.2 wird der Inhalt definiert. |
Reserved1 | 2 | 1 | Dieses Feld ist obligatorisch, und sein Inhalt ist reserviert. |
NameLength | 3 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.6.3 wird der Inhalt definiert. |
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. |
Reserviert3 | 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 Field
Das Feld EntryType muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.1).
7.6.1.1 TypeCode Field
Das Feld TypeCode muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.1.1) bereitgestellt wird.
Für den Verzeichniseintrag der Streamerweiterung ist der gültige Wert für dieses Feld 0.
7.6.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage Generisches sekundäres Verzeichnis (siehe Abschnitt 6.4.1.2) bereitgestellt wird.
Für den Verzeichniseintrag der Streamerweiterung ist der gültige Wert für dieses Feld 0.
7.6.1.3 TypeCategory-Feld
Das TypeCategory-Feld muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.1.3).
7.6.1.4 InUse Field
Das Feld InUse muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.1.4).
7.6.2 GeneralSecondaryFlags Field
Das Feld GeneralSecondaryFlags muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.2) bereitgestellt wird, und definiert den Inhalt des zu reservierenden Felds CustomDefined.
7.6.2.1 ZuordnungSfähiges Feld
Das Feld AllocationPossible muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.2.1).
Für den Verzeichniseintrag der Streamerweiterung ist der gültige Wert für dieses Feld 1.
7.6.2.2 NoFatChain-Feld
Das Feld NoFatChain muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.2.2).
7.6.3 NameLength Field
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 sein:
Mindestens 1, der kürzeste mögliche Dateiname
Höchstens 255, was der längste mögliche Dateiname ist
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 up-cased enthalten. Dadurch können Implementierungen einen schnellen Vergleich durchführen, wenn sie nach einer Datei anhand des Namens suchen. Wichtig ist, dass NameHash eine sichere Überprüfung eines Konflikts bietet. Implementierungen müssen überprüfen, ob alle NameHash-Übereinstimmungen mit einem Vergleich des Dateinamens mit up-cased verwendet werden.
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 benutzerdaten in den Datenstrom 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 geben Nullen für Lesevorgänge über die gültige Datenlänge hinaus zurück.
Wenn der entsprechende Dateiverzeichniseintrag ein Verzeichnis beschreibt, ist der einzige gültige Wert für dieses Feld gleich dem Wert des Felds DataLength. Andernfalls muss der Bereich der gültigen Werte für dieses Feld wie folgt sein:
Mindestens 0, d. h., es wurden keine Benutzerdaten in den Datenstrom geschrieben.
Höchstens DataLength, was bedeutet, dass Benutzerdaten auf die gesamte Länge des Datenstroms geschrieben wurden.
7.6.6 FirstCluster Field
Das Feld FirstCluster muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (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 Feld DataLength muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (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 Byte, die möglicherweise 0 sein kann. Darüber hinaus beträgt der maximale Wert für dieses Feld für Verzeichnisse 256 MB.
7.7 Dateiname Verzeichniseintrag
Dateiname-Verzeichniseinträge sind wichtige sekundäre Verzeichniseinträge in Dateiverzeichniseintragssätzen (siehe Tabelle 34). Die gültige Anzahl von Dateiverzeichniseinträgen in einem Dateiverzeichniseintragssatz ist NameLength/15, aufgerundet auf die nächste ganze Zahl. Darüber hinaus sind Dateiname-Verzeichniseinträge nur gültig, wenn sie unmittelbar dem Verzeichniseintrag der Streamerweiterung als aufeinanderfolgende Reihe folgen. Dateiname-Verzeichniseinträge werden kombiniert, um den Dateinamen für den Dateiverzeichniseintragssatz zu bilden.
Alle untergeordneten Elemente eines bestimmten Verzeichniseintrags müssen über eindeutige Verzeichniseintragssätze für Dateinamen verfügen. Das heißt, es dürfen keine doppelten Datei- oder Verzeichnisnamen nach up-casing innerhalb eines Verzeichnisses vorhanden sein.
Tabelle 34 Dateiname VerzeichnisEntry
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 Field
Das Feld EntryType muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.1).
7.7.1.1 TypeCode-Feld
Das Feld TypeCode muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.1.1) bereitgestellt wird.
Für den Verzeichniseintrag Dateiname ist der gültige Wert für dieses Feld 1.
7.7.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage Generisches sekundäres Verzeichnis (siehe Abschnitt 6.4.1.2) bereitgestellt wird.
Für den Verzeichniseintrag Dateiname ist der gültige Wert für dieses Feld 0.
7.7.1.3 TypeCategory-Feld
Das TypeCategory-Feld muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.1.3).
7.7.1.4 InUse Field
Das Feld InUse muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.1.4).
7.7.2 GeneralSecondaryFlags Field
Das Feld GeneralSecondaryFlags muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.2) bereitgestellt wird, und definiert den Inhalt des zu reservierenden Felds CustomDefined.
7.7.2.1 AllocationPossible Field
Das Feld AllocationPossible muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.2.1).
Für den Verzeichniseintrag der Streamerweiterung ist der gültige Wert für dieses Feld 0.
7.7.2.2 NoFatChain-Feld
Das Feld NoFatChain muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.2.2).
7.7.3 FileName Field
Das Feld FileName muss eine Unicode-Zeichenfolge enthalten, die ein Teil des Dateinamens ist. In der Reihenfolge Dateiname sind Verzeichniseinträge in einem Dateiverzeichniseintragssatz vorhanden. FileName-Felder verketten sich, um den Dateinamen für den Dateiverzeichniseintragssatz zu bilden. Angesichts der Länge des Felds "Dateiname" (15 Zeichen) und der maximalen Anzahl von 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 Dateinamenzeichen
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 | 000 Bh | 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 Dateiname aufzeichnen. Implementierungen können jedoch diese beiden Dateinamen in Verzeichnislisten generieren, um auf das aufgelistete Verzeichnis und das enthaltende Verzeichnis zu verweisen.
Implementierungen möchten datei- und verzeichnisnamen möglicherweise nur auf den ASCII-Zeichensatz beschränken. Wenn ja, sollte die Zeichenverwendung auf den Bereich der gültigen Zeichen in den ersten 128 Unicode-Einträgen beschränkt werden. Sie müssen weiterhin Datei- und Verzeichnisnamen in Unicode auf dem Volume speichern und bei der Verbindung mit dem Benutzer in/aus ASCII/Unicode übersetzen.
7.8 Verzeichniseintrag der Anbietererweiterung
Der Verzeichniseintrag der Anbietererweiterung ist ein harmloser sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 36). Ein Dateiverzeichniseintragssatz kann eine beliebige Anzahl von Verzeichniseinträgen der Anbietererweiterung enthalten, bis zur Grenze der sekundären Verzeichniseinträge, 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 Verzeichniseinträgen der Streamerweiterung und des Dateinamens vorangestellt sind.
Verzeichniseinträge der Anbietererweiterung ermöglichen es Anbietern, über das Feld VendorGuid eindeutige, anbieterspezifische Verzeichniseinträge in einzelnen Dateiverzeichniseintragssätzen zu verwenden (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 möglicherweise anbieterspezifische Funktionen bereitstellen.
Implementierungen, die die GUID eines Verzeichniseintrags der Anbietererweiterung nicht erkennen, behandeln den Verzeichniseintrag genauso wie jeder andere nicht erkannte unerkannte sekundäre Verzeichniseintrag (siehe Abschnitt 8.2).
Tabelle 36 Verzeichnis der AnbietererweiterungEntry
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.8.1 wird der Inhalt definiert. |
GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.8.2 wird der Inhalt definiert. |
VendorGuid | 2 | 16 | Dieses Feld ist obligatorisch, und in Abschnitt 7.8.3 wird der Inhalt definiert. |
VendorDefined | 18 | 14 | Dieses Feld ist obligatorisch, und Anbieter können den Inhalt definieren. |
7.8.1 EntryType Field
Das Feld EntryType muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.1).
7.8.1.1 TypeCode-Feld
Das Feld TypeCode muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.1.1) bereitgestellt wird.
Für den Verzeichniseintrag der Anbietererweiterung ist der gültige Wert für dieses Feld 0.
7.8.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition entsprechen, die in der Vorlage Generisches sekundäres Verzeichnis (siehe Abschnitt 6.4.1.2) bereitgestellt wird.
Für den Verzeichniseintrag Der Anbietererweiterung ist der gültige Wert für dieses Feld 1.
7.8.1.3 TypeCategory-Feld
Das TypeCategory-Feld muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.1.3).
7.8.1.4 InUse Field
Das Feld InUse muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.1.4).
7.8.2 GeneralSecondaryFlags Field
Das Feld GeneralSecondaryFlags muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.2) bereitgestellt wird, und definiert den Inhalt des zu reservierenden Felds CustomDefined.
7.8.2.1 ZuordnungSpossible-Feld
Das Feld AllocationPossible muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.2.1).
Für den Verzeichniseintrag der Anbietererweiterung 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 Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.2.2).
7.8.3 VendorGuid Field
Das Feld VendorGuid muss eine GUID enthalten, die die angegebene Vendor-Erweiterung eindeutig identifiziert.
Alle möglichen Werte für dieses Feld sind gültig, mit Ausnahme der NULL-GUID, die ist {00000000-0000-0000-0000-000000000000}. Anbieter sollten jedoch ein GUID-generierendes Tool wie GuidGen.exe verwenden, um beim Definieren ihrer Erweiterungen eine GUID auszuwählen.
Der Wert dieses Felds bestimmt die anbieterspezifische Struktur des Felds VendorDefined.
7.9 Anbieterzuordnungsverzeichniseintrag
Der Verzeichniseintrag "Vendor Allocation" ist ein harmloser sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 37). Ein Dateiverzeichniseintragssatz kann eine beliebige Anzahl von Verzeichniseinträgen der Anbieterzuordnung enthalten, bis zur Grenze der sekundären Verzeichniseinträge, abzüglich der Anzahl anderer sekundärer Verzeichniseinträge. Darüber hinaus sind Verzeichniseinträge der Anbieterzuordnung nur gültig, wenn sie nicht den erforderlichen Verzeichniseinträgen der Stream-Erweiterung und des Dateinamens vorangestellt sind.
Anbieterzuordnungsverzeichniseinträge ermöglichen Es Anbietern, über das Feld VendorGuid eindeutige, anbieterspezifische Verzeichniseinträge in einzelnen Dateiverzeichniseintragssätzen zu verwenden (siehe Tabelle 37). Eindeutige Verzeichniseinträge ermöglichen Es Anbietern effektiv, das exFAT-Dateisystem zu erweitern. Anbieter können den Inhalt der zugeordneten Cluster definieren, sofern vorhanden. Anbieterimplementierungen können ggf. den Inhalt der zugeordneten Cluster verwalten und anbieterspezifische Funktionen bereitstellen.
Implementierungen, die die GUID eines Verzeichniseintrags für die Anbieterzuordnung nicht erkennen, behandeln den Verzeichniseintrag genauso wie jeder andere nicht erkannte unerkannte sekundäre Verzeichniseintrag (siehe Abschnitt 8.2).
Tabelle 37 Verzeichnis der AnbieterzuordnungEntry
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.9.1 wird der Inhalt definiert. |
GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch, und in Abschnitt 7.9.2 wird der Inhalt definiert. |
VendorGuid | 2 | 16 | Dieses Feld ist obligatorisch, und in Abschnitt 7.9.3 wird der Inhalt definiert. |
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 Field
Das EntryType-Feld muss der Definition in der Vorlage Generisches sekundäres Verzeichnis Entsprechen (siehe Abschnitt 6.4.1).
7.9.1.1 TypeCode Field
Das Feld TypeCode muss der Definition in der Vorlage Generisches sekundäres Verzeichnis entsprechen (siehe Abschnitt 6.4.1.1).
Für den Verzeichniseintrag Anbieterzuordnung ist der gültige Wert für dieses Feld 1.
7.9.1.2 TypeImportance Field
Das Feld TypeImportance muss der Definition in der Vorlage Generisches sekundäres Verzeichnis Entsprechen (siehe Abschnitt 6.4.1.2).
Für den Verzeichniseintrag Anbieterzuordnung ist der gültige Wert für dieses Feld 1.
7.9.1.3 TypeCategory Field
Das Feld TypeCategory muss der Definition in der Vorlage Generisches sekundäres Verzeichnis Entsprechen (siehe Abschnitt 6.4.1.3).
7.9.1.4 InUse Field
Das Feld InUse muss der Definition in der Vorlage Generisches sekundäres Verzeichnis Entsprechen (siehe Abschnitt 6.4.1.4).
7.9.2 GeneralSecondaryFlags Field
Das Feld GeneralSecondaryFlags muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry (siehe Abschnitt 6.4.2) bereitgestellt wird, und definiert den Inhalt des zu reservierenden Felds CustomDefined.
7.9.2.1 ZuordnungPossible Field
Das Feld AllocationPossible muss der Definition in der Vorlage Generic Secondary DirectoryEntry entsprechen (siehe Abschnitt 6.4.2.1).
Für den Verzeichniseintrag Anbieterzuordnung ist der gültige Wert für dieses Feld 1.
7.9.2.2 NoFatChain Field
Das Feld NoFatChain muss der Definition entsprechen, die in der Vorlage Generic Secondary DirectoryEntry bereitgestellt wird (siehe Abschnitt 6.4.2.2).
7.9.3 VendorGuid Field
Das Feld VendorGuid muss eine GUID enthalten, die die angegebene Anbieterzuordnung eindeutig identifiziert.
Alle möglichen Werte für dieses Feld sind gültig, mit Ausnahme der NULL-GUID.{00000000-0000-0000-0000-000000000000} Anbieter sollten jedoch ein GUID-generierendes Tool wie GuidGen.exe verwenden, um beim Definieren ihrer Erweiterungen eine GUID auszuwählen.
Der Wert dieses Felds bestimmt die anbieterspezifische Struktur des Inhalts der zugeordneten Cluster, sofern vorhanden.
7.9.4 FirstCluster Field
Das Feld FirstCluster muss der Definition in der Vorlage Generisches sekundäres Verzeichnis Entsprechen (siehe Abschnitt 6.4.3).
7.9.5 DataLength Field
Das Feld DataLength muss der Definition in der Vorlage Generic Secondary DirectoryEntry entsprechen (siehe Abschnitt 6.4.4).
7.10 TexFAT Padding Directory-Eintrag
Diese Spezifikation, exFAT Revision 1.00 File System Basic Specification, definiert nicht den TexFAT Padding-Verzeichniseintrag. Sein Typcode ist jedoch 1 und seine Typrelevanz ist 1. Implementierungen dieser Spezifikation behandeln TexFAT Padding-Verzeichniseinträge genauso wie alle anderen nicht erkannten gutartigen Primärverzeichniseinträge. Implementierungen dürfen keine TexFAT-Padding-Verzeichniseinträge verschieben.
8 Implementierungshinweise
8.1 Empfohlene Schreibreihenfolge
Implementierungen sollten sicherstellen, dass das Volume so widerstandsfähig wie möglich gegen Stromversorgungsfehler und andere unvermeidbare Fehler ist. Wenn Sie neue Verzeichniseinträge erstellen oder Clusterzuordnungen ändern, sollten Implementierungen im Allgemeinen die folgende Schreibreihenfolge befolgen:
Legen Sie den Wert des VolumeDirty-Felds auf 1 fest.
Aktualisieren Sie bei Bedarf die aktive FAT.
Aktualisieren der aktiven Zuordnungs-Bitmap
Erstellen oder Aktualisieren des Verzeichniseintrags, falls erforderlich
Löschen Sie den Wert des VolumeDirty-Felds auf 0, wenn der Wert vor dem ersten Schritt 0 war.
Beim Löschen von Verzeichniseinträgen oder freigeben von Clusterzuordnungen sollten Implementierungen die folgende Schreibreihenfolge befolgen:
Legen Sie den Wert des VolumeDirty-Felds auf 1 fest.
Löschen oder Aktualisieren des Verzeichniseintrags, falls erforderlich
Aktualisieren Sie bei Bedarf die aktive FAT.
Aktualisieren der aktiven Zuordnungs-Bitmap
Löschen Sie den Wert des VolumeDirty-Felds auf 0, wenn der Wert vor dem ersten Schritt 0 war.
8.2 Auswirkungen nicht erkannter Verzeichniseinträge
Zukünftige exFAT-Spezifikationen mit der gleichen Hauptrevisionsnummer 1 und der Nebenrevisionsnummer höher als 0 können neue gutartige primäre, kritische sekundäre und gutartige sekundäre Verzeichniseinträge definieren. Nur exFAT-Spezifikationen einer höheren Hauptrevisionsnummer können neue wichtige 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 jede nebenrevisionsnummer einzubinden und darauf zuzugreifen. Dies stellt Szenarien dar, in denen eine Implementierung auf Verzeichniseinträge stößt, die sie nicht erkennt. Im Folgenden werden die Auswirkungen dieser Szenarien beschrieben:
Das Vorhandensein von nicht erkannten wichtigen primären Verzeichniseinträgen im Stammverzeichnis macht das Volume ungültig. Das Vorhandensein eines wichtigen primären Verzeichniseintrags mit Ausnahme von Dateiverzeichniseinträgen in jedem Nicht-Stammverzeichnis führt dazu, dass das Hostingverzeichnis ungültig ist.
Implementierungen dürfen nicht erkannte gutartige Primärverzeichniseinträge oder die zugehörigen Clusterzuordnungen nicht ändern. Beim Löschen eines Verzeichnisses und nur beim Löschen eines Verzeichnisses müssen Implementierungen jedoch nicht erkannte gutartige Primäre Verzeichniseinträge löschen und alle zugeordneten Clusterzuordnungen freigeben, falls vorhanden.
Implementierungen dürfen nicht erkannte kritische sekundäre Verzeichniseinträge oder die zugehörigen Clusterzuordnungen nicht ändern. Durch das Vorhandensein eines oder mehrerer nicht erkannter kritischer sekundärer Verzeichniseinträge in einem Verzeichniseintragssatz wird der gesamte Verzeichniseintragssatz nicht erkannt. Beim Löschen eines Verzeichniseintragssatzes, der einen oder mehrere nicht erkannte kritische sekundäre Verzeichniseinträge enthält, müssen Implementierungen alle Clusterzuordnungen freisetzen, sofern vorhanden, die nicht erkannten kritischen sekundären Verzeichniseinträgen zugeordnet sind. Wenn der Verzeichniseintragssatz ein Verzeichnis beschreibt, können Implementierungen folgendes durchführen:
Durchqueren des Verzeichnisses
Auflisten der enthaltenen Verzeichniseinträge
Löschen von Einträgen in geschlossenen Verzeichnissen
Verschieben eigenständiger Verzeichniseinträge in ein anderes Verzeichnis
Die Implementierungen dürfen jedoch nicht
Ändern von Einträgen in geschlossenen Verzeichnissen, mit Ausnahme des Löschens, wie angegeben
Erstellen neuer eigenständiger Verzeichniseinträge
Öffnen Sie enthaltene Verzeichniseinträge, mit Ausnahme von Durchläufen und Aufzählungen, wie angegeben.
Implementierungen dürfen nicht erkannte gutartige sekundäre Verzeichniseinträge oder die zugehörigen Clusterzuordnungen nicht ändern. Implementierungen sollten nicht erkannte gutartige sekundäre Verzeichniseinträge ignorieren. Beim Löschen eines Verzeichniseintragssatzes müssen Implementierungen alle Clusterzuordnungen freisetzen, sofern vorhanden, die nicht erkannten gutartigen sekundären Verzeichniseinträgen zugeordnet sind.
9 Dateisystemgrenzwerte
9.1 Größenbeschränkungen für Sektoren
Das Feld BytesPerSectorShift definiert die Größenbeschränkungen für den unteren und oberen Sektor (was als Untergrenze von 512 Bytes, Obergrenze: 4.096 Bytes) ausgewertet wird.
9.2 Größenbeschränkungen für Cluster
Das Feld SectorsPerClusterShift definiert die untere und obere Clustergröße (untere Grenze: 1 Sektor; Obergrenze: 25 - BytesPerSectorShift-Sektoren, die auf 32 MB ausgewertet werden).
9.3 Größenbeschränkungen für Clusterheap
Der Clusterheap muss mindestens genügend Speicherplatz enthalten, um die folgenden grundlegenden Dateisystemstrukturen zu hosten: das Stammverzeichnis, alle Zuordnungs-Bitmaps und die Up-Case-Tabelle.
Die untere Clusterheap-Größenbegrenzung ist eine Funktion des unteren Größenlimits der einzelnen grundlegenden Dateisystemstrukturen, die sich im Clusterheap befinden. Selbst angesichts des kleinstmöglichen Clusters (512 Bytes) benötigt jede der grundlegenden Dateisystemstrukturen nicht mehr als einen Cluster. Daher ist die untere Grenze: 2 + NumberOfFats-Cluster, die entweder zu 3 oder 4 Clustern ausgewertet werden, abhängig vom Wert des NumberOfFats-Felds.
Das obere Clusterheap-Größenlimit ist eine einfache Funktion der maximal möglichen Anzahl von Clustern, die das ClusterCount-Feld definiert (Obergrenze: 232-11 Cluster). Unabhängig von der Clustergröße verfügt ein solcher Clusterheap über genügend Speicherplatz, um zumindest die grundlegenden Dateisystemstrukturen zu hosten.
9.4 Größenbeschränkungen für Volumes
Das VolumeLength-Feld definiert die Größengrenzwerte für das untere und obere Volume (untere Grenze: 220/2BytesPerSectorShift-Sektoren, die auf 1 MB ausgewertet werden; Obergrenze: 264-1 Sektoren, die bei der größtmöglichen Sektorgröße auf ca. 64ZB geschätzt werden. Diese Spezifikation empfiehlt jedoch nicht mehr als 224-2 Cluster im Clusterheap (siehe Abschnitt 3.1.9). Daher ist die empfohlene Obergrenze eines Volumes: ClusterHeapOffset + (224- 2) * 2SectorsPerClusterShift. Angesichts der größtmöglichen Clustergröße von 32 MB und unter der Annahme, dass ClusterHeapOffset 96 MB beträgt (genügend Speicherplatz für die Haupt- und Sicherungsstartregionen und nur für die erste FAT), wird die empfohlene Obergrenze eines Volumes auf ca. 512 TB geschätzt.
9.5 Grenzwerte für die Verzeichnisgröße
Das Feld DataLength des Verzeichniseintrags der Stream-Erweiterung definiert die untere und obere Verzeichnisgröße (untere Grenze: 0 Bytes; Obergrenze: 256 MB). Dies bedeutet, dass ein Verzeichnis bis zu 8.388.608 Verzeichniseinträge hosten kann (jeder Verzeichniseintrag verbraucht 32 Bytes). Angesichts des kleinstmöglichen Dateiverzeichniseintragssatzes, drei Verzeichniseinträge, 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 8 Hexadezimalstellen besteht, gefolgt von drei Gruppen mit jeweils 4 Hexadezimalstellen und gefolgt von einer Gruppe von 12 Hexadezimalstellen, 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 zwei Bytes aus der zweiten Gruppe der GUID (CA47h aus dem Beispiel). |
Data3 | 6 | 2 | Dieses Feld ist obligatorisch und enthält die zwei Bytes aus der dritten Gruppe der GUID (1067 Stunden im 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 im Beispiel). |
Data4[5] | 13 | 1 | Dieses Feld ist obligatorisch und enthält das vierte Byte aus der fünften Gruppe der GUID (06h im Beispiel). |
Data4[6] | 14 | 1 | Dieses Feld ist obligatorisch und enthält das fünfte Byte aus der fünften Gruppe der GUID (62 Stunden im 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 Nutzungsszenarien sicherzustellen, sollten Implementierungen den Partitionstyp 07h für den partitionierten MBR-Speicher und die Partitions-GUID {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} für den partitionierten GPT-Speicher verwenden.
11 Änderungsverlauf der Dokumentation
Tabelle 39 beschreibt den Verlauf der Freigaben, Korrekturen, Ergänzungen, Entfernungen und Klarstellungen dieses Dokuments.
Tabelle 39: Änderungsverlauf der Dokumentation
Datum | Beschreibung der Änderung |
---|---|
08-Jan-2008 | Erste Version der Basic Specification, die Folgendes enthält: Abschnitt 1, Einführung Abschnitt 2: Abschnitt 3, Haupt- und Sicherungsstartregionen Abschnitt 4, Dateizuordnungstabellenregion Abschnitt 5, Datenregion Abschnitt 6, Verzeichnisstruktur Abschnitt 7, Verzeichniseintragsdefinitionen Abschnitt 8, Implementierungshinweise Abschnitt 9, Dateisystemgrenzwerte Abschnitt 10, Anhang |
08-Jun-2008 | Zweite Version der Basic Specification, die die folgenden Änderungen enthält: Ergänzung von Abschnitt 11, Hinzufügen der Verzeichniseinträge "Vendor Extension" und "Vendor Allocation" in den Abschnitten 7.8 und 7.9 Hinzufügen der empfohlenen Up-Case-Tabelle in den Abschnitten 7.2.5 und 7.2.5.1 Hinzufügen der UtcOffset-Felder in Abschnitt 7.4 und Hinzufügen der Abkürzung UTC in Abschnitt 1.3 Korrektur der Größe des CustomDefined-Felds in Tabelle 19 Korrektur des gültigen Bereichs von NameLength-Werten in Abschnitt 7.6.3 Korrektur und Klarstellung der Felder Timestamp und 10msIncrement in Abschnitt 7.4 Erläuterung der Null-Parameter-Struktur in Abschnitt 3.3 Klärung der Bedeutung der Werte des Felds NoFatChain in Abschnitt 6.3.4.2 Klärung der Bedeutung der Werte des DataLength-Felds in Abschnitt 6.2.3 Erläuterung des Felds VolumeDirty in Abschnitt 3.1.13.2 und empfohlene Schreibreihenfolge in Abschnitt 8.1 Erläuterung des Felds MediaFailure in Abschnitt 3.1.13.3 |
01-Okt-2008 | Dritte Version der Basic Specification, die die folgenden Änderungen enthält: Hinzufügen von SHALL, SHOULD und MAY zu Felderklärungen Hinzufügen der UTC-Definition in Tabelle 2 Abschnitt 1.3 Abschnitt 1.5 wurde geändert, um die Ausrichtung auf das TexFAT-Spezifikationsdokument sicherzustellen. Es wurde die Einschränkung klargestellt, dass nur Microsoft das Layout von Verzeichniseinträgen in Abschnitt 6.2 definieren darf. Klarstellung hinzugefügt, dass FirstCluster Field null sein soll, wenn dataLength 0 ist und NoFatChain auf Abschnitt 6.3.5 und Abschnitt 6.4.3 festgelegt ist Geklärte Anforderungen für gültige Dateiverzeichniseinträge in Abschnitt 7.4 Anforderung für eindeutige Datei- und Verzeichnisnamen zu Abschnitt 7.7 hinzugefügt Implementierungshinweis für ASCII am Ende von Abschnitt 7.7.3 hinzugefügt |
01-Jan-2009 | Vierte Version der Basic Specification, die die folgenden Änderungen enthält: Verweise auf Windows CE Access Control Einträge entfernt Erläuterungen zu Abschnitt 7.2.5.1 hinzugefügt, um explizit eine vollständige Up-Case-Tabelle zu erfordern |
02-Sep-2009 | Fünfte Version der Basic Specification, die die folgenden Änderungen enthält: Änderungen an der Dokumentformatierung, um eine bessere PDF-Konvertierung zu ermöglichen |
24.02.2010 | Sechste Version der Basic Specification, die die folgenden Änderungen enthält: Falsche Anweisung geändert: "FirstCluster Field is zero if the DataLength is zero and NoFatChain is set" in Section 6.3.5 and Section 6.4.3 to "If the NoFatChain bit is 1 then FirstCluster must point to a valid cluster in the cluster heap" to clarify that there must be valid allocation if the NoFatChain bit is set. "Wenn das NoFatChain-Bit 1 ist, darf DataLength nicht 0 sein. Wenn das FirstCluster-Feld 0 ist, muss DataLength auch 0" für Abschnitt 6.3.6 und Abschnitt 6.4.4 sein, um klarzustellen, dass eine gültige Zuordnung vorhanden sein muss, wenn das NoFatChain-Bit festgelegt ist. Urheberrechtshinweis auf 2010 aktualisiert |
26-Aug-2019 | Siebte Version der Basic Specification, die die folgenden Änderungen enthält: Aktualisierte rechtliche Bestimmungen in Bezug auf die Spezifikation, einschließlich: Entfernen der vertraulichen Microsoft-Benachrichtigung Entfernen des Abschnitts "Lizenzvertrag für technische Dokumentation" der Microsoft Corporation Urheberrechtshinweis auf 2019 aktualisiert |
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für