exFAT-Dateisystemspezifikation
1 Einführung
Das exFAT-Dateisystem ist der Nachfolger von FAT32 in der FAT-Familie von Dateisystemen. Diese Spezifikation beschreibt das exFAT-Dateisystem und stellt alle informationen bereit, die für die Implementierung des exFAT-Dateisystems erforderlich sind.
1.1 Designziele
Das exFAT-Dateisystem hat drei zentrale Designziele (siehe Liste unten).
Behalten Sie die Einfachheit von FAT-basierten Dateisystemen bei.
Zwei der Stärken der FAT-basierten Dateisysteme sind ihre relative Einfachheit und Einfache Implementierung. Im Geiste seiner Vorgänger sollte die Implementierung von exFAT relativ einfach und einfach zu implementieren sein.
Aktivieren Sie sehr große Dateien und Speichergeräte.
Das exFAT-Dateisystem verwendet 64 Bit, 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 so groß wie 32 MB, wodurch sehr große Speichergeräte effektiv aktiviert werden.
Integration der Erweiterbarkeit für zukünftige Innovationen.
Das exFAT-Dateisystem integriert die Erweiterbarkeit in das Design, sodass das Dateisystem mit Innovationen im Speicher und änderungen der Nutzung schritthalten kann.
1.2 Spezifische Terminologie
Im Rahmen dieser Spezifikation tragen bestimmte Begriffe (siehe Tabelle 1) spezifische Bedeutung für das Design und die Implementierung des exFAT-Dateisystems.
Tabelle 1 Definition von Begriffen, die sehr spezifische Bedeutung tragen
Begriff | Definition |
---|---|
Muss | Diese Spezifikation verwendet den Begriff "shall", um ein Verhalten zu beschreiben, das obligatorisch ist. |
Optional | Diese Spezifikation verwendet den Begriff "sollte", um ein Verhalten zu beschreiben, das es dringend empfiehlt, aber nicht obligatorisch. |
May | Diese Spezifikation verwendet den Begriff "may", um ein Verhalten zu beschreiben, das optional ist. |
Obligatorisch. | Dieser Begriff beschreibt ein Feld oder eine Struktur, das eine Implementierung ändert und wie diese Spezifikation beschreibt. |
Optional | Dieser Begriff beschreibt ein Feld oder eine Struktur, die eine Implementierung unterstützen kann oder nicht. Wenn eine Implementierung ein bestimmtes optionales Feld oder eine bestimmte Struktur unterstützt, ändert sie das Feld oder die Struktur, wie diese Spezifikation beschreibt. |
Nicht definiert | Dieser Begriff beschreibt Feld- oder Strukturinhalte, die eine Implementierung ggf. ändern kann (d. h. klar auf Null, wenn umgebende Felder oder Strukturen festgelegt werden) und darf nicht interpretiert werden, um eine bestimmte Bedeutung zu enthalten. |
Reserviert | Dieser Begriff beschreibt Feld- oder Strukturinhalte, die implementierungen:
|
1.3 Volltext allgemeiner Akronyme
Diese Spezifikation verwendet Akronymen in der allgemeinen Verwendung in der Personal Computerindustrie (siehe Tabelle 2).
Tabelle 2 Volltext allgemeiner Akronyme
Akronym | Volltext |
---|---|
ASCII | American Standard Code for Information Interchange |
BIOS | Grundlegendes Eingabeausgabesystem |
CPU | Zentrale Verarbeitungseinheit |
exFAT | Erweiterbare Dateizuordnungstabelle |
FAT | Dateizuordnungstabelle |
FAT12 | Dateizuordnungstabelle, 12-Bit-Clusterindizes |
FAT16 | Dateizuordnungstabelle, 16-Bit-Clusterindizes |
FAT32 | Dateizuordnungstabelle, 32-Bit-Clusterindizes |
GPT | GUID-Partitionstabelle |
GUID | Globally Unique Identifier (siehe Abschnitt 10.1) |
INT | Interrupt |
MBR | Master Boot Record |
texFAT | Transaktionssicher 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 Spezifikationsnotizen sind anders.
Nicht signiert
Verwenden Sie dezimale Notation, um Werte zu beschreiben, sofern nicht anders angegeben; Diese Spezifikation verwendet den Buchstaben "h" nach der Fixierung, um hexadezimale Zahlen zu kennzeichnen und GUIDs in geschweifte Geschweifte Klammern einzuschließen.
Sind im Klein-End-Format
Kein Null-Endzeichen für Zeichenfolgen erforderlich
1.5 Windows CE und TexFAT
TexFAT ist eine Erweiterung für exFAT, die transaktionssichere operative Semantik über dem Basisdateisystem hinzufügt. TexFAT wird von Windows CE verwendet. TexFAT erfordert die Verwendung der beiden FATs und Zuordnungs bitmaps für die Verwendung in Transaktionen. Außerdem werden mehrere zusätzliche Strukturen definiert, einschließlich Abstandsdeskriptoren und Sicherheitsdeskriptoren.
2 Volumenstruktur
Ein Volume ist der Satz aller Dateisystemstrukturen und Datenplätze, die zum Speichern und Abrufen von Benutzerdaten erforderlich sind. Alle exFAT-Volumes enthalten vier Regionen (siehe Tabelle 3).
Tabelle 3 Volumenstruktur
Unterbereichsname | Offset (Sektor) |
Größe (Sektoren) |
Kommentare |
---|---|---|---|
Hauptstartbereich | |||
Hauptstartsektor | 0 | 1 | Dieser Unterbereich ist obligatorisch und Abschnitt 3.1 definiert seinen Inhalt. |
Hauptbereich erweiterter Start | 1 | 8 | Dieser Teilbereich ist obligatorisch und Abschnitt 3.2) definiert seinen Inhalt. |
Haupt-OEM-Parameter | 9 | 1 | Dieser Teilbereich ist obligatorisch und Abschnitt 3.3 definiert seinen Inhalt. |
Haupt reserviert | 10 | 1 | Diese Unterregion ist obligatorisch und ihre Inhalte sind reserviert. |
Hauptstartcheckum | 11 | 1 | Dieser Teilbereich ist obligatorisch und Abschnitt 3.4 definiert seinen Inhalt. |
Sicherungsstartbereich | |||
Sicherungsstartsektor | 12 | 1 | Dieser Teilbereich ist obligatorisch und Abschnitt 3.1 definiert seinen Inhalt. |
Sichern erweiterter Startsektoren | 13 | 8 | Dieser Teilbereich ist obligatorisch und Abschnitt 3.2 definiert seinen Inhalt. |
Sicherungs-OEM-Parameter | 21 | 1 | Dieser Teilbereich ist obligatorisch und Abschnitt 3.3 definiert seinen Inhalt. |
Sicherung reserviert | 22 | 1 | Diese Unterregion ist obligatorisch und ihre Inhalte sind reserviert. |
Sicherungsstartcheckum | 23 | 1 | Dieser Teilbereich ist obligatorisch und Abschnitt 3.4 definiert seinen Inhalt. |
FAT-Region | |||
FAT-Ausrichtung | 24 | FatOffset – 24 | Diese Unterregion ist obligatorisch und ihre Inhalte, falls vorhanden, nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das FatOffset-Feld. |
Erstes FETT | FatOffset | FatLength | Dieser Teilbereich ist obligatorisch und Abschnitt 4.1 definiert seinen Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten sowohl die Felder FatOffset als auch FatLength. |
Zweite FETT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | Dieser Teilbereich ist obligatorisch und Abschnitt 4.1 definiert seinen Inhalt, falls vorhanden. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten sowohl die Felder FatOffset, FatLength und NumberOfFats. Das Feld "NumberOfFats" kann nur Werte 1 und 2 enthalten. |
Datenbereich | |||
Cluster-Heap-Ausrichtung | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | Diese Unterregion ist obligatorisch und ihre Inhalte, falls vorhanden, nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder FatOffset, FatLength, NumberOfFats und ClusterHeapOffset. Die gültigen Werte des Felds NumberOfFats sind 1 und 2. |
Cluster-Heap | ClusterHeapOffset | ClusterCount * 2SectorsPerClusterShift | Dieser Teilbereich ist obligatorisch und Abschnitt 5.1 definiert seinen Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder "ClusterHeapOffset", "ClusterCount" und "SectorsPerClusterShift". |
Übermäßiger Speicherplatz | ClusterHeapOffset +ClusterCount * 2 SectorsPerClusterShift | VolumeLength – (ClusterHeapOffset +ClusterCount * 2 SectorsPerClusterShift) | Diese Unterregion ist obligatorisch und ihre Inhalte, falls vorhanden, nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder "ClusterHeapOffset", "ClusterCount", "SectorsPerClusterShift" und "VolumeLength". |
3 Haupt- und Sicherungsstartbereiche
Der Hauptstartbereich bietet alle erforderlichen Startbandanweisungen, Identifizierung von Informationen und Dateisystemparametern, um eine Implementierung zu ermöglichen, folgendes auszuführen:
Startband ein Computersystem aus einem ExFAT-Volume.
Identifizieren Sie das Dateisystem auf dem Volume als exFAT.
Entdecken Sie den Speicherort der exFAT-Dateisystemstrukturen.
Der Sicherungsstartbereich ist eine Sicherung des Hauptstartbereichs. Es unterstützt die Wiederherstellung des exFAT-Volumes im Fall des Hauptstartbereichs in einem inkonsistenten Zustand. Außer unter seltenen Umständen, z. B. das Aktualisieren von Startbandanweisungen, sollten Implementierungen den Inhalt des Sicherungsstartbereichs nicht ändern.
3.1 Haupt- und Sicherungsstartsektor-Unterbereiche
Der Hauptstartsektor enthält Code für das Startband von einem ExFAT-Volume und grundlegenden ExFAT-Parametern, die die Volumenstruktur beschreiben (siehe Tabelle 4). BIOS, MBR oder andere Boot-Strapping-Agents können diesen Sektor überprüfen und alle darin enthaltenen Boot-Strapping-Anweisungen laden und ausführen.
Der Sicherungsstartsektor ist eine Sicherung des Hauptstartsektors und verfügt über dieselbe Struktur (siehe Tabelle 4). Der Sicherungsstartsektor kann die Wiederherstellungsvorgänge unterstützen; Die Implementierungen behandeln jedoch den Inhalt der Felder VolumeFlags und PercentInUse als veraltet.
Vor der Verwendung des Inhalts des Haupt- oder Sicherungsstartsektors überprüfen Implementierungen ihre Inhalte, indem sie ihre jeweilige Startchecksumme überprüfen und sicherstellen, dass alle Felder innerhalb des gültigen Wertbereichs liegen.
Während der anfängliche Formatvorgang den Inhalt sowohl der Haupt- als auch der Sicherungsstartsektor initialisiert, können Implementierungen diese Sektoren aktualisieren (und ihre jeweilige Startchecksumme auch bei Bedarf aktualisieren). Implementierungen können jedoch entweder die Felder VolumeFlags oder PercentInUse aktualisieren, ohne ihre jeweilige Startchecksumme zu aktualisieren (die Prüfsumme schließt diese beiden Felder speziell aus).
Tabelle 4 Haupt- und Sicherungsstartsektorstruktur
Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
---|---|---|---|
JumpBoot | 0 | 3 | Dieses Feld ist obligatorisch und Abschnitt 3.1.1 definiert seinen Inhalt. |
FileSystemName | 3 | 8 | Dieses Feld ist obligatorisch und Abschnitt 3.1.2 definiert seinen Inhalt. |
MustBeZero | 11 | 53 | Dieses Feld ist obligatorisch und Abschnitt 3.1.3 definiert seinen Inhalt. |
PartitionOffset | 64 | 8 | Dieses Feld ist obligatorisch und Abschnitt 3.1.4 definiert seinen Inhalt. |
VolumeLength | 72 | 8 | Dieses Feld ist obligatorisch und Abschnitt 3.1.5 definiert seinen Inhalt. |
FatOffset | 80 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.1.6 definiert seinen Inhalt. |
FatLength | 84 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.1.7 definiert seinen Inhalt. |
ClusterHeapOffset | 88 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.1.8 definiert seinen Inhalt. |
ClusterCount | 92 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.1.9 definiert seinen Inhalt. |
FirstClusterOfRootDirectory | 96 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.1.10 definiert seinen Inhalt. |
VolumeSerialNumber | 100 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.1.11 definiert seinen Inhalt. |
FileSystemRevision | 104 | 2 | Dieses Feld ist obligatorisch und Abschnitt 3.1.12 definiert seinen Inhalt. |
VolumeFlags | 106 | 2 | Dieses Feld ist obligatorisch und Abschnitt 3.1.13 definiert seinen Inhalt. |
BytesPerSectorShift | 108 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.14 definiert seinen Inhalt. |
SektorenPerClusterShift | 109 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.15 definiert seinen Inhalt. |
NumberOfFats | 110 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.16 definiert seinen Inhalt. |
DriveSelect | 111 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.17 definiert seinen Inhalt. |
PercentInUse | 112 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.18 definiert seinen Inhalt. |
Reserviert | 113 | 7 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
BootCode | 120 | 390 | Dieses Feld ist obligatorisch und Abschnitt 3.1.19 definiert seinen Inhalt. |
BootSignature | 510 | 2 | Dieses Feld ist obligatorisch und Abschnitt 3.1.20 definiert seinen Inhalt. |
Exzessspace | 512 | 2BytesPerSectorShift – 512 | Dieses Feld ist obligatorisch und sein Inhalt, falls vorhanden, sind nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das BytesPerSectorShift-Feld. |
3.1.1 JumpBoot Field
Das JumpBoot-Feld enthält die Sprunganweisung für CPUs, die bei ausführung "Springen" die CPU zum Ausführen der Startbandanweisungen im BootCode-Feld verwendet.
Der gültige Wert für dieses Feld ist (in Reihenfolge des Byte mit niedriger Reihenfolge auf Hochreihenfolge) EBh 76h 90h.
3.1.2 FileSystemName Field
Das Feld "FileSystemName" enthält den Namen des Dateisystems auf dem Volume.
Der gültige Wert für dieses Feld ist in ASCII-Zeichen "EXFAT", das drei nachgestellte Leerzeichen enthält.
3.1.3 MustBeZero Field
Das Feld "MustBeZero" entspricht direkt dem Bereich von Bytes, die der verpackte BIOS-Parameterblock verwendet, für FAT12/16/32-Volumes.
Der gültige Wert für dieses Feld ist 0, was dazu beiträgt, FAT12/16/32-Implementierungen versehentlich ein exFAT-Volume zu installieren.
3.1.4 PartitionOffset Field
Das Feld "PartitionOffset" beschreibt den medienrelativen Sektorversatz der Partition, die das angegebene exFAT-Volume hostt. Dieses Feld unterstützt das Startband aus dem Volume mithilfe erweiterter INT 13h auf persönlichen Computern.
Alle möglichen Werte für dieses Feld sind gültig; Der Wert 0 gibt jedoch an, dass Implementierungen dieses Felds ignoriert werden.
3.1.5 VolumeLength Field
Das Feld "VolumeLength" beschreibt die Größe des angegebenen ExFAT-Volumens in Sektoren.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens2 20/2BytesPerSectorShift, wodurch sichergestellt wird, dass das kleinste Volumen nicht kleiner als 1 MB ist.
Am meisten 264- 1 kann der größte Wert dieses Felds beschreiben.
Wenn die Größe des Teilbereichs "Überraum" jedoch 0 ist, ist der größte Wert dieses Felds ClusterHeapOffset + (232-11) * 2SectorsPerClusterShift.
3.1.6 FatOffset Field
Das FatOffset-Feld beschreibt den Volumen-relativen Sektorversatz des ersten FAT. In diesem Feld können Implementierungen das erste FAT auf die Merkmale des zugrunde liegenden Speichermediums ausrichten.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens 24, die für die Bereiche Hauptstart und Sicherungsstartbereiche verwendet werden
Am meisten ClusterHeapOffset - (FatLength * NumberOfFats), das die Cluster-Heap verwendet.
3.1.7 FatLength Field
Das Feld FatLength beschreibt die Länge in Sektoren jeder FAT-Tabelle (das Volumen kann bis zu zwei FATs enthalten).
Der gültige Wertebereich für dieses Feld lautet:
Mindestens (ClusterCount + 2) *2 2/ 2BytesPerSectorShiftauf die nächste ganze Zahl gerundet, wodurch sichergestellt wird, dass jede FAT ausreichend Speicherplatz für die Beschreibung aller Cluster im Cluster-Heap hat
Am meisten (ClusterHeapOffset - FatOffset) / NumberOfFats wird auf die nächste ganze Zahl abgerundet, wodurch sichergestellt wird, dass die FATs vor dem Cluster-Heap vorhanden sind.
Dieses Feld kann einen Wert enthalten, der über seine untere Grenze (wie oben beschrieben) verfügt, um das zweite FAT, sofern vorhanden, auch an die Merkmale des zugrunde liegenden Speichermediums auszurichten. Der Inhalt des Leerraums, der überschreitet, was das FAT selbst erfordert, falls vorhanden, nicht definiert sind.
3.1.8 ClusterHeapOffset Field
Das Feld "ClusterHeapOffset" beschreibt den Volumen-relativen Sektorversatz des Cluster-Heaps. In diesem Feld können Implementierungen den Cluster-Heap an die Merkmale des zugrunde liegenden Speichermediums ausrichten.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens FatOffset + FatLength * NumberOfFats, um die Sektoren aller vorhergehenden Regionen zu berücksichtigen
Am meisten 232-1 oder VolumeLength - (ClusterCount * 2SectorsPerClusterShift), je nachdem, welche Berechnung kleiner ist
3.1.9 ClusterCount Field
Das ClusterCount-Feld beschreibt die Anzahl von Clustern, die der Cluster-Heap enthält.
Der gültige Wert für dieses Feld ist der kleinere der folgenden:
(VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShiftwird auf die nächste ganze Zahl abgerundet, was genau die Anzahl der Cluster ist, die zwischen dem Anfang des Cluster-Heaps und dem Ende des Volumens passen können.
232- 11, was die maximale Anzahl von Clustern ist, die ein FAT beschreiben kann
Der Wert des ClusterCount-Felds bestimmt die Mindestgröße eines FAT. Um extrem große FATs zu vermeiden, können Implementierungen die Anzahl von Clustern im Cluster-Heap steuern, indem sie die Clustergröße erhöhen (über das Feld "SectorsPerClusterShift"). Diese Spezifikation empfiehlt nicht mehr als2 24-2 Cluster im Cluster-Heap. Implementierungen müssen jedoch bis zu 232-11 Cluster im Cluster-Heap verarbeiten können.
3.1.10 FirstClusterOfRootDirectory Field
Das Feld "FirstClusterOfRootDirectory" enthält den Clusterindex des ersten Clusters des Stammverzeichnisses. Implementierungen sollten alle Anstrengungen unternehmen, um den ersten Cluster des Stammverzeichnisses im ersten nicht schlechten Cluster zu platzieren, nachdem die Cluster die Zuordnungs-Bitmap und die Up-Case-Tabelle verwendet haben.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens 2, der Index des ersten Clusters im Cluster-Heap
Am meisten ClusterCount + 1 ist der Index des letzten Clusters im Cluster-Heap
3.1.11 VolumeSerialNumber Field
Das Feld "VolumeSerialNumber" enthält eine eindeutige Seriennummer. Dadurch werden Implementierungen unterstützt, um zwischen verschiedenen exFAT-Volumes zu unterscheiden. 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, um eine Seriennummer zu bilden, ist implementierungsspezifisch.
Alle möglichen Werte für dieses Feld sind gültig.
3.1.12 FileSystemRevision Field
Das Feld "FileSystemRevision" beschreibt die Haupt- und Nebenrevisionszahlen der exFAT-Strukturen auf dem angegebenen Volumen.
Das Byte mit hoher Reihenfolge ist die Hauptversionsnummer und das Byte mit niedriger Reihenfolge ist die Nebenversionsnummer. Wenn beispielsweise das Byte mit hoher Reihenfolge den Wert 01h enthält und das Byte mit niedriger Reihenfolge den Wert 05h enthält, beschreibt das FileSystemRevision-Feld die Überarbeitungsnummer 1.05. Ebenso enthält das Hochreihenfolgen-Byte den Wert 0Ah und wenn das Byte mit niedriger Reihenfolge den Wert 0Fh enthält, beschreibt das FileSystemRevision-Feld die Revisionsnummer 10.15.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens 0 für das Byte mit niedriger Reihenfolge und 1 für das Hochreihenfolgen-Byte
Am meisten 99 für das Byte mit niedriger Reihenfolge und 99 für das Hochreihenfolgen-Byte
Die Überarbeitungsnummer von exFAT, die diese Spezifikation beschreibt, ist 1.00. Implementierungen dieser Spezifikation sollten ein exFAT-Volume mit der Hauptversionsnummer 1 bereitstellen und keine exFAT-Volumen mit einer anderen großen Überarbeitungsnummer bereitstellen. Die Implementierungen werden die nebenrevisionsnummer berücksichtigen und keine Vorgänge ausführen oder Dateisystemstrukturen erstellen, die nicht in der entsprechenden Spezifikation der angegebenen Nebenversionsnummer beschrieben sind.
3.1.13 VolumeFlags Field
Das Feld "VolumeFlags" enthält Kennzeichen, die den Status verschiedener Dateisystemstrukturen auf dem ExFAT-Volume angeben (siehe Tabelle 5).
Implementierungen umfassen dieses Feld nicht, wenn sie ihr jeweiliges Hauptstart- oder Sicherungsstartbereichscheckum berechnen. Bei Bezug auf den Sicherungsstartsektor werden Implementierungen dieses Felds als veraltet behandelt.
Tabelle 5 VolumeFlags-Feldstruktur
Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
ActiveFat | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.13.1 definiert seinen Inhalt. |
VolumeDirty | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.13.2 definiert seinen Inhalt. |
MediaFailure | 2 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.13.3 definiert seinen Inhalt. |
ClearToZero | 3 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.13.4 definiert seinen Inhalt. |
Reserviert | 4 | 12 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
3.1.13.1 ActiveFat Field
Das ActiveFat-Feld beschreibt, welche FAT- und Zuordnungs-Bitmap aktiv sind (und Implementierungen verwendet werden), wie folgt:
0, was bedeutet, dass die Erste FAT- und First Allocation Bitmap aktiv sind
1, was bedeutet, dass die Zweite FAT- und zweite Zuordnungs-Bitmap aktiv sind und nur dann möglich sind, wenn das Feld "NumberOfFats" den Wert 2 enthält.
Implementierungen sollten die inaktive FAT- und Zuordnungs-Bitmap als veraltet betrachten. Nur texFAT-bewusste Implementierungen müssen die aktiven FAT- und Zuordnungs-Bitmaps (siehe Abschnitt 7.1) wechseln.
3.1.13.2 VolumeDirty Field
Das Feld "VolumeDirty" beschreibt, ob die Lautstärke schmutzig ist oder nicht, wie folgt:
0, was bedeutet, dass sich das Volumen wahrscheinlich in einem konsistenten Zustand befindet
1, was bedeutet, dass sich das Volumen wahrscheinlich in einem inkonsistenten Zustand befindet.
Implementierungen sollten den Wert dieses Felds auf 1 festlegen, wenn dateisystemmetadaten inkonsistent werden, die sie nicht auflösen. Wenn beim Anbringen eines Volumes der Wert dieses Felds 1 ist, können nur Implementierungen, die Dateisystemmetadaten auflösen, den Wert dieses Felds auf 0 löschen. Diese Implementierungen müssen nur den Wert dieses Felds auf 0 löschen, nachdem sichergestellt wurde, dass das Dateisystem in einem konsistenten Zustand ist.
Wenn bei der Installation eines Volumes der Wert dieses Felds 0 ist, sollten Implementierungen dieses Felds auf 1 festlegen, bevor Sie Dateisystemmetadaten aktualisieren und danach auf 0 löschen, ähnlich wie die empfohlene Schreibfolge in Abschnitt 8.1 beschrieben.
3.1.13.3 MediaFailure Field
Das Feld "MediaFailure" beschreibt, ob eine Implementierung Medienfehler festgestellt hat oder nicht, wie folgt:
0, was bedeutet, dass die Hostingmedien keine Fehler gemeldet haben oder bekannte Fehler bereits im FAT als "schlechte" Cluster aufgezeichnet werden
1, was bedeutet, dass die Hostingmedien Fehler gemeldet haben (d. h. fehler beim Lesen oder Schreiben von Vorgängen)
Eine Implementierung sollte dieses Feld auf 1 festlegen, wenn:
Der Hostmedien hat keinen Zugriff auf alle Regionen im Volume
Die Implementierung verfügt über erschöpfte Zugriffsüberprüfungsalgorithmen, falls vorhanden
Wenn beim Anbringen eines Volumes der Wert dieses Felds 1 ist, können Implementierungen, die das gesamte Volume für Medienfehler scannen und alle Fehler als "schlechte" Cluster im FAT (oder andernfalls auflösen) den Wert dieses Felds auf 0 löschen.
3.1.13.4 ClearToZero Field
Das ClearToZero-Feld hat in dieser Spezifikation keine erhebliche Bedeutung.
Die gültigen Werte für dieses Feld sind:
0, das keine besondere Bedeutung hat
1, was bedeutet, dass Implementierungen dieses Felds vor dem Ändern von Dateisystemstrukturen, Verzeichnissen oder Dateien auf 0 löschen.
3.1.14 BytesPerSectorShift Field
Das Feld BytesPerSectorShift beschreibt die Bytes pro Sektor, die als Protokoll2(N) ausgedrückt werden, wobei N die Anzahl von Bytes pro Sektor ist. Für 512 Bytes pro Sektor ist beispielsweise der Wert dieses Felds 9.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens 9 (Sektorgröße von 512 Bytes), die für ein exFAT-Volumen am kleinsten möglich ist
Am meisten 12 (Sektorgröße von 4096 Bytes), die die Speicherseitengröße von CPUs ist, die in persönlichen Computern üblich sind
3.1.15 SektorenPerClusterShift Field
Das Feld "SectorsPerClusterShift" beschreibt die Sektoren pro Cluster, die als Protokoll2(N) ausgedrückt werden, wobei N die Anzahl der Sektoren pro Cluster ist. Beispielsweise ist der Wert dieses Felds für 8 Sektoren pro Cluster 3.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens 0 (1 Sektor pro Cluster), der kleinste Cluster ist.
Am meisten 25 - BytesPerSectorShift, das auf eine Clustergröße von 32 MB ausgewertet wird
3.1.16 NumberOfFats Field
Das Feld "NumberOfFats" beschreibt die Anzahl der FATs und Allocation Bitmaps, die das Volume enthält.
Der gültige Wertebereich für dieses Feld lautet:
1, das angibt, dass das Volume nur die Bitmap "First FAT" und "First Allocation Bitmap" enthält
2, das angibt, dass das Volumen das Erste FAT, second FAT, First Allocation Bitmap und Second Allocation Bitmap enthält; dieser Wert ist nur für TexFAT-Volumes gültig.
3.1.17 DriveSelect Field
Das Feld "DriveSelect" enthält die erweiterte INT 13h-Laufwerknummer, die das Startband von diesem Volume mithilfe erweiterter INT 13h auf persönlichen Computern unterstützt.
Alle möglichen Werte für dieses Feld sind gültig. Ähnliche Felder in früheren FAT-basierten Dateisystemen enthalten häufig den Wert 80h.
3.1.18 PercentInUse Field
Das Feld "PercentInUse" beschreibt den Prozentsatz von Clustern im Cluster-Heap, der zugewiesen wird.
Der gültige Wertebereich für dieses Feld lautet:
Zwischen 0 und 100 inklusive, was der Prozentsatz der zugewiesenen Cluster im Cluster-Heap ist, wird auf die nächste ganze Ganze gerundet.
Genau FFh, der den Prozentsatz der zugewiesenen Cluster im Cluster-Heap angibt, ist nicht verfügbar.
Implementierungen ändern den Wert dieses Felds, um Änderungen der Zuordnung von Clustern im Cluster-Heap zu berücksichtigen oder sie in FFh zu ändern.
Implementierungen umfassen dieses Feld nicht, wenn sie ihr jeweiliges Hauptstart- oder Sicherungsstartbereichscheckum berechnen. Bei Bezug auf den Sicherungsstartsektor werden Implementierungen dieses Felds als veraltet behandelt.
3.1.19 BootCode Field
Das Feld "BootCode" enthält Startbereifungsanweisungen. Implementierungen können dieses Feld mit den CPU-Anweisungen füllen, die für das Starten eines Computersystems erforderlich sind. Implementierungen, die keine Startbereifungsanweisungen bereitstellen, müssen jedes Byte in diesem Feld auf F4h initialisieren (die Stopp-Anweisung für CPUs, die in persönlichen Computern üblich sind) als Teil ihres Formatvorgangs.
3.1.20 BootSignature Field
Das Feld "BootSignature" beschreibt, ob es sich bei der Absicht eines bestimmten Sektors um einen Startsektor handelt oder nicht.
Der gültige Wert für dieses Feld ist AA55h. Jeder andere Wert in diesem Feld ungültig macht seinen jeweiligen Startsektor. Implementierungen sollten den Inhalt dieses Felds vor jedem anderen Feld in seinem jeweiligen Startsektor überprüfen.
3.2 Haupt- und Sicherung erweiterter Startsektoren
Jeder Sektor der Haupt-Erweiterten Startsektoren weist dieselbe Struktur auf; Jeder Sektor kann jedoch unterschiedliche Startbereifungsanweisungen enthalten (siehe Tabelle 6). Boot-Strapping-Agents, wie z. B. die Startbereifungsanweisungen im Hauptstartsektor, alternative BIOS-Implementierungen oder die Firmware eines eingebetteten Systems, können diese Sektoren laden und die anweisungen ausführen, die sie enthalten.
Die Sicherung erweiterter Startsektoren ist eine Sicherung der Haupt-Erweiterten Startsektoren und verfügt über die gleiche Struktur (siehe Tabelle 6).
Bevor Sie die Anweisungen des Haupt- oder Sicherungsbereichs für erweiterte Startsektoren ausführen, sollten Implementierungen ihren Inhalt überprüfen, indem sichergestellt wird, dass jedes Feld "ExtendedBootSignature" seinen vorgeschriebenen Wert enthält.
Während der anfängliche Formatvorgang den Inhalt sowohl der Haupt- als auch der Sicherungs-Erweiterten Startsektoren initialisiert, können Implementierungen diese Sektoren aktualisieren (und ihre jeweilige Startüberprüfungsum auch bei Bedarf aktualisieren).
Tabelle 6 Erweiterte Startsektorstruktur
Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | Dieses Feld ist obligatorisch und Abschnitt 3.2.1 definiert seinen Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das BytesPerSectorShift-Feld. |
ExtendedBootSignature | 2BytesPerSectorShift – 4 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.2.2 definiert seinen Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das BytesPerSectorShift-Feld. |
3.2.1 ExtendedBootCode Field
Das Feld "ExtendedBootCode" enthält Startbereifungsanweisungen. Implementierungen können dieses Feld mit den CPU-Anweisungen füllen, die für das Starten eines Computersystems erforderlich sind. Implementierungen, die keine Startbereifungsanweisungen bereitstellen, müssen jedes Byte in diesem Feld als Teil des Formatvorgangs auf 00h initialisieren.
3.2.2 ExtendedBootSignature Field
Das Feld "ExtendedBootSignature" beschreibt, ob es sich um einen erweiterten Startsektor handelt oder nicht.
Der gültige Wert für dieses Feld ist AA550000h. Jeder andere Wert in diesem Feld ungültigt seinen jeweiligen Haupt- oder Sicherungs-Erweiterten Startsektor. Implementierungen sollten den Inhalt dieses Felds vor jedem anderen Feld in seinem jeweiligen erweiterten Startsektor überprüfen.
3.3 Haupt- und Sicherungs-OEM-Parameter Unterbereiche
Die Unterregion "Haupt-OEM-Parameter" enthält zehn Parameterstrukturen, die herstellerspezifische Informationen enthalten können (siehe Tabelle 7). Jede der zehn Parameterstrukturen wird aus der Vorlage "Generische Parameter" abgeleitet (siehe Abschnitt 3.3.2). Hersteller können ihre eigenen benutzerdefinierten Parameterstrukturen aus der Vorlage "Generische Parameter" abgeleitet haben. Diese Spezifikation definiert selbst zwei Parameterstrukturen: Nullparameter (siehe Abschnitt 3.3.3) und Flashparameter (siehe Abschnitt 3.3.4).
Die Sicherungs-OEM-Parameter sind eine Sicherung der Haupt-OEM-Parameter und verfügt über die gleiche Struktur (siehe Tabelle 7).
Bevor Sie den Inhalt der Haupt- oder Sicherungs-OEM-Parameter verwenden, überprüfen Implementierungen ihre Inhalte, indem sie ihre jeweilige Startchecksumme überprüfen.
Hersteller sollten die Haupt- und Sicherungs-OEM-Parameter mit ihren eigenen benutzerdefinierten Parameterstrukturen auffüllen, falls vorhanden und andere Parameterstrukturen. Nachfolgende Formatvorgänge erhalten den Inhalt der Haupt- und Sicherungs-OEM-Parameter.
Implementierungen können die Haupt- und Sicherungs-OEM-Parameter nach Bedarf aktualisieren (und muss auch ihre jeweilige Startchecksumme aktualisieren).
Tabelle 7 OEM-Parameterstruktur
Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
---|---|---|---|
Parameter[0] | 0 | 48 | Dieses Feld ist obligatorisch und Abschnitt 3.3.1 definiert seinen Inhalt. |
. . . |
. . . |
. . . |
. . . |
Parameter[9] | 432 | 48 | Dieses Feld ist obligatorisch und Abschnitt 3.3.1 definiert seinen Inhalt. |
Reserviert | 480 | 2BytesPerSectorShift – 480 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das BytesPerSectorShift-Feld. |
3.3.1 Parameter[0] ... Parameter[9]
Jedes Parameterfeld in diesem Array enthält eine Parameterstruktur, die aus der Vorlage "Generische Parameter" abgeleitet wird (siehe Abschnitt 3.3.2). Jedes nicht verwendete Parameterfeld wird als Eine Nullparameterstruktur beschrieben (siehe Abschnitt 3.3.3).
Vorlage für generische Parameter 3.3.2
Die Vorlage "Generische Parameter" stellt die Basisdefinition einer Parameterstruktur bereit (siehe Tabelle 8). Alle Parameterstrukturen werden von dieser Vorlage abgeleitet. Die Unterstützung für diese Vorlage für generische Parameter ist obligatorisch.
Tabelle 8 Generische Parametervorlage
Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
---|---|---|---|
ParametersGuid | 0 | 16 | Dieses Feld ist obligatorisch und Abschnitt 3.3.2.1 definiert seinen Inhalt. |
CustomDefined | 16 | 32 | Dieses Feld ist obligatorisch und die Strukturen, die von dieser Vorlage abgeleitet werden, definieren ihren Inhalt. |
3.3.2.1 ParametersGuid Field
Das Feld ParametersGuid beschreibt eine GUID, 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 verwenden, z. B. GuidGen.exe, um eine GUID auszuwählen, wenn benutzerdefinierte Parameterstrukturen aus dieser Vorlage abgeleitet werden.
3.3.3 Nullparameter
Die Struktur "Null-Parameter" abgeleitet aus der Vorlage "Generische Parameter" (siehe Abschnitt 3.3.2) und beschreibt ein nicht verwendetes Parameterfeld (siehe Tabelle 9). Wenn Sie die OEM-Parameterstruktur erstellen oder aktualisieren, füllen Implementierungen nicht verwendete Parameterfelder mit der Struktur "Nullparameter" auf. Außerdem sollten Implementierungen beim Erstellen oder Aktualisieren der OEM-Parameterstruktur Nullparameterstrukturen am Ende des Arrays konsolidieren, wodurch alle anderen Parameterstrukturen am Anfang der OEM-Parameterstruktur verlassen werden.
Die Unterstützung für die Struktur "Null-Parameter" ist obligatorisch.
Tabelle 9 Nullparameterstruktur
Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
---|---|---|---|
ParametersGuid | 0 | 16 | Dieses Feld ist obligatorisch und Abschnitt 3.3.3.1 definiert seinen Inhalt. |
Reserviert | 16 | 32 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
3.3.3.1 ParametersGuid Field
Das Feld ParametersGuid entspricht der Definition der Vorlage "Generische Parameter" (siehe Abschnitt 3.3.2.1).
Der gültige Wert für dieses Feld, in GUID-Notation, ist {00000000-0000-0000-0000-000000000000}.
3.3.4 Blitzparameter
Die Flashparameterstruktur abgeleitet aus der Vorlage "Generische Parameter" (siehe Abschnitt 3.3.2) und enthält Parameter für Flashmedien (siehe Tabelle 10). Hersteller von flashbasierten Speichergeräten können ein Parameterfeld (vorzugsweise das Parameterfeld[0] mit dieser Parameterstruktur auffüllen. Implementierungen können die Informationen in der FlashParameter-Struktur verwenden, um Zugriffsvorgänge während lese-/schreibvorgänge zu optimieren und die Ausrichtung von Dateisystemstrukturen zu ermöglichen, die Formatierung der Medien zu verringern.
Die Unterstützung für die Struktur der Flashparameter ist optional.
Tabelle 10 Blitzparameterstruktur
Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
---|---|---|---|
ParametersGuid | 0 | 16 | Dieses Feld ist obligatorisch und Abschnitt 3.3.4.1 definiert seinen Inhalt. |
EraseBlockSize | 16 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.3.4.2 definiert seinen Inhalt. |
PageSize | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.3.4.3 definiert seinen Inhalt. |
SpareSectors | 24 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.3.4.4 definiert seinen Inhalt. |
RandomAccessTime | 28 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.3.4.5 definiert seinen Inhalt. |
ProgrammingTime | 32 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.3.4.6 definiert seinen Inhalt. |
ReadCycle | 36 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.3.4.7 definiert seinen Inhalt. |
WriteCycle | 40 | 4 | Dieses Feld ist obligatorisch und Abschnitt 3.3.4.8 definiert seinen Inhalt. |
Reserviert | 44 | 4 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
Alle möglichen Werte für alle Blitzparameterfelder, außer für das ParameterGuid-Feld, sind gültig. Der Wert 0 gibt jedoch an, dass das Feld tatsächlich bedeutungslos ist (Implementierungen werden das angegebene Feld ignorieren).
3.3.4.1 ParametersGuid Field
Das Feld ParametersGuid entspricht der Definition in der Vorlage "Generische Parameter" (siehe Abschnitt 3.3.2.1).
Der gültige Wert für dieses Feld in GUID-Notation lautet {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.
3.3.4.2 EraseBlockSize Field
Das Feld "EraseBlockSize" beschreibt die Größe in Bytes des Löschblocks des Blitzmediens.
3.3.4.3 PageSize Field
Das Feld "PageSize" beschreibt die Größe in Bytes der Seite des Flashmediens.
3.3.4.4 SpareSectors Field
Das Feld "SpareSectors" beschreibt die Anzahl der Sektoren, die die Flashmedien für ihre internen Sparvorgänge zur Verfügung stehen.
3.3.4.5 RandomAccessTime Field
Das Feld "RandomAccessTime" beschreibt die durchschnittliche zufällige Zugriffszeit des Blitzmediens in Nanosekunden.
3.3.4.6 ProgrammingTime Field
Das Feld "ProgrammingTime" beschreibt die durchschnittliche Programmierzeit der Flashmedien in Nanosekunden.
3.3.4.7 ReadCycle Field
Das Feld "ReadCycle" beschreibt die durchschnittliche Lesezykluszeit der Blitzmedien in Nanosekunden.
3.3.4.8 WriteCycle Field
Das Feld "WriteCycle" beschreibt die durchschnittliche Schreibzykluszeit in Nanosekunden.
3.4 Haupt- und Sicherungsstartüberprüfungen Unterbereiche
Die Haupt- und Sicherungsstartüberprüfungen enthalten jeweils ein wiederholtes Muster der vier byte-Prüfsumme der Inhalte aller anderen Unterbereiche in ihren jeweiligen Startbereichen. Die Prüfsummenberechnung enthält nicht die Felder VolumeFlags und PercentInUse in ihrem jeweiligen Startsektor (siehe Abbildung 1). Das wiederholte Muster der Vier-Byte-Prüfsumme füllt den jeweiligen Startcheckum-Teilbereich vom Anfang bis zum Ende des Teilbereichs aus.
Vor der Verwendung des Inhalts einer der anderen Unterbereiche in den Haupt- oder Sicherungsstartbereichen müssen Implementierungen ihren Inhalt überprüfen, indem sie ihre jeweilige Startprüfungssumme überprüfen.
Während der anfängliche Formatvorgang sowohl die Haupt- als auch die Sicherungsstartchecksummen mit dem wiederholten Prüfumenmuster auffüllt, werden diese Bereiche aktualisiert, da sich die Inhalte der anderen Sektoren in ihren jeweiligen Startbereichen ändern.
Abbildung 1 Startchecksummenberechnung
UInt32 BootChecksum
(
UCHAR * Sectors, // points to an in-memory copy of the 11 sectors
USHORT BytesPerSector
)
{
UInt32 NumberOfBytes = (UInt32)BytesPerSector * 11;
UInt32 Checksum = 0;
UInt32 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 106) || (Index == 107) || (Index == 112))
{
continue;
}
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Sectors[Index];
}
return Checksum;
}
4 Dateizuordnungstabellenbereich
Der Bereich "Dateizuordnungstabelle" (FAT) kann bis zu zwei FATs enthalten, eine in der Ersten FAT-Teilregion und eine andere in der Zweiten FAT-Teilregion. Das Feld "NumberOfFats" beschreibt, wie viele FATs diese Region enthält. Die gültigen Werte für das Feld "NumberOfFats" sind 1 und 2. Daher enthält der Teilbereich "First FAT" immer ein FAT. Wenn das Feld "NumberOfFats" zwei ist, enthält der Zweite FAT-Teilbereich auch ein FAT.
Das ActiveFat-Feld des VolumeFlags-Felds beschreibt, welche FAT aktiv ist. Nur das Feld "VolumeFlags" im Hauptstartsektor ist aktuell. Die Umsetzungen behandeln die FAT, die nicht als veraltet aktiv ist. Die Verwendung der inaktiven FAT und das Wechseln zwischen FATs ist speziell.
4.1 Erste und zweite FAT-Teilbereiche
Eine FAT beschreibt Clusterketten im Cluster-Heap (siehe Tabelle 11). Eine Clusterkette ist eine Reihe von Clustern, die Platz für die Aufzeichnung der Inhalte von Dateien, Verzeichnissen und anderen Dateisystemstrukturen bieten. Ein FAT stellt eine Clusterkette als singly verknüpfte Liste der 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 (Bytes) |
Kommentare |
---|---|---|---|
FatEntry[0] | 0 | 4 | Dieses Feld ist obligatorisch und Abschnitt 4.1.1 definiert seinen Inhalt. |
FatEntry[1] | 4 | 4 | Dieses Feld ist obligatorisch und Abschnitt 4.1.2 definiert seinen Inhalt. |
FatEntry[2] | 8 | 4 | Dieses Feld ist obligatorisch und Abschnitt 4.1.3 definiert seinen Inhalt. |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | Dieses Feld ist obligatorisch und Abschnitt 4.1.3 definiert seinen Inhalt. ClusterCount + 1 kann FFFFFFFFF6h nie überschreiten. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das ClusterCount-Feld. |
Exzessspace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – (ClusterCount + 2) * 4) | Dieses Feld ist obligatorisch und sein Inhalt, falls vorhanden, sind nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten sowohl die Felder ClusterCount, FatLength und BytesPerSectorShift. |
4.1.1 FatEntry[0] Field
Das Feld FatEntry[0] beschreibt den Medientyp im ersten Byte (dem niedrigsten Byte) und enthält FFh in den verbleibenden drei Bytes.
Der Medientyp (das erste Byte) sollte F8h sein.
4.1.2 FatEntry[1] Feld
Das FatEntry[1]-Feld ist nur aufgrund der historischen Rangfolge vorhanden und beschreibt nichts von Interesse.
Der gültige Wert für dieses Feld ist FFFFFFFFFFh. Implementierungen initialisieren dieses Feld auf ihren vorgeschriebenen Wert und sollten dieses Feld nicht für einen bestimmten Zweck verwenden. Implementierungen sollten dieses Feld nicht interpretieren und ihre Inhalte über Vorgänge beibehalten, die umgebende Felder ändern.
4.1.3 FatEntry[2] ... FatEntry[ClusterCount+1] Felder
Jedes FatEntry-Feld in diesem Array stellt einen Cluster im Cluster-Heap dar. FatEntry[2] stellt den ersten Cluster im Cluster-Heap und FatEntry[ClusterCount+1] dar.
Der gültige Wertebereich für diese Felder lautet:
Zwischen 2 und ClusterCount + 1, inklusive, die auf die nächste FatEntry in der angegebenen Clusterkette verweist; die angegebene FatEntry weist keine FatEntry auf, die ihm in der angegebenen Clusterkette vorangestellt ist.
Genau FFFFFFFFF7h, das den entsprechenden Cluster von FatEntry als "schlecht" markiert.
Genau FFFFFFFFFFh, das den entsprechenden Cluster von FatEntry als letzten Cluster einer Clusterkette markiert; dies ist der einzige gültige Wert für die letzte FatEntry einer bestimmten Clusterkette
5 Datenbereich
Der Datenbereich enthält den Cluster-Heap, der verwalteten Speicherplatz für Dateisystemstrukturen, Verzeichnisse und Dateien bereitstellt.
5.1 Cluster-Heap-Unterregion
Die Struktur des Cluster-Heaps ist sehr einfach (siehe Tabelle 12); Jede aufeinander folgende Reihe von Sektoren beschreibt einen Cluster, da das Feld "SectorsPerClusterShift" definiert. Wichtig ist, dass der erste Cluster des Cluster-Heap index zwei hat, der direkt dem Index von FatEntry[2] entspricht.
In einem exFAT-Volume verwaltet eine Zuordnungs-Bitmap (siehe Abschnitt 7.1.5) den Datensatz des Zuordnungsstatus aller Cluster. Dies ist ein wesentlicher Unterschied zu den Vorgängern von exFAT (FAT12, FAT16 und FAT32), in dem ein FAT einen Datensatz des Zuordnungsstatus aller Cluster im Cluster-Heap beibehalten hat.
Tabelle 12 Cluster-Heapstruktur
Feldname | Offset (Sektor) |
Größe (Sektoren) |
Kommentare |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2SektorenPerClusterShift | Dieses Feld ist obligatorisch und Abschnitt 5.1.1 definiert seinen Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten sowohl die Felder "ClusterHeapOffset" als auch "SectorsPerClusterShift". |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2SectorsPerClusterShift | 2SektorenPerClusterShift | Dieses Feld ist obligatorisch und Abschnitt 5.1.1 definiert seinen Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten sowohl die Felder "ClusterCount", "ClusterHeapOffset" als auch "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 zum Verwalten der Dateisystemstrukturen und Dateien, die im Cluster-Heap vorhanden sind. Verzeichnisse verfügen über eine 1-0-Beziehung zwischen übergeordnetem und untergeordnetem Element in der Verzeichnisstruktur.
Das Verzeichnis, auf das das Feld "FirstClusterOfRootDirectory" verweist, ist der Stamm der Verzeichnisstruktur. Alle anderen Verzeichnisse stammen aus dem Stammverzeichnis in einer singly verknüpften Weise ab.
Jedes Verzeichnis besteht aus einer Reihe von Verzeichniseinträgen (siehe Tabelle 13).
Ein oder mehrere Verzeichniseinträge kombinieren sich in einem Verzeichniseintragssatz, der etwas Interesse beschreibt, z. B. eine Dateisystemstruktur, ein Unterverzeichnis oder eine Datei.
Tabelle 13 Verzeichnisstruktur
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
DirectoryEntry[0] | 0 | 32 | Dieses Feld ist obligatorisch und Abschnitt 6.1 definiert seinen Inhalt. |
. . . |
. . . |
. . . |
. . . |
DirectoryEntry[N–1] | (N – 1) * 32 | 32 | Dieses Feld ist obligatorisch und Abschnitt 6.1 definiert seinen Inhalt. N, die Anzahl der DirectoryEntry-Felder ist die Größe in Bytes der Clusterkette, die das angegebene Verzeichnis enthält, unterteilt durch die Größe eines DirectoryEntry-Felds, 32 Bytes. |
6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]
Jedes DirectoryEntry-Feld in diesem Array wird aus der Generischen DirectoryEntry-Vorlage abgeleitet (siehe Abschnitt 6.2).
6.2 Generic DirectoryEntry-Vorlage
Die Generische DirectoryEntry-Vorlage stellt die Basisdefinition für Verzeichniseinträge bereit (siehe Tabelle 14). Alle Verzeichniseintragsstrukturen stammen aus dieser Vorlage und nur von Microsoft definierte Verzeichniseintragsstrukturen sind gültig (exFAT verfügt nicht über Bestimmungen für herstellerdefinierte Verzeichniseintragsstrukturen außer in Abschnitt 7.8 und Abschnitt 7.9). Die Möglichkeit, die Generic DirectoryEntry-Vorlage zu interpretieren, ist obligatorisch.
Tabelle 14 Generische VerzeichnisEntry-Vorlage
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 6.2.1 definiert seinen Inhalt. |
CustomDefined | 1 | 19 | Dieses Feld ist obligatorisch und Strukturen, die von dieser Vorlage abgeleitet werden, können ihre Inhalte definieren. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 6.2.2 definiert seinen Inhalt. |
DataLength | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 6.2.3 definiert seinen Inhalt. |
6.2.1 EntryType Field
Das EntryType-Feld verfügt über drei Verwendungsmodi, die der Wert des Felds definiert (siehe Liste unten).
00h, die eine End-of-Directory-Markierung ist und die folgenden Bedingungen gelten:
Alle anderen Felder in der angegebenen DirectoryEntry sind tatsächlich reserviert.
Alle nachfolgenden Verzeichniseinträge im angegebenen Verzeichnis sind auch End-of-Directory-Marker
End-of-Directory-Markierungen sind nur außerhalb von Verzeichniseintragssätzen gültig.
Implementierungen können End-of-Directory-Marker nach Bedarf überschreiben
Zwischen 01h und 7Fh inklusive, die eine nicht verwendete Verzeichniseintragsmarkierung und die folgenden Bedingungen gelten:
Alle anderen Felder in der angegebenen DirectoryEntry sind tatsächlich nicht definiert.
Nicht verwendete Verzeichniseinträge sind nur außerhalb von Verzeichniseintragssätzen gültig.
Implementierungen können nicht verwendete Verzeichniseinträge nach Bedarf überschreiben.
Dieser Wertebereich entspricht dem InUse-Feld (siehe Abschnitt 6.2.1.4), der den Wert 0 enthält.
Zwischen 81h und FFh inklusive, was ein regulärer Verzeichniseintrag ist und die folgenden Bedingungen gelten:
Der Inhalt des EntryType-Felds (siehe Tabelle 15) bestimmt das Layout der restlichen DirectoryEntry-Struktur.
Dieser Wertebereich und nur dieser Wertebereich sind in einem Verzeichniseintragssatz gültig.
Dieser Wertebereich entspricht direkt dem InUse-Feld (siehe Abschnitt 6.2.1.4), der den Wert 1 enthält.
Um Änderungen an dem InUse-Feld zu verhindern (siehe Abschnitt 6.2.1.4), die zu einer End-of-Directory-Markierung 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 Abschnitt 6.2.1.1 definiert seinen Inhalt. |
TypeImportance | 5 | 1 | Dieses Feld ist obligatorisch und Abschnitt Abschnitt 6.2.1.2 definiert seinen Inhalt. |
TypeCategory | 6 | 1 | Dieses Feld ist obligatorisch und Abschnitt 6.2.1.3 definiert seinen Inhalt. |
InUse | 7 | 1 | Dieses Feld ist obligatorisch und Abschnitt 6.2.1.4 definiert seinen Inhalt. |
6.2.1.1 TypeCode-Feld
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 und 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" beschreibt die Wichtigkeit des angegebenen Verzeichniseintrags.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass der angegebene Verzeichniseintrag kritisch ist (siehe Abschnitt 6.3.1.1.2.1 und Abschnitt 6.4.1.2.1 für kritische primär- und kritische sekundäre Verzeichniseinträge)
1, was bedeutet, dass der angegebene Verzeichniseintrag gut ist (siehe Abschnitt 6.3.1.2.2 und Abschnitt 6.4.1.2.2 für gutartige primär- und gutartige sekundäre Verzeichniseinträge)
6.2.1.3 TypeCategory Field
Das Feld "TypeCategory" beschreibt die Kategorie des angegebenen Verzeichniseintrags.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass der angegebene Verzeichniseintrag primär ist (siehe Abschnitt 6.3)
1, was bedeutet, dass der angegebene Verzeichniseintrag sekundär ist (siehe Abschnitt 6.4)
6.2.1.4 InUse Field
Das Feld InUse beschreibt, 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 die angegebene Struktur tatsächlich ein nicht verwendeter Verzeichniseintrag ist.
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" enthält den Index des ersten Clusters einer Zuordnung im Cluster-Heap, der dem angegebenen Verzeichniseintrag zugeordnet ist.
Der gültige Wertebereich für dieses Feld lautet:
Genau 0, was bedeutet, dass keine Clusterzuweisung vorhanden ist
Zwischen 2 und ClusterCount + 1, das ist der Bereich der gültigen Clusterindizes
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, 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 wert 0 des Felds nur gültig.
Am meisten 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 Verzeichnisentry-Vorlage
Der erste Verzeichniseintrag in einem Verzeichniseintragssatz ist ein primärer Verzeichniseintrag. Alle nachfolgenden Verzeichniseinträge( sofern vorhanden) im Verzeichniseintragssatz sind sekundäre Verzeichniseinträge (siehe Abschnitt 6.4).
Die Möglichkeit, die generische Primäre VerzeichnisEntry-Vorlage zu interpretieren, ist obligatorisch.
Alle primären Verzeichniseintragsstrukturen werden von der Vorlage "Generic Primary DirectoryEntry" abgeleitet (siehe Tabelle 16), die von der Generischen DirectoryEntry-Vorlage abgeleitet wird (siehe Abschnitt 6.2).
Tabelle 16 Generische Primäre Verzeichnisentry-Vorlage
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 6.3.1 definiert seinen Inhalt. |
SecondaryCount | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 6.3.2 definiert seinen Inhalt. |
SetChecksum | 2 | 2 | Dieses Feld ist obligatorisch und Abschnitt 6.3.3 definiert seinen Inhalt. |
GeneralPrimaryFlags | 4 | 2 | Dieses Feld ist obligatorisch und Abschnitt 6.3.4 definiert seinen Inhalt. |
CustomDefined | 6 | 14 | Dieses Feld ist obligatorisch und Strukturen, die von dieser Vorlage abgeleitet werden, definieren den Inhalt. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 6.3.5 definiert seinen Inhalt. |
DataLength | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 6.3.6 definiert seinen Inhalt. |
6.3.1 EntryType Field
Das Feld "EntryType" entspricht der Definition, die in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.1) angegeben ist.
6.3.1.1 TypeCode Field
Das Feld "TypeCode" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.1.1).
6.3.1.2 TypeImportance Field
Das Feld "TypeImportance" entspricht der Definition, die in der Generischen DirectoryEntry-Vorlage angegeben ist (siehe Abschnitt 6.2.1.2).
6.3.1.2.1 Kritische 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 wichtigsten ExFAT-Revisionsnummer. Implementierungen unterstützen alle kritischen primären Verzeichniseinträge und zeichnen nur die kritischen primären Verzeichniseintragsstrukturen auf, die diese Spezifikation definiert.
6.3.1.2.2 Gutartige Primärverzeichniseinträ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 Nebenversionsnummer exFAT. Unterstützung für jeden gutartigen primären Verzeichniseintrag dieser Spezifikation oder einer nachfolgenden Spezifikation ist optional. Ein nicht erkannter nicht erkannter primärer Verzeichniseintrag rendert den gesamten Verzeichniseintragssatz als nicht erkannt (über die Definition der anwendbaren Verzeichniseintragsvorlagen hinaus).
6.3.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (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 InUse-Feld entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.1.4).
6.3.2 SecondaryCount Field
Das Feld "SecondaryCount" beschreibt die Anzahl der sekundären Verzeichniseinträge, die unmittelbar dem angegebenen Primärverzeichniseintrag folgen. Diese sekundären Verzeichniseinträge zusammen mit dem angegebenen primären Verzeichniseintrag umfassen den Verzeichniseintrag.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens 0, was bedeutet, dass dieser primäre Verzeichniseintrag der einzige Eintrag im Verzeichniseintragssatz ist.
Am meisten 255, was bedeutet, dass die nächsten 255 Verzeichniseinträge und dieser primäre Verzeichniseintrag den Verzeichniseintragssatz umfasst.
Kritische 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" enthält die Prüfsumme aller Verzeichniseinträge im angegebenen Verzeichniseintragssatz. Die Prüfsumme schließt dieses Feld jedoch aus (siehe Abbildung 2). Implementierungen überprüfen den Inhalt dieses Felds vor der Verwendung eines anderen Verzeichniseintrags im angegebenen Verzeichniseintrag.
Kritische 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 AllgemeinePrimaryFlags-Feldstruktur
Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
AllocationPossible | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 6.3.4.1 definiert seinen Inhalt. |
NoFatChain | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 6.3.4.2 definiert seinen Inhalt. |
CustomDefined | 2 | 14 | Dieses Feld ist obligatorisch und Strukturen, die von dieser Vorlage abgeleitet werden, können dieses Feld definieren. |
6.3.4.1 AllocationPossible Field
Das Feld "AllocationPossible" beschreibt, ob eine Zuordnung im Cluster-Heap für den angegebenen Verzeichniseintrag möglich ist.
Die gültigen 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 nicht definiert sind (Strukturen, die aus dieser Vorlage abgeleitet werden, können diese Felder neu definieren)
1, was bedeutet, dass eine zugeordnete Zuordnung von Clustern möglich ist und die Felder FirstCluster und DataLength wie definiert sind
6.3.4.2 NoFatChain Field
Das Feld "NoFatChain" gibt an, ob die aktive FAT die Clusterkette der angegebenen Zuordnung beschreibt.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass die entsprechenden FAT-Einträge für die Clusterkette der Zuordnung gültig sind und Implementierungen sie interpretieren; wenn das Feld "AllocationPossible" den Wert 0 enthält oder wenn das Feld "AllocationPossible" den Wert 1 enthält und das Feld "FirstCluster" den Wert 0 enthält, ist dieser Feld nur gültiger Wert 0.
1, was bedeutet, dass die zugeordnete Zuordnung eine zusammenhängende Reihe von Clustern ist; die entsprechenden FAT-Einträge für die Cluster ungültig sind und Implementierungen nicht interpretiert werden; Implementierungen können die folgende Formel verwenden, um die Größe der zugeordneten Zuordnung zu berechnen: DataLength / (2SectorsPerClusterShift* 2 BytesPerSectorShift) auf die nächste ganze Zahlgerundet
Wenn kritische Primäre Verzeichniseintragsstrukturen, die von dieser Vorlage abgeleitet werden, das Feld "GeneralPrimaryFlags" neu definieren, sind die entsprechenden FAT-Einträge für die Clusterkette einer zugeordneten Zuordnung gültig.
6.3.5 FirstCluster Field
Das Feld "FirstCluster" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.2.2).
Wenn der NoFatChain-Bit 1 ist, muss FirstCluster auf einen gültigen Cluster im Cluster-Heap verweisen.
Kritische Primäre Verzeichniseintragsstrukturen, die von dieser Vorlage abgeleitet werden, können die Felder FirstCluster und DataLength neu definieren. Andere Strukturen, die von dieser Vorlage abgeleitet werden, können die Felder FirstCluster und DataLength nur neu definieren, wenn das Feld "AllocationPossible" den Wert 0 enthält.
6.3.6 DataLength Field
Das Feld "DataLength" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.3).
Wenn der NoFatChain-Bit 1 ist, muss DataLength nicht null sein. Wenn das Feld "FirstCluster" null ist, muss DataLength auch null sein.
Kritische Primäre Verzeichniseintragsstrukturen, die von dieser Vorlage abgeleitet werden, können die Felder FirstCluster und DataLength neu definieren. Andere Strukturen, die von dieser Vorlage abgeleitet werden, können die Felder FirstCluster und DataLength nur neu definieren, wenn das Feld "AllocationPossible" den Wert 0 enthält.
6.4 Generic Secondary DirectoryEntry-Vorlage
Der zentrale Zweck sekundärer Verzeichniseinträge besteht darin, zusätzliche Informationen zu einem Verzeichniseintragssatz bereitzustellen. Die Möglichkeit, die Generische SekundärverzeichnisEntry-Vorlage zu interpretieren, ist obligatorisch.
Die Definition von kritischen und gutartigen sekundären Verzeichniseinträgen korreliert mit der Nebenversionsnummer der ExFAT-Revision. Unterstützung für kritische oder gutartige sekundäre Verzeichniseinträge, die diese Spezifikation oder nachfolgende Spezifikationen definieren, ist optional.
Alle sekundären Verzeichniseintragsstrukturen stammen aus der Vorlage "Generic Secondary DirectoryEntry" (siehe Tabelle 18), die aus der Vorlage "Generic DirectoryEntry" abgeleitet wird (siehe Abschnitt 6.2).
Tabelle 18 Generische SekundärverzeichnisEntry-Vorlage
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 Abschnitt 6.4.2 definiert seinen Inhalt. |
CustomDefined | 2 | 18 | Dieses Feld ist obligatorisch und Strukturen, die von dieser Vorlage abgeleitet werden, definieren ihren Inhalt. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 6.4.3 definiert seinen Inhalt. |
DataLength | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 6.4.4 definiert seinen Inhalt. |
6.4.1 EntryType Field
Das EntryType-Feld entspricht der Definition, die in der Generischen VerzeichnisEntry-Vorlage bereitgestellt wird (siehe Abschnitt 6.2.1)
6.4.1.1 TypeCode Field
Das Feld "TypeCode" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.1.1).
6.4.1.2 TypeImportance Field
Das Feld "TypeImportance" entspricht der Definition, die in der Generischen VerzeichnisEntry-Vorlage bereitgestellt wird (siehe Abschnitt 6.2.1.2).
6.4.1.2.1 Kritische sekundäre Verzeichniseinträge
Wichtige sekundäre Verzeichniseinträge enthalten Informationen, die für die ordnungsgemäße Verwaltung des enthaltenen Verzeichniseintragssatzes wichtig sind. Während die Unterstützung für einen bestimmten kritischen sekundären Verzeichniseintrag optional ist, rendert ein nicht erkannter kritischer Verzeichniseintrag den gesamten Verzeichniseintrag als nicht erkannt (über die Definition der anwendbaren Verzeichniseintragsvorlagen hinaus).
Wenn jedoch ein Verzeichniseintragssatz mindestens einen kritischen sekundären Verzeichniseintrag enthält, den eine Implementierung nicht erkennt, interpretiert die Implementierung am meisten die Vorlagen der Verzeichniseinträge im Verzeichniseintragssatz und nicht die Daten, die einem Verzeichniseintrag im Verzeichniseintragssatz zugeordnet sind, enthält (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 das Verwalten des enthaltenen Verzeichniseintragssatzes nützlich sein können. Die Unterstützung für einen bestimmten gutartigen sekundären Verzeichniseintrag ist optional. Nicht erkannte sekundäre Verzeichniseinträge rendern nicht den gesamten Verzeichniseintrag als nicht erkannt.
Implementierungen können einen gutartigen sekundären Eintrag ignorieren, der nicht erkannt wird.
6.4.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (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 InUse-Feld entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.1.4).
6.4.2 GeneralSecondaryFlags Field
Das Feld "GeneralSecondaryFlags" enthält Flags (siehe Tabelle 19).
Tabelle 19 Generische AllgemeineSecondaryFlags-Feldstruktur
Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
AllocationPossible | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 6.4.2.1 definiert seinen Inhalt. |
NoFatChain | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 6.4.2.2 definiert seinen Inhalt. |
CustomDefined | 2 | 6 | Dieses Feld ist obligatorisch und Strukturen, die von dieser Vorlage abgeleitet werden, können dieses Feld definieren. |
6.4.2.1 AllocationPossible Field
Das Feld "AllocationPossible" hat dieselbe Definition wie das gleiche benannte Feld in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.4.1).
6.4.2.2 NoFatChain Field
Das Feld "NoFatChain" hat dieselbe Definition wie das gleiche benannte Feld in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.4.2).
6.4.3 FirstCluster Field
Das Feld "FirstCluster" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.2.2).
Wenn der NoFatChain-Bit 1 ist, muss FirstCluster auf einen gültigen Cluster im Cluster-Heap verweisen.
6.4.4 DataLength Field
Das Feld "DataLength" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.3).
Wenn der NoFatChain-Bit 1 ist, muss DataLength nicht null sein. Wenn das Feld "FirstCluster" null ist, muss DataLength auch null sein.
7 Verzeichniseintragsdefinitionen
Revision 1.00 des ExFAT-Dateisystems definiert die folgenden Verzeichniseinträge:
Kritischer Primärer
Zuordnungs-Bitmap (Abschnitt 7.1)
Groß-/Kleinschreibungstabelle (Abschnitt 7.2)
Volumenbezeichnung (Abschnitt 7.3)
Datei (Abschnitt 7.4)
Gutartige Primäre
Volume-GUID (Abschnitt 7.5)
TexFAT Padding (Abschnitt 7.10)
Kritische sekundäre Sekundäre
Streamerweiterung (Abschnitt 7.6)
Dateiname (Abschnitt 7.7)
Gutartige sekundäre Sekundäre
Anbietererweiterung (Abschnitt 7.8)
Anbieterzuweisung (Abschnitt 7.9)
7.1 Zuordnungs-Bitmapverzeichniseintrag
Im ExFAT-Dateisystem beschreibt ein FAT nicht den Zuordnungszustand von Clustern; Stattdessen wird eine Zuordnungs-Bitmap verwendet. Zuordnungs-Bitmaps sind im Cluster-Heap 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 der gültigen Zuordnungs-Bitmap-Verzeichniseinträge im Stammverzeichnis. Wenn das Feld "NumberOfFats" den Wert 1 enthält, ist die einzige gültige Anzahl der Zuordnungs-Bitmap-Verzeichniseinträge 1. Darüber hinaus ist der einzige Zuordnungs-Bitmap-Eintrag gültig, wenn er die First Allocation Bitmap beschreibt (siehe Abschnitt 7.1.2.1). Wenn das Feld "NumberOfFats" den Wert 2 enthält, ist die einzige gültige Anzahl der Zuordnungs-Bitmap-Verzeichniseinträge 2. Darüber hinaus sind die beiden Zuordnungs-Bitmap-Einträge nur gültig, wenn eine die Erste Zuordnungs bitmap beschreibt und die andere die zweite Zuordnungs bitmap beschreibt.
Tabelle 20 Zuordnungs-BitmapverzeichnisEntry-Struktur
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.1.1 definiert seinen Inhalt. |
BitmapFlags | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.1.2 definiert seinen Inhalt. |
Reserviert | 2 | 18 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.1.3 definiert seinen Inhalt. |
DataLength | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 7.1.4 definiert seinen Inhalt. |
7.1.1 EntryType Field
Das Feld "EntryType" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" bereitgestellt wird (siehe Abschnitt 6.3.1).
7.1.1.1 TypeCode Field
Das Feld "TypeCode" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" bereitgestellt wird (siehe Abschnitt 6.3.1.1).
Für einen Zuordnungs-Bitmap-Verzeichniseintrag ist der gültige Wert für dieses Feld 1.
7.1.1.2 TypeImportance Field
Das Feld "TypeImportance" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (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" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.3).
7.1.1.4 InUse Field
Das Feld InUse entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.4).
7.1.2 BitmapFlags Field
Das BitmapFlags-Feld 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 Abschnitt 7.1.2.1 definiert seinen Inhalt. |
Reserviert | 1 | 7 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
7.1.2.1 BitmapIdentifier-Feld
Das BitmapIdentifier-Feld muss angeben, welche Zuordnungs-Bitmap der angegebene Verzeichniseintrag beschreibt. Implementierungen verwenden die Erste Zuordnungs-Bitmap in Verbindung mit dem ersten FAT und verwenden die zweite Zuordnungs-Bitmap in Verbindung mit dem zweiten FAT. Das ActiveFat-Feld beschreibt, welche FAT- und Zuordnungs-Bitmap aktiv sind.
Die gültigen Werte für dieses Feld sind:
0, was bedeutet, dass der angegebene Verzeichniseintrag die Erste Zuordnungs-Bitmap beschreibt
1, was bedeutet, dass der angegebene Verzeichniseintrag die zweite Zuordnungs-Bitmap beschreibt und nur möglich ist, wenn NumberOfFats den Wert 2 enthält.
7.1.3 FirstCluster Field
Das Feld "FirstCluster" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.5).
Dieses Feld enthält den Index des ersten Clusters der Clusterkette, wie die FAT beschreibt, die die Zuordnungs-Bitmap hostet.
7.1.4 DataLength Field
Das Feld "DataCluster" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.6).
7.1.5-Zuordnungs-Bitmap
Eine Zuordnungs-Bitmap zeichnet den Zuordnungsstatus der Cluster im Cluster-Heap auf. Jedes Bit in einer Zuordnungs-Bitmap 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 hat der erste Cluster Index 2. Hinweis: Das erste Bit in der Bitmap ist das kleinste Bit des ersten Bytes.
Tabelle 22 Zuordnungs-Bitmapstruktur
Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt Abschnitt 7.1.5.1 definiert seinen Inhalt. |
. . . |
. . . |
. . . |
. . . |
BitmapEntry[ClusterCount+1] | ClusterCount - 1 | 1 | Dieses Feld ist obligatorisch, und Der Abschnitt 7.1.5.1 definiert seinen Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das ClusterCount-Feld. |
Reserviert | ClusterCount | (DataLength * 8) – ClusterCount | Dieses Feld ist obligatorisch, und dessen Inhalte sind ggf. reserviert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das ClusterCount-Feld. |
7.1.5.1 BitmapEntry[2] ... BitmapEntry[ClusterCount+1] Felder
Jedes BitmapEntry-Feld in diesem Array stellt einen Cluster im Cluster-Heap dar. BitmapEntry[2] stellt den ersten Cluster im Cluster-Heap und BitmapEntry[ClusterCount+1] dar, der den letzten Cluster im Cluster-Heap darstellt.
Die gültigen Werte für diese Felder sind:
0, der den entsprechenden Cluster als verfügbar für die Zuordnung beschreibt
1, der den entsprechenden Cluster als nicht für die Zuordnung verfügbar beschreibt (eine Clusterzuordnung kann bereits den entsprechenden Cluster nutzen oder das aktive FAT den entsprechenden Cluster als schlecht beschreiben)
7.2 Verzeichniseintrag in Groß-/Kleinschreibung
In der Groß-/Kleinschreibungstabelle wird die Konvertierung von Kleinbuchstaben in Groß-/Kleinschreibung definiert. Dies ist aufgrund des Verzeichniseintrags "Dateiname" (siehe Abschnitt 7.7) mit Unicode-Zeichen und dem exFAT-Dateisystem wichtig, bei dem die Groß- und Kleinschreibung nicht beachtet wird. Die Up-Case-Tabelle ist im Cluster-Heap vorhanden (siehe Abschnitt 7.2.5) und verfügt über einen entsprechenden kritischen primären Verzeichniseintrag im Stammverzeichnis (siehe Tabelle 23). Die gültige Anzahl von Verzeichniseinträgen in Up-Case-Tabellen ist 1.
Aufgrund der Beziehung zwischen der Up-Case-Tabelle und Dateinamen sollten Implementierungen die Up-Case-Tabelle nicht ändern, außer aufgrund von Formatvorgängen.
Table 23 Up-case Table DirectoryEntry-Struktur
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.2.1 definiert seinen Inhalt. |
Reserved1 | 1 | 3 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
TableChecksum | 4 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.2.2 definiert seinen Inhalt. |
Reserved2 | 8 | 12 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.2.3 definiert seinen Inhalt. |
DataLength | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 7.2.4 definiert seinen Inhalt. |
7.2.1 EntryType Field
Das Feld "EntryType" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" bereitgestellt wird (siehe Abschnitt 6.3.1).
7.2.1.1 TypeCode Field
Das Feld "TypeCode" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" bereitgestellt wird (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" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" bereitgestellt wird (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" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.3).
7.2.1.4 InUse Field
Das InUse-Feld entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" bereitgestellt wird (siehe Abschnitt 6.3.1.4).
7.2.2 TableChecksum Field
Das Feld "TableChecksum" enthält die Prüfsumme der Groß-/Kleinschreibungstabelle (die die Felder "FirstCluster" und "DataLength" beschreiben). Implementierungen überprüfen, ob der Inhalt dieses Felds vor der Verwendung der Falltabelle gültig ist.
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" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.5).
Dieses Feld enthält den Index des ersten Clusters der Clusterkette, wie die FAT beschreibt, die die Up-Case-Tabelle hostet.
7.2.4 DataLength Field
Das Feld "DataCluster" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.6).
7.2.5 Up-Case-Tabelle
Eine Groß-/Kleinschreibungstabelle ist eine Reihe von Unicode-Zeichenzuordnungen. Eine Zeichenzuordnung besteht aus einem 2-Byte-Feld mit dem Index des Felds in der Groß-/Kleinschreibungstabelle, das das Unicode-Zeichen darstellt, das groß- und klein geschrieben werden soll, und das 2-Byte-Feld, das das Groß-/Kleinschreibungszeichen darstellt.
Die ersten 128 Unicode-Zeichen verfügen über obligatorische Zuordnungen (siehe Tabelle 24). Eine Groß-/Kleinschreibungstabelle, die eine andere Zeichenzuordnung für eine der ersten 128 Unicode-Zeichen aufweist, ist ungültig.
Implementierungen, die nur Zeichen aus dem obligatorischen Zuordnungsbereich unterstützen, können die Zuordnungen der restlichen Falltabelle ignorieren. Diese Implementierungen verwenden nur Zeichen aus dem obligatorischen Zuordnungsbereich beim Erstellen oder Umbenennen von Dateien (über den Dateinamenverzeichniseintrag, siehe Abschnitt 7.7). Bei der Aktualisierung vorhandener Dateinamen müssen solche Implementierungen keine Groß-/Kleinschreibungszeichen aus dem nicht obligatorischen Zuordnungsbereich aufweisen, sondern sie in der resultierenden Groß-/Kleinschreibung intakt lassen (dies ist eine teilweise Up-Casing). Beim Vergleich von Dateinamen behandelt diese Implementierung Dateinamen, die sich von dem Namen unterscheiden, der sich nur von Unicode-Zeichen aus dem nicht obligatorischen Zuordnungsbereich als gleichwertig unterscheidet. Während solche Dateinamen nur potenziell gleichwertig sind, können solche Implementierungen nicht sicherstellen, dass der vollständig nach oben beschriebene Dateinamen nicht mit dem Namen im Vergleich kollidiert.
Tabelle 24 Obligatorische erste 128 Groß-/Kleinschreibungstabelleneinträge
Tabellenindex | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
(Hinweis: Einträge mit nicht identitätsfreien Groß-/Kleinschreibungszuordnungen sind fett formatiert)
Bei der Formatierung eines Volumes können Implementierungen eine Groß-/Kleinschreibungstabelle in einem komprimierten Format mithilfe der Identitätszuordnungskomprimierung generieren, da ein großer Teil des Unicode-Zeichenbereichs kein Konzept von Groß-/Kleinschreibung aufweist (was bedeutet, dass die Zeichen "Kleinschreibung" und "Groß-/Kleinschreibung" gleichwertig sind). Implementierungen komprimieren eine Falltabelle, indem sie eine Reihe von Identitätszuordnungen mit dem Wert FFFFh darstellt, gefolgt von der Anzahl der Identitätszuordnungen.
Eine Implementierung kann beispielsweise die ersten 100 (64h)-Zeichenzuordnungen mit den folgenden acht Einträgen einer komprimierten Groß-/Kleinschreibungstabelle darstellen:
FFFFh, 0061h, 0041h, 0042h, 0043h
Die ersten beiden Einträge deuten darauf hin, dass die ersten 97 (61h) Zeichen (von 0000h bis 0060h) Identitätszuordnungen aufweisen. Die nachfolgenden Zeichen, 0061h bis 0063h, ordnen sie den Zeichen 0041h bis 0043h zu.
Die Möglichkeit, bei der Formatierung eines Volumes eine komprimierte Groß-/Kleinschreibungstabelle bereitzustellen, ist optional. Die Möglichkeit, sowohl eine nicht komprimierte als auch eine komprimierte Groß-/Kleinschreibungstabelle zu interpretieren, ist jedoch obligatorisch. Der Wert des TableChecksum-Felds entspricht immer der Art, wie die Groß-/Kleinschreibungstabelle auf dem Volume vorhanden ist, die möglicherweise in komprimierter oder unkomprimiertem Format enthalten ist.
7.2.5.1 Empfohlene Up-Case-Tabelle
Bei der Formatierung eines Volumes sollten Implementierungen die empfohlene Groß-/Kleinschreibungstabelle im komprimierten Format aufzeichnen (siehe Tabelle 25), für die der Wert des TableChecksum-Felds E619D30Dh ist.
Wenn eine Implementierung eine eigene Groß-/Kleinschreibungstabelle definiert, entweder komprimiert oder nicht komprimiert, wird diese Tabelle den vollständigen Unicode-Zeichenbereich abdecken (von Zeichencodes 0000h bis FFFFh inklusive).
Tabelle 25 Empfohlene Groß-/Kleinschreibungstabelle im komprimierten Format
Unformatiertes Offset | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
0080h | 0080h | 0081h | 0082h | 0083h | 0084h | 0085h | 0086h | 0087h |
0088h | 0088h | 0089h | 008Ah | 008Bh | 008Ch | 008Dh | 008Eh | 008Fh |
0090h | 0090h | 0091h | 0092h | 0093h | 0094h | 0095h | 0096h | 0097h |
0098h | 0098h | 0099h | 009Ah | 009Bh | 009Ch | 009Dh | 009Eh | 009Fh |
00A0h | 00A0h | 00A1h | 00A2h | 00A3h | 00A4h | 00A5h | 00A6h | 00A7h |
00A8h | 00A8h | 00A9h | 00AAh | 00ABh | 00ACh | 00ADh | 00AEh | 00AFh |
00B0h | 00B0h | 00B1h | 00B2h | 00B3h | 00B4h | 00B5h | 00B6h | 00B7h |
00B8h | 00B8h | 00B9h | 00BAh | 00BBh | 00BCh | 00BDh | 00BEh | 00BFh |
00C0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00C8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00D0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00D7h |
00D8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 00DFh |
00E0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00E8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00F0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00F7h |
00F8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 0178h |
0100h | 0100h | 0100h | 0102h | 0102h | 0104h | 0104h | 0106h | 0106h |
0108h | 0108h | 0108h | 010Ah | 010Ah | 010Ch | 010Ch | 010Eh | 010Eh |
0110h | 0110h | 0110h | 0112h | 0112h | 0114h | 0114h | 0116h | 0116h |
0118h | 0118h | 0118h | 011Ah | 011Ah | 011Ch | 011Ch | 011Eh | 011Eh |
0120h | 0120h | 0120h | 0122h | 0122h | 0124h | 0124h | 0126h | 0126h |
0128h | 0128h | 0128h | 012Ah | 012Ah | 012Ch | 012Ch | 012Eh | 012Eh |
0130h | 0130h | 0131h | 0132h | 0132h | 0134h | 0134h | 0136h | 0136h |
0138h | 0138h | 0139h | 0139h | 013Bh | 013Bh | 013Dh | 013Dh | 013Fh |
0140h | 013Fh | 0141h | 0141h | 0143h | 0143h | 0145h | 0145h | 0147h |
0148h | 0147h | 0149h | 014Ah | 014Ah | 014Ch | 014Ch | 014Eh | 014Eh |
0150h | 0150h | 0150h | 0152h | 0152h | 0154h | 0154h | 0156h | 0156h |
0158h | 0158h | 0158h | 015Ah | 015Ah | 015Ch | 015Ch | 015Eh | 015Eh |
0160h | 0160h | 0160h | 0162h | 0162h | 0164h | 0164h | 0166h | 0166h |
0168h | 0168h | 0168h | 016Ah | 016Ah | 016Ch | 016Ch | 016Eh | 016Eh |
0170h | 0170h | 0170h | 0172h | 0172h | 0174h | 0174h | 0176h | 0176h |
0178h | 0178h | 0179h | 0179h | 017Bh | 017Bh | 017Dh | 017Dh | 017Fh |
0180h | 0243h | 0181h | 0182h | 0182h | 0184h | 0184h | 0186h | 0187h |
0188h | 0187h | 0189h | 018Ah | 018Bh | 018Bh | 018Dh | 018Eh | 018Fh |
0190h | 0190h | 0191h | 0191h | 0193h | 0194h | 01F6h | 0196h | 0197h |
0198h | 0198h | 0198h | 023Dh | 019Bh | 019Ch | 019Dh | 0220h | 019Fh |
01A0h | 01A0h | 01A0h | 01A2h | 01A2h | 01A4h | 01A4h | 01A6h | 01A7h |
01A8h | 01A7h | 01A9h | 01AAh | 01ABh | 01ACh | 01ACh | 01AEh | 01AFh |
01B0h | 01AFh | 01B1h | 01B2h | 01B3h | 01B3h | 01B5h | 01B5h | 01B7h |
01B8h | 01B8h | 01B8h | 01BAh | 01BBh | 01BCh | 01BCh | 01BEh | 01F7h |
01C0h | 01C0h | 01C1h | 01C2h | 01C3h | 01C4h | 01C5h | 01C4h | 01C7h |
01C8h | 01C8h | 01C7h | 01CAh | 01CBh | 01CAh | 01CDh | 01CDh | 01CFh |
01D0h | 01CFh | 01D1h | 01D1h | 01D3h | 01D3h | 01D5h | 01D5h | 01D7h |
01D8h | 01D7h | 01D9h | 01D9h | 01DBh | 01DBh | 018Eh | 01DEh | 01DEh |
01E0h | 01E0h | 01E0h | 01E2h | 01E2h | 01E4h | 01E4h | 01E6h | 01E6h |
01E8h | 01E8h | 01E8h | 01EAh | 01EAh | 01ECh | 01ECh | 01EEh | 01EEh |
01F0h | 01F0h | 01F1h | 01F2h | 01F1h | 01F4h | 01F4h | 01F6h | 01F7h |
01F8h | 01F8h | 01F8h | 01FAh | 01FAh | 01FCh | 01FCh | 01FEh | 01FEh |
0200h | 0200h | 0200h | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 0214h | 0216h | 0216h |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | 0226h | 0226h |
0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
02B8h | 02B8h | 02B9h | 02BAh | 02BBh | 02BCh | 02BDh | 02BEh | 02BFh |
02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02FFh |
0300h | 0300h | 0301h | 0302h | 0303h | 0304h | 0305h | 0306h | 0307h |
0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 0312h | 0313h | 0314h | 0315h | 0316h | 0317h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 0332h | 0333h | 0334h | 0335h | 0336h | 0337h |
0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 0346h | 0347h |
0348h | 0348h | 0349h | 034Ah | 034Bh | 034Ch | 034Dh | 034Eh | 034Fh |
0350h | 0350h | 0351h | 0352h | 0353h | 0354h | 0355h | 0356h | 0357h |
0358h | 0358h | 0359h | 035Ah | 035Bh | 035Ch | 035Dh | 035Eh | 035Fh |
0360h | 0360h | 0361h | 0362h | 0363h | 0364h | 0365h | 0366h | 0367h |
0368h | 0368h | 0369h | 036Ah | 036Bh | 036Ch | 036Dh | 036Eh | 036Fh |
0370h | 0370h | 0371h | 0372h | 0373h | 0374h | 0375h | 0376h | 0377h |
0378h | 0378h | 0379h | 037Ah | 03FDh | 03FEh | 03FFh | 037Eh | 037Fh |
0380h | 0380h | 0381h | 0382h | 0383h | 0384h | 0385h | 0386h | 0387h |
0388h | 0388h | 0389h | 038Ah | 038Bh | 038Ch | 038Dh | 038Eh | 038Fh |
0390h | 0390h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
0398h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03A0h | 03A0h | 03A1h | 03A2h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03A8h | 03A8h | 03A9h | 03AAh | 03ABh | 0386h | 0388h | 0389h | 038Ah |
03B0h | 03B0h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
03B8h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03C0h | 03A0h | 03A1h | 03A3h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03C8h | 03A8h | 03A9h | 03AAh | 03ABh | 038Ch | 038Eh | 038Fh | 03CFh |
03D0h | 03D0h | 03D1h | 03D2h | 03D3h | 03D4h | 03D5h | 03D6h | 03D7h |
03D8h | 03D8h | 03D8h | 03DAh | 03DAh | 03DCh | 03DCh | 03DEh | 03DEh |
03E0h | 03E0h | 03E0h | 03E2h | 03E2h | 03E4h | 03E4h | 03E6h | 03E6h |
03E8h | 03E8h | 03E8h | 03EAh | 03EAh | 03ECh | 03ECh | 03EEh | 03EEh |
03F0h | 03F0h | 03F1h | 03F9h | 03F3h | 03F4h | 03F5h | 03F6h | 03F7h |
03F8h | 03F7h | 03F9h | 03FAh | 03FAh | 03FCh | 03FDh | 03FEh | 03FFh |
0400h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0410h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0420h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0428h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0430h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0438h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0440h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0448h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0450h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0458h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0460h | 0460h | 0460h | 0462h | 0462h | 0464h | 0464h | 0466h | 0466h |
0468h | 0468h | 0468h | 046Ah | 046Ah | 046Ch | 046Ch | 046Eh | 046Eh |
0470h | 0470h | 0470h | 0472h | 0472h | 0474h | 0474h | 0476h | 0476h |
0478h | 0478h | 0478h | 047Ah | 047Ah | 047Ch | 047Ch | 047Eh | 047Eh |
0480h | 0480h | 0480h | 0482h | 0483h | 0484h | 0485h | 0486h | 0487h |
0488h | 0488h | 0489h | 048Ah | 048Ah | 048Ch | 048Ch | 048Eh | 048Eh |
0490h | 0490h | 0490h | 0492h | 0492h | 0494h | 0494h | 0496h | 0496h |
0498h | 0498h | 0498h | 049Ah | 049Ah | 049Ch | 049Ch | 049Eh | 049Eh |
04A0h | 04A0h | 04A0h | 04A2h | 04A2h | 04A4h | 04A4h | 04A6h | 04A6h |
04A8h | 04A8h | 04A8h | 04AAh | 04AAh | 04ACh | 04ACh | 04AEh | 04AEh |
04B0h | 04B0h | 04B0h | 04B2h | 04B2h | 04B4h | 04B4h | 04B6h | 04B6h |
04B8h | 04B8h | 04B8h | 04BAh | 04BAh | 04BCh | 04BCh | 04BEh | 04BEh |
04C0h | 04C0h | 04C1h | 04C1h | 04C3h | 04C3h | 04C5h | 04C5h | 04C7h |
04C8h | 04C7h | 04C9h | 04C9h | 04CBh | 04CBh | 04CDh | 04CDh | 04C0h |
04D0h | 04D0h | 04D0h | 04D2h | 04D2h | 04D4h | 04D4h | 04D6h | 04D6h |
04D8h | 04D8h | 04D8h | 04DAh | 04DAh | 04DCh | 04DCh | 04DEh | 04DEh |
04E0h | 04E0h | 04E0h | 04E2h | 04E2h | 04E4h | 04E4h | 04E6h | 04E6h |
04E8h | 04E8h | 04E8h | 04EAh | 04EAh | 04ECh | 04ECh | 04EEh | 04EEh |
04F0h | 04F0h | 04F0h | 04F2h | 04F2h | 04F4h | 04F4h | 04F6h | 04F6h |
04F8h | 04F8h | 04F8h | 04FAh | 04FAh | 04FCh | 04FCh | 04FEh | 04FEh |
0500h | 0500h | 0500h | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h | 0510h | 0510h | 0512h | 0512h | 0514h | 0515h | 0516h | 0517h |
0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 0521h | 0522h | 0523h | 0524h | 0525h | 0526h | 0527h |
0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
0530h | 0530h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0538h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0540h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0548h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0550h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | 0557h |
0558h | 0558h | 0559h | 055Ah | 055Bh | 055Ch | 055Dh | 055Eh | 055Fh |
0560h | 0560h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0568h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0570h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0578h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0580h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | FFFFh |
0588h | 17F6h | 2C63h | 1D7Eh | 1D7Fh | 1D80h | 1D81h | 1D82h | 1D83h |
0590h | 1D84h | 1D85h | 1D86h | 1D87h | 1D88h | 1D89h | 1D8Ah | 1D8Bh |
0598h | 1D8Ch | 1D8Dh | 1D8Eh | 1D8Fh | 1D90h | 1D91h | 1D92h | 1D93h |
05A0h | 1D94h | 1D95h | 1D96h | 1D97h | 1D98h | 1D99h | 1D9Ah | 1D9Bh |
05A8h | 1D9Ch | 1D9Dh | 1D9Eh | 1D9Fh | 1DA0h | 1DA1h | 1DA2h | 1DA3h |
05B0h | 1DA4h | 1DA5h | 1DA6h | 1DA7h | 1DA8h | 1DA9h | 1DAAh | 1DABh |
05B8h | 1DACh | 1DADh | 1DAEh | 1DAFh | 1DB0h | 1DB1h | 1DB2h | 1DB3h |
05C0h | 1DB4h | 1DB5h | 1DB6h | 1DB7h | 1DB8h | 1DB9h | 1DBAh | 1DBBh |
05C8h | 1DBCh | 1DBDh | 1DBEh | 1DBFh | 1DC0h | 1DC1h | 1DC2h | 1DC3h |
05D0h | 1DC4h | 1DC5h | 1DC6h | 1DC7h | 1DC8h | 1DC9h | 1DCAh | 1DCBh |
05D8h | 1DCCh | 1DCDh | 1DCEh | 1DCFh | 1DD0h | 1DD1h | 1DD2h | 1DD3h |
05E0h | 1DD4h | 1DD5h | 1DD6h | 1DD7h | 1DD8h | 1DD9h | 1DDAh | 1DDBh |
05E8h | 1DDCh | 1DDDh | 1DDEh | 1DDFh | 1DE0h | 1DE1h | 1DE2h | 1DE3h |
05F0h | 1DE4h | 1DE5h | 1DE6h | 1DE7h | 1DE8h | 1DE9h | 1DEAh | 1DEBh |
05F8h | 1DECh | 1DEDh | 1DEEh | 1DEFh | 1DF0h | 1DF1h | 1DF2h | 1DF3h |
0600h | 1DF4h | 1DF5h | 1DF6h | 1DF7h | 1DF8h | 1DF9h | 1DFAh | 1DFBh |
0608h | 1DFCh | 1DFDh | 1DFEh | 1DFFh | 1E00h | 1E00h | 1E02h | 1E02h |
0610h | 1E04h | 1E04h | 1E06h | 1E06h | 1E08h | 1E08h | 1E0Ah | 1E0Ah |
0618h | 1E0Ch | 1E0Ch | 1E0Eh | 1E0Eh | 1E10h | 1E10h | 1E12h | 1E12h |
0620h | 1E14h | 1E14h | 1E16h | 1E16h | 1E18h | 1E18h | 1E1Ah | 1E1Ah |
0628h | 1E1Ch | 1E1Ch | 1E1Eh | 1E1Eh | 1E20h | 1E20h | 1E22h | 1E22h |
0630h | 1E24h | 1E24h | 1E26h | 1E26h | 1E28h | 1E28h | 1E2Ah | 1E2Ah |
0638h | 1E2Ch | 1E2Ch | 1E2Eh | 1E2Eh | 1E30h | 1E30h | 1E32h | 1E32h |
0640h | 1E34h | 1E34h | 1E36h | 1E36h | 1E38h | 1E38h | 1E3Ah | 1E3Ah |
0648h | 1E3Ch | 1E3Ch | 1E3Eh | 1E3Eh | 1E40h | 1E40h | 1E42h | 1E42h |
0650h | 1E44h | 1E44h | 1E46h | 1E46h | 1E48h | 1E48h | 1E4Ah | 1E4Ah |
0658h | 1E4Ch | 1E4Ch | 1E4Eh | 1E4Eh | 1E50h | 1E50h | 1E52h | 1E52h |
0660h | 1E54h | 1E54h | 1E56h | 1E56h | 1E58h | 1E58h | 1E5Ah | 1E5Ah |
0668h | 1E5Ch | 1E5Ch | 1E5Eh | 1E5Eh | 1E60h | 1E60h | 1E62h | 1E62h |
0670h | 1E64h | 1E64h | 1E66h | 1E66h | 1E68h | 1E68h | 1E6Ah | 1E6Ah |
0678h | 1E6Ch | 1E6Ch | 1E6Eh | 1E6Eh | 1E70h | 1E70h | 1E72h | 1E72h |
0680h | 1E74h | 1E74h | 1E76h | 1E76h | 1E78h | 1E78h | 1E7Ah | 1E7Ah |
0688h | 1E7Ch | 1E7Ch | 1E7Eh | 1E7Eh | 1E80h | 1E80h | 1E82h | 1E82h |
0690h | 1E84h | 1E84h | 1E86h | 1E86h | 1E88h | 1E88h | 1E8Ah | 1E8Ah |
0698h | 1E8Ch | 1E8Ch | 1E8Eh | 1E8Eh | 1E90h | 1E90h | 1E92h | 1E92h |
06A0h | 1E94h | 1E94h | 1E96h | 1E97h | 1E98h | 1E99h | 1E9Ah | 1E9Bh |
06A8h | 1E9Ch | 1E9Dh | 1E9Eh | 1E9Fh | 1EA0h | 1EA0h | 1EA2h | 1EA2h |
06B0h | 1EA4h | 1EA4h | 1EA6h | 1EA6h | 1EA8h | 1EA8h | 1EAAh | 1EAAh |
06B8h | 1EACh | 1EACh | 1EAEh | 1EAEh | 1EB0h | 1EB0h | 1EB2h | 1EB2h |
06C0h | 1EB4h | 1EB4h | 1EB6h | 1EB6h | 1EB8h | 1EB8h | 1EBAh | 1EBAh |
06C8h | 1EBCh | 1EBCh | 1EBEh | 1EBEh | 1EC0h | 1EC0h | 1EC2h | 1EC2h |
06D0h | 1EC4h | 1EC4h | 1EC6h | 1EC6h | 1EC8h | 1EC8h | 1ECAh | 1ECAh |
06D8h | 1ECCh | 1ECCh | 1ECEh | 1ECEh | 1ED0h | 1ED0h | 1ED2h | 1ED2h |
06E0h | 1ED4h | 1ED4h | 1ED6h | 1ED6h | 1ED8h | 1ED8h | 1EDAh | 1EDAh |
06E8h | 1EDCh | 1EDCh | 1EDEh | 1EDEh | 1EE0h | 1EE0h | 1EE2h | 1EE2h |
06F0h | 1EE4h | 1EE4h | 1EE6h | 1EE6h | 1EE8h | 1EE8h | 1EEAh | 1EEAh |
06F8h | 1EECh | 1EECh | 1EEEh | 1EEEh | 1EF0h | 1EF0h | 1EF2h | 1EF2h |
0700h | 1EF4h | 1EF4h | 1EF6h | 1EF6h | 1EF8h | 1EF8h | 1EFAh | 1EFBh |
0708h | 1EFCh | 1EFDh | 1EFEh | 1EFFh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0710h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0718h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0720h | 1F1Ch | 1F1Dh | 1F16h | 1F17h | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0728h | 1F1Ch | 1F1Dh | 1F1Eh | 1F1Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0730h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0738h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0740h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0748h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0750h | 1F4Ch | 1F4Dh | 1F46h | 1F47h | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0758h | 1F4Ch | 1F4Dh | 1F4Eh | 1F4Fh | 1F50h | 1F59h | 1F52h | 1F5Bh |
0760h | 1F54h | 1F5Dh | 1F56h | 1F5Fh | 1F58h | 1F59h | 1F5Ah | 1F5Bh |
0768h | 1F5Ch | 1F5Dh | 1F5Eh | 1F5Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0770h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0778h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1FBAh | 1FBBh | 1FC8h | 1FC9h |
0780h | 1FCAh | 1FCBh | 1FDAh | 1FDBh | 1FF8h | 1FF9h | 1FEAh | 1FEBh |
0788h | 1FFAh | 1FFBh | 1F7Eh | 1F7Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0790h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0798h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A0h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A8h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B0h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B8h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FB8h | 1FB9h | 1FB2h | 1FBCh |
07C0h | 1FB4h | 1FB5h | 1FB6h | 1FB7h | 1FB8h | 1FB9h | 1FBAh | 1FBBh |
07C8h | 1FBCh | 1FBDh | 1FBEh | 1FBFh | 1FC0h | 1FC1h | 1FC2h | 1FC3h |
07D0h | 1FC4h | 1FC5h | 1FC6h | 1FC7h | 1FC8h | 1FC9h | 1FCAh | 1FCBh |
07D8h | 1FC3h | 1FCDh | 1FCEh | 1FCFh | 1FD8h | 1FD9h | 1FD2h | 1FD3h |
07E0h | 1FD4h | 1FD5h | 1FD6h | 1FD7h | 1FD8h | 1FD9h | 1FDAh | 1FDBh |
07E8h | 1FDCh | 1FDDh | 1FDEh | 1FDFh | 1FE8h | 1FE9h | 1FE2h | 1FE3h |
07F0h | 1FE4h | 1FECh | 1FE6h | 1FE7h | 1FE8h | 1FE9h | 1FEAh | 1FEBh |
07F8h | 1FECh | 1FEDh | 1FEEh | 1FEFh | 1FF0h | 1FF1h | 1FF2h | 1FF3h |
0800h | 1FF4h | 1FF5h | 1FF6h | 1FF7h | 1FF8h | 1FF9h | 1FFAh | 1FFBh |
0808h | 1FF3h | 1FFDh | 1FFEh | 1FFFh | 2000h | 2001h | 2002h | 2003h |
0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
0818h | 200Ch | 200Dh | 200Eh | 200Fh | 2010h | 2011h | 2012h | 2013h |
0820h | 2014h | 2015h | 2016h | 2017h | 2018h | 2019h | 201Ah | 201Bh |
0828h | 201Ch | 201Dh | 201Eh | 201Fh | 2020h | 2021h | 2022h | 2023h |
0830h | 2024h | 2025h | 2026h | 2027h | 2028h | 2029h | 202Ah | 202Bh |
0838h | 202Ch | 202Dh | 202Eh | 202Fh | 2030h | 2031h | 2032h | 2033h |
0840h | 2034h | 2035h | 2036h | 2037h | 2038h | 2039h | 203Ah | 203Bh |
0848h | 203Ch | 203Dh | 203Eh | 203Fh | 2040h | 2041h | 2042h | 2043h |
0850h | 2044h | 2045h | 2046h | 2047h | 2048h | 2049h | 204Ah | 204Bh |
0858h | 204Ch | 204Dh | 204Eh | 204Fh | 2050h | 2051h | 2052h | 2053h |
0860h | 2054h | 2055h | 2056h | 2057h | 2058h | 2059h | 205Ah | 205Bh |
0868h | 205Ch | 205Dh | 205Eh | 205Fh | 2060h | 2061h | 2062h | 2063h |
0870h | 2064h | 2065h | 2066h | 2067h | 2068h | 2069h | 206Ah | 206Bh |
0878h | 206Ch | 206Dh | 206Eh | 206Fh | 2070h | 2071h | 2072h | 2073h |
0880h | 2074h | 2075h | 2076h | 2077h | 2078h | 2079h | 207Ah | 207Bh |
0888h | 207Ch | 207Dh | 207Eh | 207Fh | 2080h | 2081h | 2082h | 2083h |
0890h | 2084h | 2085h | 2086h | 2087h | 2088h | 2089h | 208Ah | 208Bh |
0898h | 208Ch | 208Dh | 208Eh | 208Fh | 2090h | 2091h | 2092h | 2093h |
08A0h | 2094h | 2095h | 2096h | 2097h | 2098h | 2099h | 209Ah | 209Bh |
08A8h | 209Ch | 209Dh | 209Eh | 209Fh | 20A0h | 20A1h | 20A2h | 20A3h |
08B0h | 20A4h | 20A5h | 20A6h | 20A7h | 20A8h | 20A9h | 20AAh | 20ABh |
08B8h | 20ACh | 20ADh | 20AEh | 20AFh | 20B0h | 20B1h | 20B2h | 20B3h |
08C0h | 20B4h | 20B5h | 20B6h | 20B7h | 20B8h | 20B9h | 20BAh | 20BBh |
08C8h | 20BCh | 20BDh | 20BEh | 20BFh | 20C0h | 20C1h | 20C2h | 20C3h |
08D0h | 20C4h | 20C5h | 20C6h | 20C7h | 20C8h | 20C9h | 20CAh | 20CBh |
08D8h | 20CCh | 20CDh | 20CEh | 20CFh | 20D0h | 20D1h | 20D2h | 20D3h |
08E0h | 20D4h | 20D5h | 20D6h | 20D7h | 20D8h | 20D9h | 20DAh | 20DBh |
08E8h | 20DCh | 20DDh | 20DEh | 20DFh | 20E0h | 20E1h | 20E2h | 20E3h |
08F0h | 20E4h | 20E5h | 20E6h | 20E7h | 20E8h | 20E9h | 20EAh | 20EBh |
08F8h | 20ECh | 20EDh | 20EEh | 20EFh | 20F0h | 20F1h | 20F2h | 20F3h |
0900h | 20F4h | 20F5h | 20F6h | 20F7h | 20F8h | 20F9h | 20FAh | 20FBh |
0908h | 20FCh | 20FDh | 20FEh | 20FFh | 2100h | 2101h | 2102h | 2103h |
0910h | 2104h | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 2113h |
0920h | 2114h | 2115h | 2116h | 2117h | 2118h | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 2120h | 2121h | 2122h | 2123h |
0930h | 2124h | 2125h | 2126h | 2127h | 2128h | 2129h | 212Ah | 212Bh |
0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131h | 2132h | 2133h |
0940h | 2134h | 2135h | 2136h | 2137h | 2138h | 2139h | 213Ah | 213Bh |
0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
0950h | 2144h | 2145h | 2146h | 2147h | 2148h | 2149h | 214Ah | 214Bh |
0958h | 214Ch | 214Dh | 2132h | 214Fh | 2150h | 2151h | 2152h | 2153h |
0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
0968h | 215Ch | 215Dh | 215Eh | 215Fh | 2160h | 2161h | 2162h | 2163h |
0970h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160h | 2161h | 2162h | 2163h |
0980h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 24BBh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 0746h | 2C00h |
09B0h | 2C01h | 2C02h | 2C03h | 2C04h | 2C05h | 2C06h | 2C07h | 2C08h |
09B8h | 2C09h | 2C0Ah | 2C0Bh | 2C0Ch | 2C0Dh | 2C0Eh | 2C0Fh | 2C10h |
09C0h | 2C11h | 2C12h | 2C13h | 2C14h | 2C15h | 2C16h | 2C17h | 2C18h |
09C8h | 2C19h | 2C1Ah | 2C1Bh | 2C1Ch | 2C1Dh | 2C1Eh | 2C1Fh | 2C20h |
09D0h | 2C21h | 2C22h | 2C23h | 2C24h | 2C25h | 2C26h | 2C27h | 2C28h |
09D8h | 2C29h | 2C2Ah | 2C2Bh | 2C2Ch | 2C2Dh | 2C2Eh | 2C5Fh | 2C60h |
09E0h | 2C60h | 2C62h | 2C63h | 2C64h | 2C65h | 2C66h | 2C67h | 2C67h |
09E8h | 2C69h | 2C69h | 2C6Bh | 2C6Bh | 2C6Dh | 2C6Eh | 2C6Fh | 2C70h |
09F0h | 2C71h | 2C72h | 2C73h | 2C74h | 2C75h | 2C75h | 2C77h | 2C78h |
09F8h | 2C79h | 2C7Ah | 2C7Bh | 2C7Ch | 2C7Dh | 2C7Eh | 2C7Fh | 2C80h |
0A00h | 2C80h | 2C82h | 2C82h | 2C84h | 2C84h | 2C86h | 2C86h | 2C88h |
0A08h | 2C88h | 2C8Ah | 2C8Ah | 2C8Ch | 2C8Ch | 2C8Eh | 2C8Eh | 2C90h |
0A10h | 2C90h | 2C92h | 2C92h | 2C94h | 2C94h | 2C96h | 2C96h | 2C98h |
0A18h | 2C98h | 2C9Ah | 2C9Ah | 2C9Ch | 2C9Ch | 2C9Eh | 2C9Eh | 2CA0h |
0A20h | 2CA0h | 2CA2h | 2CA2h | 2CA4h | 2CA4h | 2CA6h | 2CA6h | 2CA8h |
0A28h | 2CA8h | 2CAAh | 2CAAh | 2CACh | 2CACh | 2CAEh | 2CAEh | 2CB0h |
0A30h | 2CB0h | 2CB2h | 2CB2h | 2CB4h | 2CB4h | 2CB6h | 2CB6h | 2CB8h |
0A38h | 2CB8h | 2CBAh | 2CBAh | 2CBCh | 2CBCh | 2CBEh | 2CBEh | 2CC0h |
0A40h | 2CC0h | 2CC2h | 2CC2h | 2CC4h | 2CC4h | 2CC6h | 2CC6h | 2CC8h |
0A48h | 2CC8h | 2CCAh | 2CCAh | 2CCCh | 2CCCh | 2CCEh | 2CCEh | 2CD0h |
0A50h | 2CD0h | 2CD2h | 2CD2h | 2CD4h | 2CD4h | 2CD6h | 2CD6h | 2CD8h |
0A58h | 2CD8h | 2CDAh | 2CDAh | 2CDCh | 2CDCh | 2CDEh | 2CDEh | 2CE0h |
0A60h | 2CE0h | 2CE2h | 2CE2h | 2CE4h | 2CE5h | 2CE6h | 2CE7h | 2CE8h |
0A68h | 2CE9h | 2CEAh | 2CEBh | 2CECh | 2CEDh | 2CEEh | 2CEFh | 2CF0h |
0A70h | 2CF1h | 2CF2h | 2CF3h | 2CF4h | 2CF5h | 2CF6h | 2CF7h | 2CF8h |
0A78h | 2CF9h | 2CFAh | 2CFBh | 2CFCh | 2CFDh | 2CFEh | 2CFFh | 10A0h |
0A80h | 10A1h | 10A2h | 10A3h | 10A4h | 10A5h | 10A6h | 10A7h | 10A8h |
0A88h | 10A9h | 10AAh | 10ABh | 10ACh | 10ADh | 10AEh | 10AFh | 10B0h |
0A90h | 10B1h | 10B2h | 10B3h | 10B4h | 10B5h | 10B6h | 10B7h | 10B8h |
0A98h | 10B9h | 10BAh | 10BBh | 10BCh | 10BDh | 10BEh | 10BFh | 10C0h |
0AA0h | 10C1h | 10C2h | 10C3h | 10C4h | 10C5h | FFFFh | D21Bh | FF21h |
0AA8h | FF22h | FF23h | FF24h | FF25h | FF26h | FF27h | FF28h | FF29h |
0AB0h | FF2Ah | FF2Bh | FF2Ch | FF2Dh | FF2Eh | FF2Fh | FF30h | FF31h |
0AB8h | FF32h | FF33h | FF34h | FF35h | FF36h | FF37h | FF38h | FF39h |
0AC0h | FF3Ah | FF5Bh | FF5Ch | FF5Dh | FF5Eh | FF5Fh | FF60h | FF61h |
0AC8h | FF62h | FF63h | FF64h | FF65h | FF66h | FF67h | FF68h | FF69h |
0AD0h | FF6Ah | FF6Bh | FF6Ch | FF6Dh | FF6Eh | FF6Fh | FF70h | FF71h |
0AD8h | FF72h | FF73h | FF74h | FF75h | FF76h | FF77h | FF78h | FF79h |
0AE0h | FF7Ah | FF7Bh | FF7Ch | FF7Dh | FF7Eh | FF7Fh | FF80h | FF81h |
0AE8h | FF82h | FF83h | FF84h | FF85h | FF86h | FF87h | FF88h | FF89h |
0AF0h | FF8Ah | FF8Bh | FF8Ch | FF8Dh | FF8Eh | FF8Fh | FF90h | FF91h |
0AF8h | FF92h | FF93h | FF94h | FF95h | FF96h | FF97h | FF98h | FF99h |
0B00h | FF9Ah | FF9Bh | FF9Ch | FF9Dh | FF9Eh | FF9Fh | FFA0h | FFA1h |
0B08h | FFA2h | FFA3h | FFA4h | FFA5h | FFA6h | FFA7h | FFA8h | FFA9h |
0B10h | FFAAh | FFABh | FFACh | FFADh | FFAEh | FFAFh | FFB0h | FFB1h |
0B18h | FFB2h | FFB3h | FFB4h | FFB5h | FFB6h | FFB7h | FFB8h | FFB9h |
0B20h | FFBAh | FFBBh | FFBCh | FFBDh | FFBEh | FFBFh | FFC0h | FFC1h |
0B28h | FFC2h | FFC3h | FFC4h | FFC5h | FFC6h | FFC7h | FFC8h | FFC9h |
0B30h | FFCAh | FFCBh | FFCCh | FFCDh | FFCEh | FFCFh | FFD0h | FFD1h |
0B38h | FFD2h | FFD3h | FFD4h | FFD5h | FFD6h | FFD7h | FFD8h | FFD9h |
0B40h | FFDAh | FFDBh | FFDCh | FFDDh | FFDEh | FFDFh | FFE0h | FFE1h |
0B48h | FFE2h | FFE3h | FFE4h | FFE5h | FFE6h | FFE7h | FFE8h | FFE9h |
0B50h | FFEAh | FFEBh | FFECh | FFEDh | FFEEh | FFEFh | FFF0h | FFF1h |
0B58h | FFF2h | FFF3h | FFF4h | FFF5h | FFF6h | FFF7h | FFF8h | FFF9h |
0B60h | FFFAh | FFFBh | FFFCh | FFFDh | FFFEh | FFFFh |
7.3 Verzeichniseintrag für Volumenbezeichnungen
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 von Volume Label-Verzeichniseinträgen liegt zwischen 0 und 1.
Tabelle 26 Volume Label DirectoryEntry-Struktur
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.3.1 definiert seinen Inhalt. |
CharacterCount | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.3.2 definiert seinen Inhalt. |
VolumeLabel | 2 | 22 | Dieses Feld ist obligatorisch und Abschnitt 7.3.3 definiert seinen Inhalt. |
Reserviert | 24 | 8 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
7.3.1 EntryType Field
Das Feld "EntryType" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" bereitgestellt wird (siehe Abschnitt 6.3.1).
7.3.1.1 TypeCode Field
Das Feld "TypeCode" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" bereitgestellt wird (siehe Abschnitt 6.3.1.1).
Für den Verzeichniseintrag "Volume Label" ist der gültige Wert für dieses Feld 3.
7.3.1.2 TypeImportance Field
Das Feld "TypeImportance" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" bereitgestellt wird (siehe Abschnitt 6.3.1.2).
Für den Verzeichniseintrag "Volumenbezeichnung" ist der gültige Wert für dieses Feld 0.
7.3.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.3).
7.3.1.4 InUse Field
Das InUse-Feld entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" bereitgestellt wird (siehe Abschnitt 6.3.1.4).
7.3.2 CharacterCount Field
Das ZeichenCount-Feld enthält die Länge der Unicode-Zeichenfolge, die das VolumeLabel-Feld enthält.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens 0, was bedeutet, dass die Unicode-Zeichenfolge 0 Zeichen lang ist (das entspricht keiner Volumenbezeichnung)
Am meisten 11, was bedeutet, dass die Unicode-Zeichenfolge 11 Zeichen lang ist
7.3.3 VolumeLabel Field
Das VolumeLabel-Feld enthält eine Unicode-Zeichenfolge, die den benutzerfreundlichen Namen des Volumes darstellt. Das VolumeLabel-Feld verfügt über dieselbe Gruppe ungültiger Zeichen wie das Dateiname-Feld des Verzeichniseintrags "Dateiname" (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). Wenn ein Dateiverzeichniseintrag gültig sein soll, muss genau ein Dateierweiterungsverzeichniseintrag und mindestens ein Dateiname-Verzeichniseintrag unmittelbar dem Dateiverzeichniseintrag folgen (siehe Abschnitt 7.6 und Abschnitt 7.7).
Tabelle 27 DateiverzeichnisEntry
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.4.1 definiert seinen Inhalt. |
SecondaryCount | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.4.2 definiert seinen Inhalt. |
SetChecksum | 2 | 2 | Dieses Feld ist obligatorisch und Abschnitt 7.4.3 definiert seinen Inhalt. |
FileAttributes | 4 | 2 | Dieses Feld ist obligatorisch und Abschnitt 7.4.4 definiert seinen Inhalt. |
Reserved1 | 6 | 2 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
CreateTimestamp | 8 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.4.5 a> definiert seinen Inhalt. |
LastModifiedTimestamp | 12 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.4.6 definiert seinen Inhalt. |
LastAccessedTimestamp | 16 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.4.7 definiert seinen Inhalt. |
Create10msIncrement | 20 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.4.5 a> definiert seinen Inhalt. |
LastModified10msIncrement | 21 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.4.6 definiert seinen Inhalt. |
CreateUtcOffset | 22 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.4.5 a> definiert seinen Inhalt. |
LastModifiedUtcOffset | 23 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.4.6 definiert seinen Inhalt. |
LastAccessedUtcOffset | 24 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.4.7 definiert seinen Inhalt. |
Reserved2 | 25 | 7 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
7.4.1 EntryType Field
Das Feld "EntryType" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1).
7.4.1.1 TypeCode Field
Das Feld "TypeCode" muss der Definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1.1).
Für einen Dateiverzeichniseintrag ist der gültige Wert für dieses Feld 5.
7.4.1.2 TypeImportance Field
Das Feld "TypeImportance" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1.2).
Für einen Dateiverzeichniseintrag ist der gültige Wert für dieses Feld 0.
7.4.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.3).
7.4.1.4 InUse Field
Das Feld InUse entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.4).
7.4.2 SecondaryCount Field
Das Feld "SecondaryCount" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.2).
7.4.3 SetChecksum Field
Das Feld "SetChecksum" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.3).3).
7.4.4 FileAttributes Field
Das Feld "FileAttributes" 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 der 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 der Inhalt ist reserviert. |
7.4.5 CreateTimestamp, Create10msIncrement und CreateUtcOffset-Felder
In Kombination müssen die Felder "CreateTimestamp" und "CreateTime10msIncrement" das lokale Datum und die Uhrzeit der Erstellung der angegebenen Datei/des Verzeichnisses beschreiben. Das Feld CreateUtcOffset beschreibt den Offset des lokalen Datums und der Uhrzeit von UTC. Die Implementierungen legen diese Felder auf die Erstellung des angegebenen Verzeichniseintragssatzes fest.
Diese Felder entsprechen den Definitionen der Felder "Timestamp", "10msIncrement" und "UtcOffset" (siehe Abschnitt 7.4.8, Abschnitt 7.4.9 und Abschnitt 7.4.10).
7.4.6 LastModifiedTimestamp, LastModified10msIncrement und LastModifiedUtcOffset Fields
In Kombination werden die Felder "LastModifiedTimestamp" und "LastModifiedTime10msIncrement" das lokale Datum und die Uhrzeit des Inhalts eines der Cluster beschreiben, die dem angegebenen Eintrag der Stream-Erweiterung zugeordnet sind. Das Feld "LastModifiedUtcOffset" beschreibt den Offset des lokalen Datums und der Uhrzeit von UTC. Die Implementierungen müssen die folgenden Felder aktualisieren:
Nachdem Sie den Inhalt eines der Cluster geändert haben, die dem angegebenen Verzeichniseintrag der Stream-Erweiterung zugeordnet sind (mit Ausnahme von Inhalten, die über den Punkt hinausgehen, beschreibt das Feld ValidDataLength)
Beim Ändern der Werte der Felder "ValidDataLength" oder "DataLength"
Diese Felder entsprechen den Definitionen der Felder "Timestamp", "10msIncrement" und "UtcOffset" (siehe Abschnitt 7.4.8, Abschnitt 7.4.9 und Abschnitt 7.4.10).
7.4.7 LastAccessedTimestamp- und LastAccessedUtcOffset-Felder
Das Feld "LastAccessedTimestamp" beschreibt das lokale Datum und die Uhrzeit, zu der der Inhalt eines der Cluster, die dem angegebenen Eintrag der Streamerweiterung zugeordnet sind, zuletzt zugegriffen wurde. Das Feld "LastAccessedUtcOffset" beschreibt den Offset des lokalen Datums und der Uhrzeit von UTC. Die Implementierungen müssen die folgenden Felder aktualisieren:
Nachdem Sie den Inhalt eines der Cluster geändert haben, die dem angegebenen Stream Extension-Verzeichniseintrag zugeordnet sind (mit Ausnahme von Inhalten, die über das ValidDataLength hinausgehen)
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 Stream Extension-Verzeichniseintrag zugeordnet sind.
Diese Felder entsprechen den Definitionen der Felder "Timestamp" und "UtcOffset" (siehe Abschnitt 7.4.8 und Abschnitt 7.4.10).
7.4.8 Zeitstempelfelder
Zeitstempelfelder beschreiben sowohl das lokale Datum als auch die Uhrzeit bis zu einer zwei sekundenigen Auflösung (siehe Tabelle 29).
Tabelle 29 Zeitstempelfeldstruktur
Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
DoubleSeconds | 0 | 5 | Dieses Feld ist obligatorisch und Abschnitt 7.4.8.1 definiert seinen Inhalt. |
Minute | 5 | 6 | Dieses Feld ist obligatorisch und Abschnitt 7.4.8.2 definiert seinen Inhalt. |
Stunde | 11 | 5 | Dieses Feld ist obligatorisch und Abschnitt 7.4.8.3 definiert seinen Inhalt. |
Tag | 16 | 5 | Dieses Feld ist obligatorisch und Abschnitt 7.4.8.4 definiert seinen Inhalt. |
Month (Monat) | 21 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.4.8.5 definiert seinen Inhalt. |
Jahr | 25 | 7 | Dieses Feld ist obligatorisch und Abschnitt 7.4.8.6 definiert seinen Inhalt. |
7.4.8.1 DoubleSeconds Field
Das Feld "DoubleSeconds" beschreibt den Sekundenteil des Zeitstempelfelds in zwei Sekunden.
Der gültige Wertebereich für dieses Feld lautet:
0, das 0 Sekunden darstellt
29, die 58 Sekunden darstellt
7.4.8.2 Minuten Feld
Das Feld "Minute" beschreibt den Minutenteil des Zeitstempelfelds.
Der gültige Wertebereich für dieses Feld lautet:
0, der 0 Minuten darstellt
59, die 59 Minuten darstellt
7.4.8.3 StundenFeld
Das Feld "Stunde" beschreibt den Stundenbereich des Zeitstempelfelds.
Der gültige Wertebereich für dieses Feld lautet:
0, der 00:00 Stunden darstellt
23, das 23:00 Stunden darstellt
7.4.8.4 Tag Feld
Das Feld "Tag" beschreibt den Tagesteil des Zeitstempelfelds.
Der gültige Wertebereich für dieses Feld lautet:
1, was der erste Tag des angegebenen Monats ist
Der letzte Tag des angegebenen Monats (der angegebene Monat definiert die Anzahl der gültigen Tage)
Feld "7.4.8.5 Monat"
Das Feld "Monat" beschreibt den Monatsteil des Zeitstempelfelds.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens 1, der Januar darstellt
Am meisten 12, der Dezember darstellt
Feld 7.4.8.6 Jahr
Das Feld "Jahr" beschreibt den Jahresteil des Zeitstempelfelds relativ zum Jahr 1980. Dieses Feld stellt das Jahr 1980 mit dem Wert 0 und dem Jahr 2107 mit dem Wert 127 dar.
Alle möglichen Werte für dieses Feld sind gültig.
7.4.9 10msIncrement-Felder
10msIncrement-Felder stellen zusätzliche Zeitauflösungen für ihre entsprechenden Zeitstempelfelder in zehn Millisekunden-Multiples bereit.
Der gültige Wertebereich für diese Felder lautet:
Mindestens 0, das 0 Millisekunden darstellt
Am meisten 199, das 1990 Millisekunden darstellt
7.4.10 UtcOffset-Felder
UtcOffset-Felder (siehe Tabelle 30) beschreiben den Offset von UTC auf das lokale Datum und die Uhrzeit der entsprechenden Timestamp- und 10msIncrement-Felder. Der Offset von UTC auf das lokale Datum und die Uhrzeit umfasst die Auswirkungen von Zeitzonen und anderen Anpassungen der Datumszeit, z. B. Sommerzeitänderungen und Sommerzeitänderungen.
Tabelle 30 UtcOffset-Feldstruktur
Feldname | Offset (bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
OffsetFromUtc | 0 | 7 | Dieses Feld ist obligatorisch und Abschnitt 7.4.10.1definiert seinen Inhalt. |
OffsetValid | 7 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.4.10.2 definiert seinen Inhalt. |
7.4.10.1 OffsetFromUtc Field
Das Feld "OffsetFromUtc" beschreibt den Offset von UTC des lokalen Datums und der Uhrzeit der zugehörigen Timestamp- und 10msIncrement-Felder. Dieses Feld beschreibt den Offset von UTC in 15 Minuten Intervallen (siehe Tabelle 31).
Tabelle 31 Bedeutung der Werte des OffsetFromUtc-Felds
Wert | Signiertes Dezimaläquivalent | 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 |
. . . |
. . . |
. . . |
41h | -63 | Lokales Datum und Uhrzeit ist UTC – 15:45 |
40h | -64 | Lokales Datum und Uhrzeit ist UTC – 16:00 |
Wie die obige Tabelle angibt, sind alle möglichen Werte für dieses Feld gültig. Implementierungen sollten jedoch nur den Wert 00h für dieses Feld aufzeichnen, wenn:
Lokales Datum und Uhrzeit sind tatsächlich identisch mit UTC, in diesem Fall ist der Wert des OffsetValid-Felds 1.
Lokales Datum und Uhrzeit sind nicht bekannt, in diesem Fall ist der Wert des Felds OffsetValid 1 und Implementierungen sollten UTC als lokales Datum und Uhrzeit betrachten.
UTC ist nicht bekannt, in diesem Fall muss der Wert des OffsetValid-Felds 0 sein.
Wenn der lokale Datums- und Uhrzeitversatz von UTC kein Vielfaches von 15 Minuten Intervallen ist, werden die Implementierungen im Feld OffsetFromUtc 00h aufzeichnen und erwägen, UTC als lokales Datum und Uhrzeit zu betrachten.
7.4.10.2 OffsetValid Field
Das Feld OffsetValid beschreibt, ob der Inhalt des OffsetFromUtc-Felds gültig ist oder nicht, wie folgt:
0, was bedeutet, dass der Inhalt des OffsetFromUtc-Felds ungültig ist.
und muss 00h sein
1, was bedeutet, dass der Inhalt des OffsetFromUtc-Felds gültig ist.
Implementierungen sollten dieses Feld nur 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, werden die Zeitstempel- und 10msIncrement-Felder mit demselben UTC-Offset wie das aktuelle lokale Datum und die aktuelle Uhrzeit behandelt.
7.5 Volume-GUID-Verzeichniseintrag
Der Volume-GUID-Verzeichniseintrag enthält eine GUID, mit der Implementierungen eindeutig und programmgesteuert Volumes unterscheiden können. Die Volume-GUID ist als gutartige primärer Verzeichniseintrag im Stammverzeichnis vorhanden (siehe Tabelle 32). Die gültige Anzahl von Volume-GUID-Verzeichniseinträgen liegt zwischen 0 und 1.
Tabelle 32 Volume GUID DirectoryEntry
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.5.1 definiert seinen Inhalt. |
SecondaryCount | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.5.2 definiert seinen Inhalt. |
SetChecksum | 2 | 2 | Dieses Feld ist obligatorisch und Abschnitt 7.5.3 definiert seinen Inhalt. |
GeneralPrimaryFlags | 4 | 2 | Dieses Feld ist obligatorisch und Abschnitt 7.5.4 definiert seinen Inhalt. |
VolumeGuid | 6 | 16 | Dieses Feld ist obligatorisch und Abschnitt 7.5.5 definiert seinen Inhalt. |
Reserviert | 22 | 10 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
7.5.1 EntryType Field
Das Feld "EntryType" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1).
7.5.1.1 TypeCode Field
Das Feld "TypeCode" muss der Definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1.1).
Für den Volume-GUID-Verzeichniseintrag ist der gültige Wert für dieses Feld 0.
7.5.1.2 TypeImportance Field
Das Feld "TypeImportance" entspricht der Definition, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1.2).
Für den Volume-GUID-Verzeichniseintrag ist der gültige Wert für dieses Feld 1.
7.5.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.3).
7.5.1.4 InUse Field
Das Feld InUse entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.4).
7.5.2 SecondaryCount Field
Das Feld "SecondaryCount" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.2).
Für den Volume-GUID-Verzeichniseintrag ist der gültige Wert für dieses Feld 0.
7.5.3 SetChecksum Field
Das Feld "SetChecksum" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.3).3).
7.5.4 GeneralPrimaryFlags Field
Das Feld "GeneralPrimaryFlags" entspricht der definition, die in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.4) angegeben ist und definiert den Inhalt des zu reservierten CustomDefined-Felds.
7.5.4.1 AllocationPossible Field
Das Feld "AllocationPossible" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.4.1).
Für den Volume-GUID-Verzeichniseintrag ist der gültige Wert für dieses Feld 0.
7.5.4.2 NoFatChain Field
Das Feld "NoFatChain" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.4.2).
7.5.5 VolumeGuid Field
Das Feld "VolumeGuid" enthält eine GUID, die das angegebene Volume eindeutig identifiziert.
Alle möglichen Werte für dieses Feld sind gültig, mit Ausnahme der NULL-GUID, die .{00000000-0000-0000-0000-000000000000}
7.6 Verzeichniseintrag der Streamerweiterung
Der Eintrag "Stream Extension"-Verzeichnis ist ein wichtiger sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 33). Die gültige Anzahl der Verzeichniseinträge der Streamerweiterung in einem Dateiverzeichniseintragssatz ist 1. Darüber hinaus ist dieser Verzeichniseintrag nur gültig, wenn er unmittelbar dem Dateiverzeichniseintrag folgt.
Tabelle 33 Stream Extension DirectoryEntry
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 7.6.1 definiert seinen Inhalt. |
GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.6.2 definiert seinen Inhalt. |
Reserved1 | 2 | 1 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
NameLength | 3 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.6.3 definiert seinen Inhalt. |
NameHash | 4 | 2 | Dieses Feld ist obligatorisch und Abschnitt 7.6.4 definiert seinen Inhalt. |
Reserved2 | 6 | 2 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
ValidDataLength | 8 | 8 | Dieses Feld ist obligatorisch und Abschnitt 7.6.5 definiert seinen Inhalt. |
Reserviert3 | 16 | 4 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.6.6 definiert seinen Inhalt. |
DataLength | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 7.6.7 definiert seinen Inhalt. |
7.6.1 EntryType Field
Das EntryType-Feld entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1).
7.6.1.1 TypeCode Field
Das Feld "TypeCode" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.1).
Für den Eintrag "Stream-Erweiterung" ist der gültige Wert für dieses Feld 0.
7.6.1.2 TypeImportance Field
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.2).
Für den Eintrag "Stream-Erweiterung" ist der gültige Wert für dieses Feld 0.
7.6.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.3).
7.6.1.4 InUse Field
Das InUse-Feld entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.4).
7.6.2 GeneralSecondaryFlags Field
Das Feld "GeneralSecondaryFlags" entspricht der Definition, die in der vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2) bereitgestellt wird, und definiert den Inhalt des zu reservierten CustomDefined-Felds.
7.6.2.1 AllocationPossible Field
Das Feld "AllocationPossible" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2.1).
Für den Eintrag "Stream-Erweiterungsverzeichnis" ist der gültige Wert für dieses Feld 1.
7.6.2.2 NoFatChain Field
Das Feld "NoFatChain" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2.2).
7.6.3 NameLength Field
Das Feld "NameLength" enthält die Länge der Unicode-Zeichenfolge, die die nachfolgenden Dateinameneinträge (siehe Abschnitt 7.7) zusammen enthalten.
Der gültige Wertebereich für dieses Feld lautet:
Mindestens 1, was die kürzeste mögliche Dateiname ist
Am meisten 255, was die 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 Field
Das Feld "NameHash" enthält einen 2-Byte-Hash (siehe Abbildung 4) des nach oben genannten Dateinamens. Dadurch können Implementierungen einen schnellen Vergleich durchführen, wenn Sie nach einem Namen nach einer Datei suchen. Wichtig ist, dass der NameHash eine sichere Überprüfung einer Übereinstimmung bereitstellt. Implementierungen überprüfen alle NamenHash-Übereinstimmungen mit einem Vergleich des nach oben beschriebenen Dateinamens.
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 Field
Das Feld "ValidDataLength" beschreibt, wie weit die Datendaten des Datenstroms geschrieben wurden. Implementierungen müssen dieses Feld aktualisieren, da sie Daten weiter in den Datenstrom schreiben. Auf dem Speichermedium wird 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, entspricht der einzige gültige Wert für dieses Feld dem Wert des DataLength-Felds. Andernfalls lautet der Bereich der gültigen Werte für dieses Feld:
Mindestens 0, was bedeutet, dass keine Benutzerdaten in den Datenstrom geschrieben wurden.
Am meisten DataLength, was bedeutet, dass Benutzerdaten in die gesamte Länge des Datenstroms geschrieben wurden.
7.6.6 FirstCluster Field
Das Feld "FirstCluster" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.3).
Dieses Feld enthält den Index des ersten Clusters des Datenstroms, der die Benutzerdaten hostt.
7.6.7 DataLength Field
Das Feld "DataLength" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.4).
Wenn der entsprechende Dateiverzeichniseintrag ein Verzeichnis beschreibt, ist der gültige Wert für dieses Feld die gesamte Größe der zugeordneten Zuordnung, in Bytes, die möglicherweise 0 sein kann. Für Verzeichnisse ist der Maximale Wert für dieses Feld 256 MB.
7.7 Dateinamenverzeichniseintrag
Dateiname-Verzeichniseinträge sind wichtige sekundäre Verzeichniseinträge in Dateiverzeichniseintragssätzen (siehe Tabelle 34). Die gültige Anzahl von Dateinamenverzeichniseinträgen in einem Dateiverzeichniseintragssatz ist NameLength / 15, auf die nächste ganze Zahl gerundet. Darüber hinaus sind Verzeichniseinträge des Dateinamens nur gültig, wenn sie sofort dem Stream-Erweiterungsverzeichniseintrag als fortlaufende Datenreihe folgen. Dateinamenverzeichniseinträge werden kombiniert, um den Dateinamen für den Dateiverzeichniseintragssatz zu bilden.
Alle untergeordneten Elemente eines bestimmten Verzeichniseintrags verfügen über eindeutige Verzeichniseintragssätze. Das heißt, es kann keine doppelten Datei- oder Verzeichnisnamen nach der Aktualisierung innerhalb eines Verzeichnisses vorhanden sein.
Tabelle 34 Dateiname DirectoryEntry
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.7.1 definiert seinen Inhalt. |
GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.7.2 definiert seinen Inhalt. |
Dateiname | 2 | 30 | Dieses Feld ist obligatorisch und Abschnitt 7.7.3 definiert seinen Inhalt. |
7.7.1 EntryType Field
Das EntryType-Feld entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1).
7.7.1.1 TypeCode Field
Das Feld "TypeCode" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.1).
Für den Verzeichniseintrag "Dateiname" ist der gültige Wert für dieses Feld 1.
7.7.1.2 TypeImportance Field
Das Feld "TypeImportance" entspricht der definition, die in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.2) angegeben ist.
Für den Verzeichniseintrag "Dateiname" ist der gültige Wert für dieses Feld 0.
7.7.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.3).
7.7.1.4 InUse Field
Das Feld "InUse" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.4.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) angegeben ist, und definiert den Inhalt des zu reservierten CustomDefined-Felds.
7.7.2.1 AllocationPossible Field
Das Feld "AllocationPossible" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2.1).
Für den Eintrag "Stream Extension"-Verzeichnis ist der gültige Wert für dieses Feld 0.
7.7.2.2 NoFatChain Field
Das Feld "NoFatChain" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.2.2).
7.7.3 FileName Field
Das Feld "FileName" enthält eine Unicode-Zeichenfolge, die ein Teil des Dateinamens ist. In der Reihenfolge dateiname-Verzeichniseinträge in einem Dateiverzeichniseintragssatz sind FileName-Felder verkettet, um den Dateinamen für den Dateiverzeichniseintragssatz zu bilden. Angesichts der Länge des Felds "FileName", "15 Zeichen" und der maximalen Anzahl von Verzeichniseinträgen des Dateinamens 17, beträgt die maximale Länge des endgültigen, verketteten Dateinamens 255.
Der verkettete Dateiname hat denselben Satz illegaler 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 Dateinamezeichen
Zeichencode | Beschreibung | Zeichencode | Beschreibung | Zeichencode | Beschreibung |
---|---|---|---|---|---|
0000h | Steuerelementcode | 0001h | Steuerelementcode | 0002h | Steuerelementcode |
0003h | Steuerelementcode | 0004h | Steuerelementcode | 0005h | Steuerelementcode |
0006h | Steuerelementcode | 0007h | Steuerelementcode | 0008h | Steuerelementcode |
0009h | Steuerelementcode | 000Ah | Steuerelementcode | 000Bh | Steuerelementcode |
000Ch | Steuerelementcode | 000Dh | Steuerelementcode | 000Eh | Steuerelementcode |
000Fh | Steuerelementcode | 0010h | Steuerelementcode | 0011h | Steuerelementcode |
0012h | Steuerelementcode | 0013h | Steuerelementcode | 0014h | Steuerelementcode |
0015h | Steuerelementcode | 0016h | Steuerelementcode | 0017h | Steuerelementcode |
0018h | Steuerelementcode | 0019h | Steuerelementcode | 001Ah | Steuerelementcode |
001Bh | Steuerelementcode | 001Ch | Steuerelementcode | 001Dh | Steuerelementcode |
001Eh | Steuerelementcode | 001Fh | Steuerelementcode | 0022h | Anführungszeichen |
002Ah | Asterisk | 002Fh | Schrägstrich | 003Ah | Doppelpunkt |
003Ch | Kleiner-als-Zeichen | 003Eh | Größer-als-Zeichen | 003Fh | Fragezeichen |
005Ch | Zurück-Schrägstrich | 007Ch | Senkrechter Strich |
Die Dateinamen "." und ".." haben die besondere Bedeutung von "this directory" und "containing directory", bzw. "containing directory". Implementierungen werden keine dieser reservierten Dateinamen im Feld "FileName" aufzeichnen. Implementierungen können jedoch diese beiden Dateinamen in Verzeichniseinträgen generieren, um auf das Verzeichnis zu verweisen, das aufgelistet wird und das enthaltende Verzeichnis.
Implementierungen können Datei- und Verzeichnisnamen nur auf den ASCII-Zeichensatz beschränken. Wenn dies so ist, sollten sie ihren Zeichenbereich auf den Bereich der gültigen Zeichen in den ersten 128 Unicode-Einträgen beschränken. Sie müssen weiterhin Datei- und Verzeichnisnamen in Unicode auf dem Volume speichern und in ASCII/Unicode übersetzen, wenn sie mit dem Benutzer interfacieren.
7.8 Anbietererweiterungsverzeichniseintrag
Der Eintrag "Anbietererweiterungsverzeichnis" ist ein gutartiger sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 36). Ein Dateiverzeichniseintragssatz kann eine beliebige Anzahl von Anbietererweiterungsverzeichniseinträgen enthalten, bis zum Grenzwert der sekundären Verzeichniseinträge, weniger die Anzahl anderer sekundärer Verzeichniseinträge. Darüber hinaus sind Anbietererweiterungsverzeichniseinträge nur gültig, wenn sie den erforderlichen Verzeichniseinträgen für Die Streamerweiterung und den Dateinamen nicht vorangehen.
Anbietererweiterungsverzeichniseinträge ermöglichen Lieferanten, eindeutige, anbieterspezifische Verzeichniseinträge in einzelnen Dateiverzeichniseintragssätzen über das VendorGuid-Feld (siehe Tabelle 36). Eindeutige Verzeichniseinträge ermöglichen es Anbietern, das ExFAT-Dateisystem zu erweitern. Anbieter können den Inhalt des VendorDefined-Felds definieren (siehe Tabelle 36). Anbieterimplementierungen können den Inhalt des Felds "VendorDefined" beibehalten und anbieterspezifische Funktionen bereitstellen.
Implementierungen, die die GUID eines Anbietererweiterungsverzeichniseintrags nicht erkennen, behandeln den Verzeichniseintrag genauso wie alle anderen nicht erkannten nicht erkannten sekundären Verzeichniseinträge (siehe Abschnitt 8.2).
Tabelle 36 AnbietererweiterungsverzeichnisEntry
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.8.1 definiert seinen Inhalt. |
GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.8.2 definiert seinen Inhalt. |
VendorGuid | 2 | 16 | Dieses Feld ist obligatorisch und Abschnitt 7.8.3 definiert seinen Inhalt. |
VendorDefined | 18 | 14 | Dieses Feld ist obligatorisch, und Anbieter können ihren Inhalt definieren. |
7.8.1 EntryType Field
Das EntryType-Feld entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1).
7.8.1.1 TypeCode Field
Das Feld "TypeCode" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.1).
Für den Eintrag "Anbietererweiterungsverzeichnis" ist der gültige Wert für dieses Feld 0.
7.8.1.2 TypeImportance Field
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.2).
Für den Eintrag "Anbietererweiterungsverzeichnis" ist der gültige Wert für dieses Feld 1.
7.8.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.3).
7.8.1.4 InUse Field
Das InUse-Feld entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.4).
7.8.2 GeneralSecondaryFlags Field
Das Feld "GeneralSecondaryFlags" entspricht der Definition, die in der vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2) bereitgestellt wird, und definiert den Inhalt des zu reservierten CustomDefined-Felds.
7.8.2.1 AllocationPossible Field
Das Feld "AllocationPossible" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2.1).
Für den Eintrag "Anbietererweiterungsverzeichnis" ist der gültige Wert für dieses Feld 0.
7.8.2.2 NoFatChain Field
Das Feld "NoFatChain" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2.2).
7.8.3 VendorGuid Field
Das Feld "VendorGuid" enthält eine GUID, die die angegebene Anbietererweiterung eindeutig identifiziert.
Alle möglichen Werte für dieses Feld sind gültig, außer der NULL-GUID, die {00000000-0000-0000-0000-000000000000}. Anbieter sollten jedoch ein GUID-generierendes Tool verwenden, z. B. GuidGen.exe, um beim Definieren ihrer Erweiterungen eine GUID auszuwählen.
Der Wert dieses Felds bestimmt die anbieterspezifische Struktur des VendorDefined-Felds.
7.9 Anbieterzuordnungsverzeichniseintrag
Der Verzeichniseintrag "Anbieterzuordnung" ist ein gutartiger sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 37). Ein Dateiverzeichniseintragssatz kann eine beliebige Anzahl von Verzeichniseinträgen des Anbieters enthalten, bis zum Grenzwert der sekundären Verzeichniseinträge, weniger die Anzahl anderer sekundärer Verzeichniseinträge. Darüber hinaus sind Verzeichniseinträge des Anbieterzuordnungsverzeichniss gültig, wenn sie nicht vor den erforderlichen Verzeichniseinträgen für Die Streamerweiterung und Dateiname liegen.
Anbieterzuordnungsverzeichniseinträge ermöglichen Lieferanten, eindeutige, anbieterspezifische Verzeichniseinträge in einzelnen Dateiverzeichniseintragssätzen über das VendorGuid-Feld (siehe Tabelle 37). Eindeutige Verzeichniseinträge ermöglichen es Anbietern, das ExFAT-Dateisystem zu erweitern. Anbieter können den Inhalt der zugeordneten Cluster definieren, falls vorhanden. Anbieterimplementierungen können den Inhalt der zugeordneten Cluster, sofern vorhanden, beibehalten und anbieterspezifische Funktionen bereitstellen.
Implementierungen, die die GUID eines Anbieterzuordnungsverzeichniseintrags nicht erkennen, behandeln den Verzeichniseintrag genauso wie alle anderen nicht erkannten nicht erkannten sekundären Verzeichniseinträge (siehe Abschnitt 8.2).
Tabelle 37 AnbieterzuordnungsverzeichnisEntry
Feldname | Offset (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
EntryType | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.9.1 definiert seinen Inhalt. |
GeneralSecondaryFlags | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.9.2 definiert seinen Inhalt. |
VendorGuid | 2 | 16 | Dieses Feld ist obligatorisch und Abschnitt 7.9.3 definiert seinen Inhalt. |
VendorDefined | 18 | 2 | Dieses Feld ist obligatorisch, und Anbieter können ihren Inhalt definieren. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.9.4 definiert seinen Inhalt. |
DataLength | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 7.9.5 definiert seinen Inhalt. |
7.9.1 EntryType Field
Das EntryType-Feld entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1).
7.9.1.1 TypeCode Field
Das Feld "TypeCode" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.1).
Für den Eintrag "Anbieterzuordnung" ist der gültige Wert für dieses Feld 1.
7.9.1.2 TypeImportance Field
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.2).
Für den Eintrag "Anbieterzuordnung" ist der gültige Wert für dieses Feld 1.
7.9.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.3).
7.9.1.4 InUse Field
Das InUse-Feld entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.4).
7.9.2 GeneralSecondaryFlags Field
Das Feld "GeneralSecondaryFlags" entspricht der Definition, die in der vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2) bereitgestellt wird, und definiert den Inhalt des zu reservierten CustomDefined-Felds.
7.9.2.1 AllocationPossible Field
Das Feld "AllocationPossible" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2.1).
Für den Eintrag "Anbieterzuordnung" ist der gültige Wert für dieses Feld 1.
7.9.2.2 NoFatChain Field
Das Feld "NoFatChain" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2.2).
7.9.3 VendorGuid Field
Das Feld "VendorGuid" enthält eine GUID, die die angegebene Anbieterzuweisung eindeutig identifiziert.
Alle möglichen Werte für dieses Feld sind gültig, außer der NULL-GUID, die {00000000-0000-0000-0000-000000000000}. Anbieter sollten jedoch ein GUID-generierendes Tool verwenden, z. B. GuidGen.exe, um beim Definieren ihrer Erweiterungen eine GUID auszuwählen.
Der Wert dieses Felds bestimmt die anbieterspezifische Struktur des Inhalts der zugeordneten Cluster, falls vorhanden.
7.9.4 FirstCluster Field
Das Feld "FirstCluster" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.3).
7.9.5 DataLength Field
Das Feld "DataLength" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.4).
7.10 TexFAT-Verzeichniseintrag
Diese Spezifikation, exFAT Revision 1.00 File System Basic Specification, definiert nicht den TexFAT Padding-Verzeichniseintrag. Der Typcode ist jedoch 1, und der Typ ist 1. Implementierungen dieser Spezifikation behandeln TexFAT Padding-Verzeichniseinträge genauso wie alle anderen nicht erkannten primären Verzeichniseinträge, Implementierungen werden nicht texFAT Padding-Verzeichniseinträge verschieben.
8 Implementierungsnotizen
8.1 Empfohlene Schreibbestellung
Implementierungen sollten sicherstellen, dass das Volumen so robust wie möglich für Stromfehler und andere unvermeidbare Fehler ist. Wenn Sie neue Verzeichniseinträge erstellen oder Clusterzuweisungen ändern, sollten Implementierungen in der Regel diese Schreibreihenfolge befolgen:
Festlegen des Werts des VolumeDirty-Felds auf 1
Aktualisieren des aktiven FAT, falls erforderlich
Aktualisieren der aktiven Zuordnungs-Bitmap
Erstellen oder Aktualisieren des Verzeichniseintrags, falls erforderlich
Löschen des Werts des VolumeDirty-Felds auf 0, wenn der Wert vor dem ersten Schritt 0 war.
Wenn Sie Verzeichniseinträge löschen oder Clusterzuweisungen freigibt, sollten Implementierungen diese Schreibreihenfolge befolgen:
Festlegen des Werts des VolumeDirty-Felds auf 1
Löschen oder Aktualisieren des Verzeichniseintrags bei Bedarf
Aktualisieren des aktiven FAT, falls erforderlich
Aktualisieren der aktiven Zuordnungs-Bitmap
Löschen des Werts 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 derselben Hauptversionsnummer, 1 und nebenrevisionszahl 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 Hauptversionsnummer können neue wichtige Primärverzeichniseinträge definieren. Implementierungen dieser Spezifikation, exFAT Revision 1.00 File System Basic Specification, sollten in der Lage sein, alle exFAT-Volumen der Hauptversionsnummer 1 und alle untergeordneten Revisionsnummern zu mounten und darauf zuzugreifen. Dies stellt Szenarien dar, in denen eine Implementierung verzeichniseinträge auftreten kann, die nicht erkannt werden. Im Folgenden werden die Auswirkungen dieser Szenarien beschrieben:
Die Anwesenheit nicht erkannter kritischer primärer Verzeichniseinträge im Stammverzeichnis rendert das Volume ungültig. Die Anwesenheit eines kritischen primären Verzeichniseintrags, außer Dateiverzeichniseinträgen in keinem Stammverzeichnis, rendert das Hostingverzeichnis ungültig.
Implementierungen ändern keine nicht anerkannten gutartigen primären Verzeichniseinträge oder ihre zugeordneten Clusterzuweisungen. Beim Löschen eines Verzeichnisses und nur beim Löschen eines Verzeichnisses werden implementierungen jedoch nicht erkannte primärverzeichniseinträge und alle zugeordneten Clusterzuweisungen, sofern vorhanden, gelöscht.
Implementierungen ändern keine nicht erkannten kritischen sekundären Verzeichniseinträge oder ihre zugeordneten Clusterzuweisungen. Die Anwesenheit eines oder mehrerer nicht erkannter kritischer sekundärer Verzeichniseinträge in einem Verzeichniseintragssatz rendert den gesamten Verzeichniseintragssatz nicht erkannt. Wenn Sie einen Verzeichniseintragssatz löschen, der einen oder mehrere nicht erkannte kritische sekundäre Verzeichniseinträge enthält, werden alle Clusterzuweisungen freigestellt, sofern vorhanden, die nicht erkannten kritischen sekundären Verzeichniseinträgen zugeordnet sind. Wenn der Verzeichniseintragssatz ein Verzeichnis beschreibt, können Implementierungen folgendes ausführen:
Durchlaufen sie in das Verzeichnis
Aufzählen der enthaltenen Verzeichniseinträge
Gelöschte Verzeichniseinträge
Verschieben von enthaltenen Verzeichniseinträgen in ein anderes Verzeichnis
Die Umsetzungen dürfen jedoch nicht:
Ändern von enthaltenen Verzeichniseinträgen, mit Ausnahme des Löschens, wie erwähnt
Erstellen neuer enthaltener Verzeichniseinträge
Öffnen von enthaltenen Verzeichniseinträgen, außer Durchlauf und Aufzählen, wie erwähnt
Implementierungen ändern keine nicht erkannten gutartigen sekundären Verzeichniseinträge oder ihre zugeordneten Clusterzuweisungen. Implementierungen sollten nicht erkannte sekundäre Verzeichniseinträge ignorieren. Wenn Sie einen Verzeichniseintragssatz löschen, werden alle Clusterzuweisungen, sofern vorhanden, freigestellt, die nicht erkannten sekundären Verzeichniseinträgen zugeordnet sind.
Grenzwerte für 9 Dateisysteme
9.1 Branchengrößenbeschränkungen
Das Feld BytesPerSectorShift definiert die Grenzwerte für die untere und obere Sektorgröße (die zu niedrigeren Grenzwerten ausgewertet wird : 512 Bytes; obere Grenze: 4.096 Bytes).
Grenzwerte für die Clustergröße 9.2
Das Feld "SectorPerClusterShift" definiert die Grenzwerte für die unteren und oberen Clustergröße (untere Grenze: 1 Sektor; Obergrenze: 25 -- BytesPerSectorShift-Sektoren, die auf 32 MB ausgewertet werden).
9.3 Größenbeschränkungen für Cluster-Heap
Der Cluster-Heap enthält mindestens genügend Speicherplatz, um die folgenden grundlegenden Dateisystemstrukturen zu hosten: das Stammverzeichnis, alle Zuordnungs bitmaps und die Groß-/Kleinschreibungstabelle.
Die untere Größengrenze des Cluster-Heaps ist eine Funktion der unteren Größe der einzelnen grundlegenden Dateisystemstrukturen, die sich im Cluster-Heap befinden. Selbst angesichts des kleinsten möglichen Clusters (512 Bytes), benötigt jede der grundlegenden Dateisystemstrukturen nicht mehr als einen Cluster. Daher lautet die untere Grenze: 2 + NumberOfFats-Cluster, die je nach Wert des Felds NumberOfFats auf 3 oder 4 Cluster ausgewertet werden.
Die obere Cluster-Heap-Größengrenze ist eine einfache Funktion der maximalen möglichen Anzahl von Clustern, die das ClusterCount-Feld definiert (obere Grenze: 232- 11-Cluster). Unabhängig von der Clustergröße hat ein solcher Cluster-Heap genügend Speicherplatz, um zumindest die grundlegenden Dateisystemstrukturen zu hosten.
Grenzwerte für Volumengröße 9.4
Das Feld "VolumeLength" definiert die Grenzwerte für die unteren und oberen Volumengröße (untere Grenze: 2 20/2BytesPerSectorShift-Sektoren, die auf 1 MB ausgewertet werden; Obergrenze: 264- 1-Sektoren, die angesichts der größten möglichen Branchengröße auf ca. 64ZB ausgewertet werden. Diese Spezifikation empfiehlt jedoch nicht mehr als2 24-2 Cluster im Cluster-Heap (siehe Abschnitt 3.1.9). Daher ist die empfohlene Obergrenze eines Volumens: ClusterHeapOffset + (2 2 24- 2) * 2SectorsPerClusterShift. Angesichts der größtmöglichen Clustergröße, 32 MB und vorausgesetzt, dass ClusterHeapOffset 96 MB (ausreichend Speicherplatz für die Haupt- und Sicherungsstartbereiche und nur das erste FAT) ist, wird die empfohlene Obergrenze eines Volumes auf ca. 512 TB ausgewertet.
9.5 Verzeichnisgrößenbeschränkungen
Das Feld "DataLength" des Eintrags "Stream Extension" definiert die Grenzwerte für 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 verwendet 32 Bytes). Angesichts des kleinsten möglichen Dateiverzeichniseintrags können drei Verzeichniseinträge ein Verzeichnis bis zu 2.796.202 Dateien hosten.
10 Anhang
10.1 Globally Unique Identifiers (GUIDs)
Eine GUID ist die Microsoft-Implementierung eines universellen eindeutigen Bezeichners. Eine GUID ist ein 128-Bit-Wert, der aus einer Gruppe von 8 Hexadezimalstellen besteht, gefolgt von drei Gruppen von jeweils 4 Hexadezimalstellen und gefolgt von einer Gruppe von 12 Hexadezimalstellen, z. B. {6B29FC40-CA47-1067-B31D-00DDD010662DA}, (siehe Tabelle 38).
Tabellen 38-GUID-Struktur
Feldname | Offset (Byte) |
Größe (Bytes) |
Kommentare |
---|---|---|---|
Daten1 | 0 | 4 | Dieses Feld ist obligatorisch und enthält die vier Bytes aus der ersten Gruppe der GUID (6B29FC40h aus dem Beispiel). |
Daten2 | 4 | 2 | Dieses Feld ist obligatorisch und enthält die beiden Bytes aus der zweiten Gruppe der GUID (CA47h aus dem Beispiel). |
Daten3 | 6 | 2 | Dieses Feld ist obligatorisch und enthält die beiden Bytes aus der dritten Gruppe der GUID (1067h aus dem Beispiel). |
Data4[0] | 8 | 1 | Dieses Feld ist obligatorisch und enthält das wichtigste Byte aus der vierten Gruppe der GUID (B3h aus dem Beispiel). |
Data4[1] | 9 | 1 | Dieses Feld ist obligatorisch und enthält das am wenigsten signifikante Byte aus der vierten Gruppe der GUID (1Dh aus dem Beispiel). |
Data4[2] | 10 | 1 | Dieses Feld ist obligatorisch und enthält das erste Byte aus der fünften Gruppe der GUID (00h aus dem Beispiel). |
Data4[3] | 11 | 1 | Dieses Feld ist obligatorisch und enthält das zweite Byte aus der fünften Gruppe der GUID (DDh aus dem Beispiel). |
Data4[4] | 12 | 1 | Dieses Feld ist obligatorisch und enthält das dritte Byte aus der fünften Gruppe der GUID (01h aus dem Beispiel). |
Data4[5] | 13 | 1 | Dieses Feld ist obligatorisch und enthält das vierte Byte aus der fünften Gruppe der GUID (06h aus dem Beispiel). |
Data4[6] | 14 | 1 | Dieses Feld ist obligatorisch und enthält das fünfte Byte aus der fünften Gruppe der GUID (62h aus dem Beispiel). |
Data4[7] | 15 | 1 | Dieses Feld ist obligatorisch und enthält das sechste Byte aus der fünften Gruppe der GUID (DAh aus dem Beispiel). |
10.2 Partitionstabellen
Um die Interoperabilität von exFAT-Volumes in einem breiten Satz von Nutzungsszenarien sicherzustellen, sollten Implementierungen den Partitionstyp 07h für MBR partitionierte Speicher und Partitions-GUID {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} für GPT partitionierte Speicher verwenden.
11 Dokumentationsänderungsverlauf
Tabelle 39 beschreibt die Geschichte der Veröffentlichungen, Korrekturen, Ergänzungen, Entfernungen und Erläuterungen dieses Dokuments.
Tabelle 39 Dokumentationsänderungsverlauf
Date | Beschreibung der Änderung |
---|---|
08-Jan-2008 | Erste Version der Standardspezifikation, die Folgendes umfasst:
|
08.08.2008 | Zweite Version der Standardspezifikation, die die folgenden Änderungen enthält:
|
01-Okt-2008 | Dritte Version der Standardspezifikation, die die folgenden Änderungen enthält:
|
01-Jan-2009 | Vierte Version der Basic-Spezifikation, die die folgenden Änderungen enthält:
|
02-Sep-2009 | Fünfte Version der Basic-Spezifikation, die die folgenden Änderungen enthält:
|
24.Februar-2010 | Sechste Version der Basic-Spezifikation, die die folgenden Änderungen enthält:
|
26-August-2019 | Siebte Version der Basic-Spezifikation, die die folgenden Änderungen enthält:
|