Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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).
Die Einfachheit von FAT-basierten Dateisystemen beibehalten.
Zwei der Stärken von FAT-basierten Dateisystemen sind ihre relative Einfachheit und Einfache Implementierung. Im Geiste seiner Vorgänger sollten Implementierungen exFAT relativ einfach und einfach zu implementieren finden.
Sehr große Dateien und Speichergeräte aktivieren.
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 Clustern so groß wie 32 MB, wodurch sehr große Speichergeräte effektiv ermöglicht werden.
Integration der Erweiterbarkeit für zukünftige Innovationen.
Das exFAT-Dateisystem integriert die Erweiterbarkeit in sein Design, sodass das Dateisystem mit Innovationen im Speicher und Änderungen der Nutzung schritt halten kann.
1.2 Spezifische Terminologie
Im Rahmen dieser Spezifikation tragen bestimmte Begriffe (siehe Tabelle 1) eine besondere Bedeutung für den Entwurf und die Implementierung des ExFAT-Dateisystems.
Tabelle 1 Definition von Begriffen, die sehr spezifische Bedeutung
Ausdrucks- | Definition |
---|---|
Sollen | Diese Spezifikation verwendet den Begriff "soll", um ein obligatorisches Verhalten zu beschreiben. |
Sollen | In dieser Spezifikation wird der Begriff "should" verwendet, um ein Verhalten zu beschreiben, das es dringend empfiehlt, aber nicht obligatorisch macht. |
Mai | In dieser Spezifikation wird der Begriff "may" verwendet, um ein optionales Verhalten zu beschreiben. |
Obligatorisch | Dieser Begriff beschreibt ein Feld oder eine Struktur, das durch eine Implementierung geändert und wie diese Spezifikation beschrieben wird.This term describes a field or structure which an implementation shall modify and shall interpret as this specification describes. |
Wahlfrei | Dieser Begriff beschreibt ein Feld oder eine Struktur, das von einer Implementierung unterstützt werden kann oder nicht. Wenn eine Implementierung ein bestimmtes optionales Feld oder eine bestimmte Struktur unterstützt, muss sie das Feld oder die Struktur so ändern und interpretieren, wie diese Spezifikation beschreibt. |
Undefiniert | Dieser Begriff beschreibt Feld- oder Strukturinhalte, die eine Implementierung bei Bedarf ändern kann (d. h. eindeutig auf Null, wenn umgebende Felder oder Strukturen festgelegt werden) und darf nicht so interpretiert werden, dass sie eine bestimmte Bedeutung haben. |
Reserviert | Dieser Begriff beschreibt Feld- oder Strukturinhalte, die implementierungen:
|
1.3 Volltext allgemeiner Akronyme
Diese Spezifikation verwendet Akronyme 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 |
FETT | 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 | Unterbrechen |
MBR | Master Boot Record |
texFAT | Transaktionssicher exFAT |
UTC | Koordinierte Weltzeit |
1.4 Standardfeld- und Strukturqualifizierer
Felder und Strukturen in dieser Spezifikation weisen die folgenden Qualifizierer auf (siehe Liste unten), es sei denn, die Spezifikationshinweise sind anders.
Nicht signiert
Verwenden Sie die Dezimalnotation, um Werte zu beschreiben, sofern nicht anders angegeben; diese Spezifikation verwendet den Postfixbuchstaben "h", um hexadezimale Zahlen zu kennzeichnen und GUIDs in geschweifte geschweifte Klammern einzuschließen.
Sind im kleinen endischen Format
Kein Null-Endzeichen für Zeichenfolgen erforderlich
1.5 Windows CE und TexFAT
TexFAT ist eine Erweiterung von exFAT, die transaktionssichere operative Semantik über dem Basisdateisystem hinzufügt. TexFAT wird von Windows CE verwendet. TexFAT erfordert die Verwendung der beiden FATs und Zuordnungsbitmaps für die Verwendung in Transaktionen. Außerdem werden mehrere zusätzliche Strukturen definiert, einschließlich Abstandsdeskriptoren und Sicherheitsdeskriptoren.
2 Volumenstruktur
Ein Volume ist der Satz aller Dateisystemstrukturen und datenspeicher, die zum Speichern und Abrufen von Benutzerdaten erforderlich sind. Alle ExFAT-Volumes enthalten vier Bereiche (siehe Tabelle 3).
Tabelle 3 Volumestruktur
Unterbereichsnamen | Offset- (Sektor) |
Größe (Sektoren) |
Kommentare |
---|---|---|---|
Hauptstartbereich | |||
Hauptstartsektor | 0 | 1 | Diese Unterregion ist obligatorisch und Abschnitt 3.1 definiert deren Inhalt. |
Hauptsektoren für den erweiterten Start | 1 | 8 | Diese Unterregion ist obligatorisch und Abschnitt 3.2) definiert ihren Inhalt. |
Haupt-OEM-Parameter | 9 | 1 | Diese Unterregion ist obligatorisch und Abschnitt 3.3 definiert deren Inhalte. |
Haupt reserviert | 10 | 1 | Diese Unterregion ist obligatorisch, und der Inhalt ist reserviert. |
Hauptstartprüfsumme | 11 | 1 | Diese Unterregion ist obligatorisch und Abschnitt 3.4 definiert deren Inhalt. |
Sicherungsstartbereich | |||
Sicherungsstartsektor | 12 | 1 | Diese Unterregion ist obligatorisch und Abschnitt 3.1 definiert deren Inhalt. |
Sichern erweiterter Startsektoren | 13 | 8 | Diese Unterregion ist obligatorisch und Abschnitt 3.2 definiert ihren Inhalt. |
OEM-Sicherungsparameter | 21 | 1 | Diese Unterregion ist obligatorisch und Abschnitt 3.3 definiert deren Inhalte. |
Reservierte Sicherung | 22 | 1 | Diese Unterregion ist obligatorisch, und der Inhalt ist reserviert. |
Prüfsumme des Sicherungsstarts | 23 | 1 | Diese Unterregion ist obligatorisch und Abschnitt 3.4 definiert deren Inhalt. |
FAT-Region | |||
FAT-Ausrichtung | 24 | FatOffset – 24 | Diese Unterregion ist obligatorisch, und der Inhalt ist ggf. nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das FatOffset-Feld. |
Erstes FETT | FatOffset | FatLength | Diese Unterregion ist obligatorisch und Abschnitt 4.1 definiert ihren Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder "FatOffset" und "FatLength". |
Zweites FETT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | Diese Unterregion ist obligatorisch, und Abschnitt 4.1 definiert, falls vorhanden. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder "FatOffset", "FatLength" und "NumberOfFats". Das Feld "NumberOfFats" darf nur werte 1 und 2 enthalten. |
Datenbereich | |||
Cluster-Heapausrichtung | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | Diese Unterregion ist obligatorisch, und der Inhalt ist ggf. 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 | Diese Unterregion ist obligatorisch und Abschnitt 5.1 definiert ihren Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder "ClusterHeapOffset", "ClusterCount" und "SectorsPerClusterShift". |
Übermäßiger Speicherplatz | ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift) | Diese Unterregion ist obligatorisch, und der Inhalt ist ggf. 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 Anweisungen zum Startband, identifizieren von Informationen und Dateisystemparametern, um eine Implementierung zu ermöglichen, folgendes auszuführen:
- Starten Sie ein Computersystem von einem ExFAT-Volume.
- Identifizieren Sie das Dateisystem auf dem Volume als exFAT.
- Ermitteln Sie den Speicherort der exFAT-Dateisystemstrukturen.
Der Sicherungsstartbereich ist eine Sicherung des Hauptstartbereichs. Sie unterstützt die Wiederherstellung des exFAT-Volumes, wenn sich der Hauptstartbereich in einem inkonsistenten Zustand befindet. Außer unter seltenen Umständen, z. B. beim Aktualisieren von Startbandanweisungen, sollten Implementierungen den Inhalt des Sicherungsstartbereichs nicht ändern.
3.1 Haupt- und Sicherungsstartsektor-Unterregionen
Der Hauptstartsektor enthält Code zum Starten von einem ExFAT-Volume und grundlegenden ExFAT-Parametern, die die Volumestruktur beschreiben (siehe Tabelle 4). BIOS-, MBR- oder andere Boot-Strapping-Agents können diesen Sektor untersuchen und alle darin enthaltenen Boot-Strapping-Anweisungen laden und ausführen.
Der Sicherungsstartsektor ist eine Sicherung des Hauptstartsektors und hat dieselbe Struktur (siehe Tabelle 4). Der Sicherungsstartsektor kann Wiederherstellungsvorgänge unterstützen; Implementierungen müssen jedoch den Inhalt der Felder "VolumeFlags" und "PercentInUse" als veraltet behandeln.
Vor der Verwendung des Inhalts des Haupt- oder Sicherungsstartsektors überprüfen Implementierungen ihre Inhalte, indem sie ihre jeweilige Startprüfsumme überprüfen und sicherstellen, dass alle Felder innerhalb ihres gültigen Wertebereichs liegen.
Während der anfängliche Formatvorgang den Inhalt des Haupt- und Sicherungsstartsektors initialisiert, können Implementierungen diese Sektoren aktualisieren (und bei Bedarf auch ihre jeweilige Startprüfsumme aktualisieren). Implementierungen können jedoch entweder die Felder "VolumeFlags" oder "PercentInUse" aktualisieren, ohne die jeweilige Startprüfsumme zu aktualisieren (die Prüfsumme schließt diese beiden Felder ausdrücklich aus).
Tabelle 4 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. |
DateisystemName | 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. |
SektorenProClusterSchicht | 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. |
ProzentInBenutzung | 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. |
ExcessSpace | 512 | 2BytesPerSectorShift – 512 | Dieses Feld ist obligatorisch, und der Inhalt ist ggf. nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das BytePerSectorShift-Feld. |
3.1.1 JumpBoot Field
Das Feld "JumpBoot" muss die Sprunganweisung für CPUs enthalten, die bei ausführung der CPU zum Ausführen der Startbandanweisungen im Feld "BootCode" üblich sind.
Der gültige Wert für dieses Feld ist (in Der Reihenfolge von Byte mit niedriger Reihenfolge bis hochgeordnetes Byte) EBh 76h 90h.
3.1.2 FileSystemName-Feld
Das Feld "FileSystemName" muss den Namen des Dateisystems auf dem Volume enthalten.
Der gültige Wert für dieses Feld ist in ASCII-Zeichen "EXFAT", das drei nachfolgende Leerzeichen enthält.
3.1.3 MustBeZero Field
Das Feld "MustBeZero" entspricht direkt dem Bytebereich, den der gepackte BIOS-Parameterblock auf FAT12/16/32-Volumes verbraucht.
Der gültige Wert für dieses Feld ist 0, was dazu beiträgt, dass FAT12/16/32-Implementierungen versehentlich ein ExFAT-Volume anbringen.
3.1.4 PartitionOffset-Feld
Das Feld PartitionOffset beschreibt den medienrelativen Sektoroffset der Partition, die das angegebene exFAT-Volume hosten. Dieses Feld unterstützt das Startband von der Lautstärke mit erweiterten INT 13h auf Persönlichen Computern.
Alle möglichen Werte für dieses Feld sind gültig; Der Wert 0 weist jedoch darauf hin, dass die Implementierungen dieses Felds ignorieren.
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:
Mindestens 220/ 2BytesPerSectorShift, wodurch sichergestellt wird, dass das kleinste Volume nicht kleiner als 1 MB ist
Höchstens 264- 1 kann der größte Wert dieses Felds beschreiben.
Wenn die Größe des Unterbereichs "Überraum" jedoch 0 ist, ist der größte Wert dieses Felds ClusterHeapOffset + (232- 11) *2SectorsPerClusterShift.
3.1.6 FatOffset-Feld
Das Feld "FatOffset" beschreibt den volumenrelativen Sektorversatz des ersten FAT. Mit diesem Feld können Implementierungen das erste FAT an die Merkmale des zugrunde liegenden Speichermediums ausrichten.
Der gültige Wertebereich für dieses Feld lautet:
- Mindestens 24 Bereiche, die für die Bereiche "Main Boot" und "Backup Boot" verwendet werden
- Am meisten ClusterHeapOffset - (FatLength * NumberOfFats), die für die Sektoren, die der Cluster-Heap verbraucht
3.1.7 FatLength Field
Das Feld "FatLength" beschreibt die Länge jeder FAT-Tabelle (das Volumen kann bis zu zwei FATs enthalten).
Der gültige Wertebereich für dieses Feld lautet:
- Mindestens (ClusterCount + 2) * 22/ 2BytesPerSectorShiftauf die nächste ganze Zahl aufgerundet, wodurch sichergestellt wird, dass jedes FAT ausreichend Platz zum Beschreiben aller Cluster im Cluster-Heap hat.
- Höchstens (ClusterHeapOffset - FatOffset) / NumberOfFats rundet auf die nächste ganze Zahl ab, wodurch sichergestellt wird, dass die FATs vor dem Cluster Heap vorhanden sind.
Dieses Feld kann einen Wert enthalten, der über seine untere Grenze liegt (wie oben beschrieben), 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, ist nicht definiert.
3.1.8 ClusterHeapOffset-Feld
Das Feld ClusterHeapOffset beschreibt den volumenrelativen Sektorversatz des Cluster-Heaps. Mit 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 vorherigen Regionen zu berücksichtigen
- Höchstens 232- 1 oder VolumeLength - (ClusterCount * 2SectorsPerClusterShift), je nachdem, welche Berechnung kleiner ist
3.1.9 ClusterCount-Feld
Das Feld "ClusterCount" muss die Anzahl der Cluster beschreiben, die der Cluster-Heap enthält.
Der gültige Wert für dieses Feld ist der geringere der folgenden Werte:
- (VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShiftauf die nächste ganze Zahl abgerundet, die genau die Anzahl der Cluster ist, die zwischen dem Anfang des Cluster heap und dem Ende des Volumes passen können.
- 232- 11, die maximale Anzahl von Clustern, die ein FAT beschreiben kann
Der Wert des ClusterCount-Feldes bestimmt die Mindestgröße eines FAT. Um extrem große FATs zu vermeiden, können Implementierungen die Anzahl der Cluster im Cluster-Heap steuern, indem sie die Clustergröße erhöhen (über das Feld "SectorsPerClusterShift"). Diese Spezifikation empfiehlt nicht mehr als 224- 2 Cluster im Cluster Heap. Implementierungen müssen jedoch volumes mit bis zu 232- 11 Clustern im Cluster Heap verarbeiten können.
3.1.10 FirstClusterOfRootDirectory-Feld
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 ungültigen Cluster nach den Clustern zu platzieren, die die Zuordnungsbitmap und die Up-Case-Tabelle nutzen.
Der gültige Wertebereich für dieses Feld lautet:
- Mindestens 2, der Index des ersten Clusters im Cluster Heap
- Höchstens ClusterCount + 1, der Index des letzten Clusters im Cluster Heap
3.1.11 VolumeSerialNumber-Feld
Das Feld "VolumeSerialNumber" muss eine eindeutige fortlaufende Zahl enthalten. Dadurch werden Implementierungen unterstützt, um zwischen verschiedenen exFAT-Volumes zu unterscheiden. Implementierungen sollten die fortlaufende Zahl generieren, indem das Datum und die Uhrzeit der Formatierung des exFAT-Volumes kombiniert werden. Der Mechanismus zum Kombinieren von Datum und Uhrzeit, um eine fortlaufende Zahl zu bilden, ist implementierungsspezifisch.
Alle möglichen Werte für dieses Feld sind gültig.
3.1.12 DateisystemRevision-Feld
Das Feld "FileSystemRevision" beschreibt die haupt- und geringfügigen Revisionsnummern der exFAT-Strukturen auf dem angegebenen Volume.
Das Byte mit hoher Reihenfolge ist die Hauptrevisionsnummer, und das Byte mit niedriger Reihenfolge ist die kleinere Revisionsnummer. 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 Feld "FileSystemRevision" die Revisionsnummer 1,05. Wenn das Byte mit hoher Reihenfolge den Wert 0Ah enthält und 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 Byte mit hoher Reihenfolge
- Höchstens 99 für das Byte mit niedriger Reihenfolge und 99 für das Byte mit hoher Reihenfolge
Die Revisionsnummer von exFAT, die diese Spezifikation beschreibt, ist 1,00. Implementierungen dieser Spezifikation sollten alle exFAT-Volumes mit der Hauptrevisionsnummer 1 bereitstellen und dürfen kein exFAT-Volume mit einer anderen größeren Revisionsnummer bereitstellen. Implementierungen berücksichtigen die kleinere Revisionsnummer und dürfen keine Vorgänge ausführen oder Dateisystemstrukturen erstellen, die nicht in der entsprechenden Spezifikation der jeweiligen Kleineren Revisionsnummer beschrieben sind.
3.1.13 VolumeFlags-Feld
Das Feld "VolumeFlags" enthält Kennzeichnungen, die den Status verschiedener Dateisystemstrukturen auf dem ExFAT-Volume angeben (siehe Tabelle 5).
Implementierungen dürfen dieses Feld nicht enthalten, wenn die jeweilige Prüfsumme des Hauptstarts oder des Sicherungsstartbereichs berechnet wird. Wenn sie auf den Sicherungsstartsektor verweisen, müssen Implementierungen dieses Feld als veraltet behandeln.
Tabelle 5 VolumeFlags Feldstruktur
Feldname | Offset- (Bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
ActiveFat | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.13.1 definiert seinen Inhalt. |
VolumenFehlerhaft | 1 | 1 | Dieses Feld ist obligatorisch und Abschnitt 3.1.13.2 definiert seinen Inhalt. |
Mediafehler | 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-Feld
Das Feld "ActiveFat" beschreibt, welche FAT- und Zuordnungsbitmap aktiv sind (und implementierungen müssen verwendet werden), wie folgt:
- 0, was bedeutet, dass die Bitmap "First FAT" und "First Allocation" aktiv sind
- 1, was bedeutet, dass die Zweite FAT- und zweite Zuordnungsbitmap aktiv sind und nur möglich ist, wenn das Feld "NumberOfFats" den Wert 2 enthält.
Implementierungen müssen die inaktive FAT- und Zuordnungsbitmap als veraltet betrachten. Nur texFAT-fähige Implementierungen müssen die aktiven FAT- und Zuordnungsbitmaps wechseln (siehe Abschnitt 7.1).
3.1.13.2 VolumeDirty-Feld
Das Feld "VolumeDirty" beschreibt, ob das Volumen 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 Volume wahrscheinlich in einem inkonsistenten Zustand befindet
Implementierungen sollten den Wert dieses Felds auf 1 festlegen, wenn auf Dateisystemmetadaten Inkonsistenzen stoßen, die nicht aufgelöst werden. Wenn beim Bereitstellen eines Volumes der Wert dieses Felds 1 ist, können nur Implementierungen, die Dateisystemmetadateninkonsistenzen 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 sich das Dateisystem in einem konsistenten Zustand befindet.
Wenn bei der Bereitstellung eines Volumes der Wert dieses Felds 0 ist, sollten Implementierungen dieses Felds vor dem Aktualisieren von Dateisystemmetadaten auf 1 festlegen und dieses Feld anschließend auf 0 löschen, ähnlich wie die empfohlene Schreib sortierung, die in Abschnitt 8.1beschrieben ist.
3.1.13.3 MediaFailure-Feld
Im Feld "MediaFailure" wird beschrieben, ob eine Implementierung Medienfehler festgestellt hat oder nicht, wie folgt:
- 0, was bedeutet, dass die Hostmedien keine Fehler gemeldet haben oder bekannte Fehler bereits in der FAT als "schlechte" Cluster aufgezeichnet wurden
- 1, was bedeutet, dass die Hostmedien Fehler gemeldet haben (d. h. fehlgeschlagene Lese- oder Schreibvorgänge)
Eine Implementierung sollte dieses Feld auf 1 festlegen, wenn:
- Der Hostmedienzugriff auf alle Regionen im Volume schlägt fehl.
- 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 auf Medienfehler überprüfen und alle Fehler als "schlechte" Cluster im FAT (oder anderweitig beheben Medienfehler) den Wert dieses Felds auf 0 löschen.
3.1.13.4 Feld ClearToZero
Das Feld ClearToZero 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 die Implementierungen dieses Felds vor dem Ändern von Dateisystemstrukturen, Verzeichnissen oder Dateien auf 0 löschen müssen
3.1.14 BytesPerSectorShift Field
Das Feld BytesPerSectorShift beschreibt die Bytes pro Sektor, die als Protokoll2(N) ausgedrückt werden, wobei N die Anzahl der Bytes pro Sektor ist. Bei 512 Byte pro Sektor beträgt der Wert dieses Felds beispielsweise 9.
Der gültige Wertebereich für dieses Feld lautet:
- Mindestens 9 (Sektorgröße von 512 Bytes), die für ein exFAT-Volumen möglich ist
- Höchstens 12 (Sektorgröße von 4096 Byte), bei denen es sich um die Arbeitsspeicherseitengröße von CPUs handelt, die auf Persönlichen Computern üblich sind
3.1.15 SectorsPerClusterShift Field
Das Feld "SektorenPerClusterShift" beschreibt die Sektoren pro Cluster, die als Protokoll2(N) ausgedrückt werden, wobei N die Anzahl der Sektoren pro Cluster ist. Bei 8 Sektoren pro Cluster beträgt der Wert dieses Felds beispielsweise 3.
Der gültige Wertebereich für dieses Feld lautet:
- Mindestens 0 (1 Sektor pro Cluster), das ist der kleinste mögliche Cluster
- Höchstens 25 - BytesPerSectorShift, das zu einer Clustergröße von 32 MB ausgewertet wird
3.1.16 AnzahlDerFats Feld
Das Feld "NumberOfFats" beschreibt die Anzahl der FATs und Zuordnungsbitmaps, 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" enthält
- 2, das angibt, dass das Volume die Bitmap "First 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-Feld
Das Feld "DriveSelect" muss die erweiterte INT 13h-Laufwerksnummer enthalten, die das Startband von diesem Volume unter Verwendung erweiterter INT 13h auf PCs unterstützt.
Alle möglichen Werte für dieses Feld sind gültig. Ähnliche Felder in früheren FAT-basierten Dateisystemen enthielten häufig den Wert 80h.
3.1.18 FeldProzentInVerwendung
Das Feld "PercentInUse" beschreibt den Prozentsatz der Cluster im Cluster-Heap, der zugeordnet ist.
Der gültige Wertebereich für dieses Feld lautet:
- Zwischen 0 und 100 einschließlich, was der Prozentsatz der zugeordneten Cluster im Cluster heap ist, wird auf die nächste ganze Zahl aufgerundet.
- Genau FFh, der den Prozentsatz der zugeordneten Cluster im Cluster-Heap angibt, ist nicht verfügbar.
Implementierungen ändern den Wert dieses Felds, um Änderungen der Zuordnung von Clustern im Cluster-Heap widerzuspiegeln oder in FFh zu ändern.
Implementierungen dürfen dieses Feld nicht enthalten, wenn die jeweilige Prüfsumme des Hauptstarts oder des Sicherungsstartbereichs berechnet wird. Wenn sie auf den Sicherungsstartsektor verweisen, müssen Implementierungen dieses Feld als veraltet behandeln.
3.1.19 BootCode Field
Das Feld "BootCode" muss Anweisungen zum Startband enthalten. Implementierungen können dieses Feld mit den CPU-Anweisungen füllen, die zum Starten eines Computersystems erforderlich sind. Implementierungen, die keine Anweisungen zum Startband bereitstellen, müssen jedes Byte in diesem Feld als Teil des Formatvorgangs auf F4h (die Haltanweisung für CPUs, die in Persönlichen Computern üblich sind) initialisieren.
3.1.20 BootSignature-Feld
Das Feld "BootSignature" beschreibt, ob es sich bei einem bestimmten Sektor um einen Boot-Sektor handelt oder nicht.
Der gültige Wert für dieses Feld ist AA55h. Alle anderen Werte in diesem Feld ungültig den jeweiligen Startsektor. Implementierungen sollten den Inhalt dieses Felds vor jedem anderen Feld im jeweiligen Boot-Sektor überprüfen.
3.2 Haupt- und Sicherungssektoren für erweiterte Startbereiche
Jeder Sektor der Hauptsektoren für den erweiterten Boot hat die gleiche Struktur; Jeder Sektor kann jedoch unterschiedliche Anweisungen zum Startband enthalten (siehe Tabelle 6). Boot-Strapping-Agents, wie z. B. die Anweisungen zum Starten des Hauptstartsektors, alternative BIOS-Implementierungen oder firmware eines eingebetteten Systems, können diese Sektoren laden und die darin enthaltenen Anweisungen ausführen.
Die Sektoren für den erweiterten Sicherungsstart sind eine Sicherung der Hauptsektoren für den erweiterten Start und haben dieselbe Struktur (siehe Tabelle 6).
Vor der Ausführung der Anweisungen des Haupt- oder Sicherungsbereichs für den erweiterten Start sollten Implementierungen ihre Inhalte überprüfen, indem sichergestellt wird, dass das Feld "ExtendedBootSignature" jedes Sektors seinen vorgeschriebenen Wert enthält.
Während der anfängliche Formatvorgang sowohl den Inhalt des Haupt- als auch des Sicherungs-Erweiterten Startsektors initialisiert, können Implementierungen diese Sektoren aktualisieren (und bei Bedarf auch ihre jeweilige Startprüfsumme aktualisieren).
Tabelle 6 erweiterte Bootsektorstruktur
Feldname | Offset- (Byte) |
Größe (Bytes) |
Kommentare |
---|---|---|---|
ErweiterterStartcode | 0 | 2BytesPerSectorShift – 4 | Dieses Feld ist obligatorisch und Abschnitt 3.2.1 definiert seinen Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das BytePerSectorShift-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 BytePerSectorShift-Feld. |
3.2.1 ExtendedBootCode-Feld
Das Feld "ExtendedBootCode" muss Anweisungen zum Startband enthalten. Implementierungen können dieses Feld mit den CPU-Anweisungen füllen, die zum Starten eines Computersystems erforderlich sind. Implementierungen, die keine Anweisungen zum Startband bereitstellen, müssen jedes Byte in diesem Feld im Rahmen ihres Formatvorgangs auf 00h initialisieren.
3.2.2 ExtendedBootSignature Field
Das Feld "ExtendedBootSignature" beschreibt, ob es sich bei dem angegebenen Sektor um einen erweiterten Boot-Sektor handelt oder nicht.
Der gültige Wert für dieses Feld ist AA550000h. Jeder andere Wert in diesem Feld ungültigt den jeweiligen Main- oder Backup Extended Boot Sector. Implementierungen sollten den Inhalt dieses Felds vor jedem anderen Feld in seinem jeweiligen erweiterten Startsektor überprüfen.
3.3 Haupt- und Sicherungs-OEM-Parameter Unterregionen
Die Unterregion "Haupt-OEM-Parameter" enthält zehn Parameterstrukturen, die herstellerspezifische Informationen enthalten können (siehe Tabelle 7). Jede der zehn Parameterstrukturen wird von der Vorlage "Generische Parameter" abgeleitet (siehe Abschnitt 3.3.2). Hersteller können ihre eigenen benutzerdefinierten Parameterstrukturen von der Vorlage "Generische Parameter" ableiten. Diese Spezifikation definiert selbst zwei Parameterstrukturen: Null-Parameter (siehe Abschnitt 3.3.3) und Flash-Parameter (siehe Abschnitt 3.3.4).
Die Oem-Sicherungsparameter sind eine Sicherung der Haupt-OEM-Parameter und haben dieselbe Struktur (siehe Tabelle 7).
Vor der Verwendung der Inhalte der Haupt- oder Sicherungs-OEM-Parameter überprüfen Implementierungen ihre Inhalte, indem sie ihre jeweilige Startprüfsumme überprüfen.
Hersteller sollten die Haupt- und Sicherungs-OEM-Parameter mit ihren eigenen benutzerdefinierten Parameterstrukturen( falls vorhanden) und anderen Parameterstrukturen auffüllen. Nachfolgende Formatvorgänge behalten den Inhalt der Haupt- und Sicherungs-OEM-Parameter bei.
Implementierungen können die Haupt- und Sicherungs-OEM-Parameter nach Bedarf aktualisieren (und muss auch ihre jeweilige Startprüfsumme 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 BytePerSectorShift-Feld. |
3.3.1 Parameter[0] ... Parameter[9]
Jedes Parameterfeld in diesem Array enthält eine Parameterstruktur, die von der Vorlage "Generische Parameter" abgeleitet ist (siehe Abschnitt 3.3.2). Das Feld "Nicht verwendete Parameter" muss wie eine Nullparameterstruktur (siehe Abschnitt 3.3.3) beschrieben werden.
3.3.2 Vorlage für generische Parameter
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-Feld
Das Feld ParameterGuid 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 wie GuidGen.exeverwenden, um beim Ableiten von benutzerdefinierten Parameterstrukturen aus dieser Vorlage eine GUID auszuwählen.
3.3.3 Nullparameter
Die Struktur "Null-Parameter" wird von der Vorlage "Generische Parameter" abgeleitet (siehe Abschnitt 3.3.2) und muss ein nicht verwendetes Parameterfeld beschreiben (siehe Tabelle 9). Beim Erstellen oder Aktualisieren der OEM-Parameterstruktur müssen Implementierungen nicht verwendete Parameterfelder mit der Struktur Nullparameter auffüllen. Darüber hinaus sollten Implementierungen beim Erstellen oder Aktualisieren der OEM-Parameterstruktur null-Parameterstrukturen am Ende des Arrays konsolidieren, wodurch alle anderen Parameterstrukturen am Anfang der OEM-Parameterstruktur verbleiben.
Die Unterstützung für die Struktur der Nullparameter ist obligatorisch.
Tabelle 9 Null-Parameterstruktur
Feldname | Offset- (Byte) |
Größe (Bytes) |
Kommentare |
---|---|---|---|
Parameter-GUID | 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-Feld
Das Feld "ParametersGuid" muss der definition entsprechen, die von der Vorlage "Generische Parameter" bereitgestellt wird (siehe Abschnitt 3.3.2.1).
Der gültige Wert für dieses Feld in der GUID-Schreibweise ist {00000000-0000-0000-0000-000000000000}.
3.3.4 Flash-Parameter
Die FlashParameter-Struktur wird von der Vorlage "Generische Parameter" abgeleitet (siehe Abschnitt 3.3.2) und enthält Parameter für Flashmedien (siehe Tabelle 10). Hersteller von Flash-basierten Speichergeräten können ein Parameterfeld (vorzugsweise das Feld Parameter[0] ) mit dieser Parameterstruktur auffüllen. Implementierungen können die Informationen in der Struktur "Flash-Parameter" verwenden, um Zugriffsvorgänge während Lese-/Schreibvorgänge und für die Ausrichtung von Dateisystemstrukturen während der Formatierung der Medien zu optimieren.
Die Unterstützung für die Struktur der Flash-Parameter ist optional.
Tabelle 10 Flash-Parameterstruktur
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. |
ProgrammierZeit | 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 Felder "Flash-Parameter" mit Ausnahme des Felds "ParametersGuid" sind gültig. Der Wert 0 gibt jedoch an, dass das Feld eigentlich bedeutungslos ist (Implementierungen müssen das angegebene Feld ignorieren).
3.3.4.1 ParametersGuid-Feld
Das Feld "ParametersGuid" muss der definition entsprechen, die in der Vorlage "Generische Parameter" angegeben ist (siehe Abschnitt 3.3.2.1).
Der gültige Wert für dieses Feld in der GUID-Notation lautet {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.
3.3.4.2 EraseBlockSize-Feld
Das Feld "EraseBlockSize" beschreibt die Größe des Radierblocks von Flashmedien in Bytes.
3.3.4.3 PageSize-Feld
Das Feld "PageSize" beschreibt die Größe in Byte der Seite des Flash-Mediums.
3.3.4.4 Ersatzsektoren-Feld
Das Feld "SpareSectors" beschreibt die Anzahl der Sektoren, die die Flashmedien für ihre internen Sparing-Vorgänge zur Verfügung stehen.
3.3.4.5 RandomAccessTime-Feld
Das Feld "RandomAccessTime" beschreibt die durchschnittliche Zufällige Zugriffszeit der Flashmedien in Nanosekunden.
3.3.4.6 Programmierungszeit-Feld
Im Feld "ProgrammingTime" wird die durchschnittliche Programmierzeit der Flashmedien in Nanosekunden beschrieben.
3.3.4.7 Lesezyklusfeld
Das Feld "ReadCycle" beschreibt die durchschnittliche Lesezeit der Flashmedien in Nanosekunden.
3.3.4.8 Schreibzyklusfeld
Das Feld "WriteCycle" beschreibt die durchschnittliche Schreibzykluszeit in Nanosekunden.
3.4 Haupt- und Sicherungsstartprüfsumme-Unterregionen
Die Haupt- und Sicherungsstartprüfsummen enthalten jeweils ein wiederholtes Muster der Vier-Byte-Prüfsumme des Inhalts 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 Startprüfsummen-Unterbereich von Anfang bis Ende des Unterbereichs.
Vor der Verwendung des Inhalts einer der anderen Unterregionen in den Haupt- oder Sicherungsstartbereichen müssen Implementierungen ihre Inhalte überprüfen, indem die jeweilige Startprüfsumme überprüft wird.
Während der anfängliche Formatvorgang sowohl die Haupt- als auch die Sicherungsstartprüfsummen mit dem wiederholten Prüfsummenmuster auffüllt, aktualisieren Implementierungen diese Sektoren, wenn sich die Inhalte der anderen Sektoren in ihren jeweiligen Startregionen ändern.
Abbildung 1 Startprüfsummenberechnung
UInt32 BootChecksum
(
UCHAR * Sectors, // points to an in-memory copy of the 11 sectors
USHORT BytesPerSector
)
{
UInt32 NumberOfBytes = (UInt32)BytesPerSector * 11;
UInt32 Checksum = 0;
UInt32 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 106) || (Index == 107) || (Index == 112))
{
continue;
}
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Sectors[Index];
}
return Checksum;
}
4 Dateizuordnungstabellenbereich
Die Dateizuordnungstabelle (FILE Allocation Table, FAT)-Region kann bis zu zwei FATs enthalten, eine in der Ersten FAT-Unterregion und eine in der zweiten FAT-Unterregion. 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 die Erste FAT-Unterregion immer ein FAT. Wenn das Feld "NumberOfFats" zwei ist, enthält der zweite FAT-Teilbereich auch ein FAT.
Das Feld "ActiveFat" des Felds "VolumeFlags" beschreibt, welche FAT aktiv ist. Nur das Feld "VolumeFlags" im Hauptstartsektor ist aktuell. Die Durchführungen behandeln das FAT, das nicht als veraltet aktiv ist. Die Verwendung der inaktiven FAT und der Wechsel zwischen FATs ist implementierungsspezifisch.
4.1 Erste und zweite FAT-Teilregionen
Ein FAT muss Clusterketten im Cluster-Heap beschreiben (siehe Tabelle 11). Eine Clusterkette ist eine Reihe von Clustern, die Platz zum Aufzeichnen der Inhalte von Dateien, Verzeichnissen und anderen Dateisystemstrukturen bieten. Ein FAT stellt eine Clusterkette als eine singly-verknüpfte Liste von Clusterindizes dar. Mit Ausnahme der ersten beiden Einträge stellt jeder Eintrag in einem FAT genau einen Cluster dar.
Tabelle 11 Dateizuordnungstabellenstruktur
Feldname | Offset- (Byte) |
Größe (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 FFFFFFF6h niemals überschreiten. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide das ClusterCount-Feld. |
ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4) | Dieses Feld ist obligatorisch, und der Inhalt ist ggf. nicht definiert. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder "ClusterCount", "FatLength" und "BytesPerSectorShift". |
4.1.1 FatEntry[0] Feld
Das Feld "FatEntry[0] " beschreibt den Medientyp im ersten Byte (das niedrigste Byte) und muss FFh in den verbleibenden drei Byte enthalten.
Der Medientyp (das erste Byte) sollte F8h sein.
4.1.2 FatEntry[1] Field
Das Feld FatEntry[1] ist nur aufgrund der historischen Rangfolge vorhanden und beschreibt nichts von Interesse.
Der gültige Wert für dieses Feld ist FFFFFFFFh. Die Implementierungen initialisieren dieses Feld mit seinem vorgeschriebenen Wert und sollten dieses Feld nicht für irgendeinen Zweck verwenden. Implementierungen sollten dieses Feld nicht interpretieren und ihre Inhalte über Vorgänge hinweg beibehalten, die die umgebenden Felder ändern.
4.1.3 FatEntry[2] ... FatEntry[ClusterCount+1] Felder
Jedes FatEntry-Feld in diesem Array muss einen Cluster im Cluster heap darstellen. FatEntry[2] stellt den ersten Cluster im Cluster-Heap und FatEntry[ClusterCount+1] für den letzten Cluster im Cluster Heap dar.
Der gültige Wertebereich für diese Felder lautet:
- Zwischen 2 und ClusterCount + 1 einschließlich, was auf das nächste FatEntry in der angegebenen Clusterkette verweist; die angegebene FatEntry darf auf keinen FatEntry verweisen, der ihm in der gegebenen Clusterkette vorausgeht.
- Genau FFFFFFF7h, das den entsprechenden Cluster von FatEntry als "schlecht" markiert
- Genau FFFFFFFFh, das den entsprechenden Cluster des FatEntry als letzten Cluster einer Clusterkette kennzeichnet; Dies ist der einzige gültige Wert für den letzten FatEntry einer bestimmten Clusterkette.
5 Datenregion
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 heap ist sehr einfach (siehe Tabelle 12); Jede aufeinander folgende Reihe von Sektoren beschreibt einen Cluster, wie das Feld "SectorsPerClusterShift" definiert. Wichtig ist, dass der erste Cluster des Cluster Heap Index 2 hat, der direkt dem Index von FatEntry[2] entspricht.
In einem exFAT-Volume verwaltet eine Zuordnungsbitmap (siehe Abschnitt 7.1.5) den Datensatz des Zuordnungsstatus aller Cluster. Dies ist ein erheblicher Unterschied zu den Vorgängern von exFAT (FAT12, FAT16 und FAT32), in dem ein FAT einen Datensatz des Zuordnungszustands aller Cluster im Cluster Heap bewahrte.
Tabelle 12 Cluster-Heapstruktur
Feldname | Offset- (Sektor) |
Größe (Sektoren) |
Kommentare |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2SectorsPerClusterShift | Dieses Feld ist obligatorisch und Abschnitt 5.1.1 definiert seinen Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder "ClusterHeapOffset" und "SectorsPerClusterShift". |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2SectorsPerClusterShift | 2SectorsPerClusterShift | Dieses Feld ist obligatorisch und Abschnitt 5.1.1 definiert seinen Inhalt. Hinweis: Die Haupt- und Sicherungsstartsektoren enthalten beide die Felder "ClusterCount", "ClusterHeapOffset" und "SectorsPerClusterShift". |
5.1.1 Cluster[2] ... Cluster[ClusterCount+1] Felder
Jedes Clusterfeld in diesem Array ist eine Reihe zusammenhängender Sektoren, deren Größe durch das Feld "SectorsPerClusterShift" definiert wird.
6 Verzeichnisstruktur
Das exFAT-Dateisystem verwendet einen Verzeichnisstrukturansatz, um die Dateisystemstrukturen und Dateien zu verwalten, die im Cluster Heap vorhanden sind. Verzeichnisse weisen eine 1:n-Beziehung zwischen übergeordnetem und untergeordnetem Element in der Verzeichnisstruktur auf.
Das Verzeichnis, auf das sich das Feld "FirstClusterOfRootDirectory" bezieht, ist der Stamm der Verzeichnisstruktur. Alle anderen Verzeichnisse stammen aus dem Stammverzeichnis in einer singly verknüpften Weise.
Jedes Verzeichnis besteht aus einer Reihe von Verzeichniseinträgen (siehe Tabelle 13).
Mindestens ein Verzeichniseintragssatz wird in einem Verzeichniseintragssatz kombiniert, der etwas Interessantes 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. |
. . . |
. . . |
. . . |
. . . |
Verzeichniseintrag[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 der Clusterkette in Bytes, die das angegebene Verzeichnis enthält, dividiert durch die Größe eines DirectoryEntry-Felds, 32 Byte. |
6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]
Jedes DirectoryEntry-Feld in diesem Array wird von der Generischen DirectoryEntry-Vorlage abgeleitet (siehe Abschnitt 6.2).
6.2 Generische DirectoryEntry-Vorlage
Die Generische DirectoryEntry-Vorlage stellt die Basisdefinition für Verzeichniseinträge bereit (siehe Tabelle 14). Alle Verzeichniseintragsstrukturen werden von dieser Vorlage abgeleitet, und nur von Microsoft definierte Verzeichniseintragsstrukturen sind gültig (exFAT enthält keine Bestimmungen für herstellerdefinierte Verzeichniseintragsstrukturen, außer gemäß Abschnitt 7.8 und Abschnitt 7.9). Die Möglichkeit, die Generische DirectoryEntry-Vorlage zu interpretieren, ist obligatorisch.
Tabelle 14 Generische DirectoryEntry-Vorlage
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 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. |
Datenlänge | 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, eine Verzeichnisendemarkierung, und die folgenden Bedingungen gelten:
- Alle anderen Felder im angegebenen DirectoryEntry sind tatsächlich reserviert.
- Alle nachfolgenden Verzeichniseinträge im angegebenen Verzeichnis sind auch End-of-Directory-Markierungen.
- End-of-Directory-Markierungen sind nur außerhalb von Verzeichniseintragssätzen gültig.
- Implementierungen können End-of-Directory-Markierungen bei Bedarf überschreiben.
- Zwischen 01h und 7Fh einschließlich, was einen Marker für nicht verwendete Verzeichniseinträge darstellt und unter die folgenden Bedingungen fällt:
- Alle anderen Felder im angegebenen DirectoryEntry sind tatsächlich nicht definiert.
- Nicht verwendete Verzeichniseinträge sind nur außerhalb von Verzeichniseintragssätzen gültig.
- Implementierungen können bei Bedarf nicht verwendete Verzeichniseinträge überschreiben.
- Dieser Wertebereich entspricht dem Feld "InUse" (siehe Abschnitt 6.2.1.4), der den Wert 0 enthält.
- Zwischen 81h und FFh einschließlich, wobei es sich um einen regulären Verzeichniseintrag handelt und folgende Bedingungen gelten:
- Der Inhalt des EntryType-Felds (siehe Tabelle 15) bestimmen das Layout des Restlichen der DirectoryEntry-Struktur.
- Dieser Wertebereich und nur dieser Wertebereich sind innerhalb eines Verzeichniseintragssatzes gültig.
- Dieser Wertebereich entspricht direkt dem Feld "InUse" (siehe Abschnitt 6.2.1.4), der den Wert 1 enthält.
Um Änderungen am InUse-Feld zu verhindern (siehe Abschnitt 6.2.1.4), was zu einer End-of-Directory-Markierung führt, 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. |
Typenbedeutung | 5 | 1 | Dieses Feld ist obligatorisch und Section Section 6.2.1.2 definiert seinen Inhalt. |
TypeCategory (Typ) | 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 TypeCode-Feld 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-Feld
Das Feld "TypeImportance" beschreibt die Bedeutung 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.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 gutartig ist (siehe Abschnitt 6.3.1.2.2 bzw. 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-Feld
Im Feld "InUse" wird beschrieben, 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 Clusterzuordnung vorhanden ist
- Zwischen 2 und ClusterCount + 1, also dem Bereich gültiger 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-Feld
Das Feld "DataLength" beschreibt die Größe der Daten in Bytes, die die zugeordnete Clusterzuordnung enthält.
Der gültige Wertebereich für dieses Feld lautet:
- Mindestens 0; wenn das Feld "FirstCluster" den Wert 0 enthält, ist der einzige gültige Wert dieses Felds 0.
- Höchstens ClusterCount * 2SectorsPerClusterShift* 2BytesPerSectorShift
Strukturen, die von dieser Vorlage abgeleitet werden, können sowohl die Felder "FirstCluster" als auch "DataLength" neu definieren, wenn eine Clusterzuordnung für die abgeleitete Struktur nicht möglich ist.
6.3 Generische Primäre Verzeichnisentry-Vorlage
Der erste Verzeichniseintrag in einem Verzeichniseintragssatz ist ein Primärverzeichniseintrag. Alle nachfolgenden Verzeichniseinträge sind gegebenenfalls im Verzeichniseintragssatz sekundäre Verzeichniseinträge (siehe Abschnitt 6.4).
Die Möglichkeit zum Interpretieren der vorlage "Generic Primary DirectoryEntry" ist obligatorisch.
Alle primären Verzeichniseintragsstrukturen werden von der Vorlage "Generic Primary DirectoryEntry" abgeleitet (siehe Tabelle 16), die von der Vorlage "Generic DirectoryEntry" abgeleitet ist (siehe Abschnitt 6.2).
Tabelle 16 generische Primäre Verzeichnisentry-Vorlage
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 6.3.1 definiert seinen Inhalt. |
Sekundäranzahl | 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. |
AllgemeinePrimärFlags | 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 sind, definieren ihren Inhalt. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 6.3.5 definiert seinen Inhalt. |
Datenlänge | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 6.3.6 definiert seinen Inhalt. |
6.3.1 Eintragstyp-Feld
Das Feld "EntryType" muss der definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.1).
6.3.1.1 TypeCode-Feld
Das Feld "TypeCode" muss der definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.1.1).
6.3.1.2 TypeImportance-Feld
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.1.2).
6.3.1.2.1 Kritische Primärverzeichniseinträge
Kritische Primärverzeichniseinträ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ärverzeichniseinträge korreliert mit der wichtigsten exFAT-Revisionsnummer. Implementierungen unterstützen alle kritischen Primärverzeichniseinträge und erfassen nur die kritischen Primärverzeichniseintragsstrukturen, die diese Spezifikation definiert.
6.3.1.2.2 Gutartige Primärverzeichniseinträge
Gutartige Primärverzeichniseinträ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 gutartiger Primärverzeichniseinträge korreliert mit der geringfügigen exFAT-Revisionsnummer. Die Unterstützung für jeden gutartigen primären Verzeichniseintrag dieser Spezifikation oder einer nachfolgenden Spezifikation ist optional. Ein nicht erkannter gutartiger primärer Verzeichniseintrag rendert den gesamten Verzeichniseintrag als nicht erkannt (über die Definition der anwendbaren Verzeichniseintragsvorlagen hinaus).
6.3.1.3 TypKategorie-Feld
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-Feld
Das Feld "InUse" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.1.4).
6.3.2 SecondaryCount-Feld
Das Feld "SecondaryCount" beschreibt die Anzahl der sekundären Verzeichniseinträge, die unmittelbar auf den angegebenen Primärverzeichniseintrag folgen. Diese sekundären Verzeichniseinträge zusammen mit dem angegebenen primären Verzeichniseintrag umfassen den Verzeichniseintragssatz.
Der gültige Wertebereich für dieses Feld lautet:
- Mindestens 0, was bedeutet, dass dieser primäre Verzeichniseintrag der einzige Eintrag im Verzeichniseintragssatz ist.
- Höchstens 255, was bedeutet, dass die nächsten 255 Verzeichniseinträge und dieser Primärverzeichniseintrag den Verzeichniseintragssatz umfasst.
Kritische Primärverzeichniseintragsstrukturen, 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). Die Implementierungen überprüfen, ob der Inhalt dieses Felds gültig ist, bevor ein anderer Verzeichniseintrag im angegebenen Verzeichniseintragssatz verwendet wird.
Kritische Primärverzeichniseintragsstrukturen, 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ärverzeichniseintragsstrukturen, die von dieser Vorlage abgeleitet werden, können dieses Feld neu definieren.
Tabelle 17 Allgemeine GeneralPrimaryFlags-Feldstruktur
Feldname | Offset- (Bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
ZuweisungMöglich | 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" muss beschreiben, ob für den angegebenen Verzeichniseintrag eine Zuordnung im Cluster heap 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 von 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 das aktive FAT die Clusterkette der angegebenen Zuordnung beschreibt.
Die gültigen Werte für dieses Feld sind:
- 0, was bedeutet, dass die entsprechenden FAT-Einträge für die Clusterkette der Zuordnung gültig sind und die Umsetzungen 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 der einzige gültige Wert dieses Felds 0.
- 1, was bedeutet, dass die zugeordnete Zuweisung eine zusammenhängende Reihe von Clustern ist; die entsprechenden FAT-Einträge für die Cluster sind ungültig, und die Umsetzungen dürfen sie nicht interpretieren; Implementierungen können die folgende Gleichung verwenden, um die Größe der zugeordneten Zuordnung zu berechnen: DataLength / (2SectorsPerClusterShift* 2BytesPerSectorShift) aufgerundet auf die nächste ganze Zahl
Wenn kritische Primärverzeichniseingabestrukturen, die von dieser Vorlage abgeleitet werden, das Feld "GeneralPrimaryFlags" neu definieren, sind die entsprechenden FAT-Einträge für die Clusterkette der zugeordneten Zuordnung gültig.
6.3.5 FirstCluster Field
Das Feld "FirstCluster" muss der definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.2).
Wenn das NoFatChain-Bit 1 ist, muss FirstCluster auf einen gültigen Cluster im Cluster heap zeigen.
Kritische Primärverzeichniseintragsstrukturen, 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 Datenlängenfeld
Das Feld "DataLength" entspricht der definition, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.3).
Wenn das NoFatChain-Bit 1 ist, darf "DataLength" nicht null sein. Wenn das Feld "FirstCluster" null ist, muss "DataLength" ebenfalls null sein.
Kritische Primärverzeichniseintragsstrukturen, 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 Generische Vorlage für sekundäre Verzeichnisse
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 geringfügigen exFAT-Revisionsnummer. Unterstützung für kritische oder gutartige sekundäre Verzeichniseinträge, die diese Spezifikation oder nachfolgende Spezifikationen definieren, ist optional.
Alle sekundären Verzeichniseintragsstrukturen werden von der Vorlage "Generic Secondary DirectoryEntry" abgeleitet (siehe Tabelle 18), die von der Vorlage "Generic DirectoryEntry" abgeleitet ist (siehe Abschnitt 6.2).
Tabelle 18 generic Secondary DirectoryEntry Template
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 0 | 1 | Dieses Feld ist obligatorisch, und Abschnitt 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 sind, definieren ihren Inhalt. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 6.4.3 definiert seinen Inhalt. |
Datenlänge | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 6.4.4 definiert seinen Inhalt. |
6.4.1 EntryType Field
Das Feld "EntryType" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.1)
6.4.1.1 TypeCode-Feld
Das Feld "TypeCode" muss der definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.1.1).
6.4.1.2 TypeImportance-Feld
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic DirectoryEntry" (siehe Abschnitt 6.2.1.2).
6.4.1.2.1 Kritische sekundäre Verzeichniseinträge
Kritische sekundäre Verzeichniseinträge enthalten Informationen, die für die ordnungsgemäße Verwaltung des enthaltenen Verzeichniseintragssatzes von entscheidender Bedeutung sind. Während die Unterstützung für einen bestimmten kritischen sekundären Verzeichniseintrag optional ist, rendert ein unbekannter kritischer Verzeichniseintrag den gesamten Verzeichniseintragssatz als nicht erkannt (über die Definition der anwendbaren Verzeichniseintragsvorlagen hinaus).
Wenn ein Verzeichniseintragssatz jedoch mindestens einen kritischen sekundären Verzeichniseintrag enthält, den eine Implementierung nicht erkennt, interpretiert die Implementierung die Vorlagen der Verzeichniseinträge im Verzeichniseintragssatz höchstens und nicht die Daten, die einem Verzeichniseintrag im Verzeichniseintragssatz zugeordnet sind, enthalten (Dateiverzeichniseinträge sind eine Ausnahme, siehe Abschnitt 7.4).
6.4.1.2.2 Gutartige Sekundärverzeichniseinträge
Gutartige sekundäre Verzeichniseinträge enthalten zusätzliche Informationen, die für die Verwaltung des enthaltenen Verzeichniseintragssatzes nützlich sein können. Die Unterstützung für einen bestimmten gutartigen sekundären Verzeichniseintrag ist optional. Nicht erkannte nicht erkannte sekundäre Verzeichniseinträge rendern nicht den gesamten Verzeichniseintrag, der als nicht erkannt festgelegt wurde.
Implementierungen können alle gutartigen sekundären Einträge ignorieren, die nicht erkannt werden.
6.4.1.3 TypKategorie-Feld
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-Feld
Das Feld "InUse" 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 Allgemeine GeneralSecondaryFlags-Feldstruktur
Feldname | Offset- (Bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
ZuweisungMöglich | 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 ZuweisungMöglichkeitsfeld
Das Feld "AllocationPossible" hat dieselbe Definition wie das feld mit demselben Namen in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.4.1).
6.4.2.2 NoFatChain-Feld
Das Feld "NoFatChain" muss dieselbe Definition wie dasselbe benannte Feld in der Vorlage "Generic Primary DirectoryEntry" haben (siehe Abschnitt 6.3.4.2).
6.4.3 FirstCluster Field
Das Feld "FirstCluster" muss der definition entsprechen, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.2).
Wenn das NoFatChain-Bit 1 ist, muss FirstCluster auf einen gültigen Cluster im Cluster heap zeigen.
6.4.4 Datenlängenfeld
Das Feld "DataLength" entspricht der definition, die in der Vorlage "Generic DirectoryEntry" angegeben ist (siehe Abschnitt 6.2.3).
Wenn das NoFatChain-Bit 1 ist, darf "DataLength" nicht null sein. Wenn das Feld "FirstCluster" null ist, muss "DataLength" ebenfalls null sein.
7 Verzeichniseintragsdefinitionen
Revision 1.00 des exFAT-Dateisystems definiert die folgenden Verzeichniseinträge:
- Kritisches Primärelement
- Allocation Bitmap (Abschnitt 7.1)
- Up-case-Tabelle (Abschnitt 7.2)
- Volume Label (Abschnitt 7.3)
- Datei (Abschnitt 7.4)
- Gutartiger Primärtumor
- Volume-GUID (Abschnitt 7.5)
- TexFAT-Abstand (Abschnitt 7.10)
- Kritischer sekundärer
- Streamerweiterung (Abschnitt 7.6)
- Dateiname (Abschnitt 7.7)
- Gutartige sekundäre
- Anbietererweiterung (Abschnitt 7.8)
- Lieferantenzuweisung (Abschnitt 7.9)
7.1 Zuordnungs-Bitmapverzeichniseintrag
Im ExFAT-Dateisystem beschreibt ein FAT nicht den Zuordnungszustand von Clustern; stattdessen führt eine Zuordnungsbitmap aus. Zuordnungsbitmaps sind im Cluster-Heap vorhanden (siehe Abschnitt 7.1.5) und weisen entsprechende wichtige primäre Verzeichniseinträge im Stammverzeichnis auf (siehe Tabelle 20).
Das Feld "NumberOfFats" bestimmt die Anzahl der gültigen Zuordnungsbitbit-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 ein Zuordnungs-Bitmap-Verzeichniseintrag nur gültig, wenn er die erste Zuordnungsbitmap beschreibt (siehe Abschnitt 7.1.2.1). Wenn das Feld "NumberOfFats" den Wert 2 enthält, ist die einzige gültige Anzahl der Zuordnungs-Bitmap-Verzeichniseinträge 2. Außerdem sind die beiden Zuordnungsbitmap-Verzeichniseinträge nur gültig, wenn eine die Erste Zuordnungsbitmap beschreibt und die zweite Zuordnungsbitmap beschreibt.
Tabelle 20 Zuordnung Bitmap DirectoryEntry Structure
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 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. |
Datenlänge | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 7.1.4 definiert seinen Inhalt. |
7.1.1 EntryType Field
Das Feld "EntryType" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1).
7.1.1.1 TypeCode-Feld
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 Zuordnungsbitmap-Verzeichniseintrag ist der gültige Wert für dieses Feld 1.
7.1.1.2 TypeImportance-Feld
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (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 Typkategorie-Feld
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.3).
7.1.1.4 InUse-Feld
Das Feld "InUse" muss der Definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1.4).
7.1.2 BitmapFlags-Feld
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 Feld "BitmapIdentifier" gibt an, welche Zuordnungsbitmap den angegebenen Verzeichniseintrag beschreibt. Implementierungen müssen die First Allocation Bitmap in Verbindung mit dem ersten FAT verwenden und die zweite Zuordnungsbitmap in Verbindung mit dem zweiten FAT verwenden. Das Feld "ActiveFat" beschreibt, welche FAT- und Zuordnungsbitmap aktiv sind.
Die gültigen Werte für dieses Feld sind:
- 0, was bedeutet, dass der angegebene Verzeichniseintrag die First Allocation Bitmap beschreibt
- 1, was bedeutet, dass der angegebene Verzeichniseintrag die Second Allocation Bitmap beschreibt und nur möglich ist, wenn NumberOfFats den Wert 2 enthält.
7.1.3 FirstCluster Field
Das Feld "FirstCluster" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.5).
Dieses Feld enthält den Index des ersten Clusters der Clusterkette, wie die FAT beschreibt, die die Zuordnungsbitmap hostet.
7.1.4 DataLength-Feld
Das Feld "DataCluster" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.6).
7.1.5-Zuordnungsbitmap
Eine Zuordnungsbitmap zeichnet den Zuordnungsstatus der Cluster im Cluster heap auf. Jedes Bit in einer Zuordnungsbitmap gibt an, ob der entsprechende Cluster für die Zuordnung verfügbar ist oder nicht.
Eine Zuordnungsbitmap 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 Bit der niedrigsten Reihenfolge des ersten Bytes.
Tabelle 22 Zuordnung 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 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 der Inhalt ist 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] für den letzten Cluster im Cluster heap dar.
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 verbrauchen oder das aktive FAT den entsprechenden Cluster als schlecht bezeichnen)
7.2 Verzeichniseintrag im Groß-/Kleinschreibungsverzeichnis
Die Groß-/Kleinschreibungstabelle definiert die Konvertierung von Kleinbuchstaben in Groß-/Kleinbuchstaben. Dies ist aufgrund des Verzeichniseintrags "Dateiname" (siehe Abschnitt 7.7) mit Unicode-Zeichen und dem exFAT-Dateisystem, bei dem die Groß- und Kleinschreibung nicht beachtet wird, wichtig. Die Groß-/Kleinschreibungstabelle ist im Cluster heap vorhanden (siehe Abschnitt 7.2.5) und verfügt über einen entsprechenden wichtigen primären Verzeichniseintrag im Stammverzeichnis (siehe Tabelle 23). Die gültige Anzahl der Einträge im Verzeichnis des Up-Case-Verzeichnisses ist 1.
Aufgrund der Beziehung zwischen der Groß-/Kleinschreibungstabelle und Dateinamen sollten Implementierungen die Groß-/Kleinschreibungstabelle nicht ändern, außer aufgrund von Formatvorgängen.
Tabelle 23 Table DirectoryEntry Structure
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.2.1 definiert seinen Inhalt. |
Reserviert1 | 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. |
Reserviert2 | 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. |
Datenlänge | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 7.2.4 definiert seinen Inhalt. |
7.2.1 EntryType Field
Das Feld "EntryType" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1).
7.2.1.1 TypeCode-Feld
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 Eintrag "Tabelle im Up-Case-Verzeichnis" ist der gültige Wert für dieses Feld "2".
7.2.1.2 TypeImportance-Feld
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (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 Feld "InUse" muss der Definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1.4).
7.2.2 TableChecksum Field
Das Feld "TableChecksum" enthält die Prüfsumme der Tabelle "Up-case" (die die Felder "FirstCluster" und "DataLength" beschreiben). Die Implementierungen überprüfen, ob der Inhalt dieses Felds gültig ist, bevor die Up-Case-Tabelle verwendet wird.
Abbildung 3 TableChecksum-Berechnung
UInt32 TableChecksum
(
UCHAR * Table, // points to an in-memory copy of the up-case table
UInt64 DataLength
)
{
UInt32 Checksum = 0;
UInt64 Index;
for (Index = 0; Index < DataLength; Index++)
{
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Table[Index];
}
return Checksum;
}
7.2.3 FirstCluster Field
Das Feld "FirstCluster" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (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" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.6).
7.2.5 Tabelle für Groß-/Kleinschreibung
Eine Up-Case-Tabelle ist eine Reihe von Unicode-Zeichenzuordnungen. Eine Zeichenzuordnung besteht aus einem 2-Byte-Feld, wobei der Index des Felds in der Groß-/Kleinschreibungstabelle das Unicode-Zeichen darstellt, das groß geschrieben werden soll, und das 2-Byte-Feld, das das groß geschriebene Unicode-Zeichen darstellt.
Die ersten 128 Unicode-Zeichen weisen obligatorische Zuordnungen auf (siehe Tabelle 24). Eine Groß-/Kleinschreibungstabelle mit einer anderen Zeichenzuordnung für eines der ersten 128 Unicode-Zeichen ist ungültig.
Implementierungen, die nur Zeichen aus dem obligatorischen Zuordnungsbereich unterstützen, können die Zuordnungen der restlichen Falltabelle ignorieren. Solche Implementierungen dürfen nur Zeichen aus dem obligatorischen Zuordnungsbereich verwenden, wenn Dateien erstellt oder umbenannt werden (siehe Abschnitt 7.7). Bei der Groß-/Kleinschreibung vorhandener Dateinamen dürfen solche Implementierungen keine Groß-/Kleinschreibung aus dem nicht obligatorischen Zuordnungsbereich aufweisen, bleiben aber im resultierenden Dateinamen unverändert (dies ist eine partielle Groß-/Kleinschreibung). Beim Vergleich von Dateinamen müssen solche Implementierungen Dateinamen behandeln, die sich von dem namen unterscheiden, der sich nur von Unicode-Zeichen vom nicht obligatorischen Zuordnungsbereich unterscheidet. Obwohl solche Dateinamen nur potenziell gleichwertig sind, können solche Implementierungen nicht sicherstellen, dass der vollständig im Groß-/Kleinschreibung enthaltene Dateiname nicht mit dem namen im Vergleich kollidiert.
Tabelle 24 Obligatorische erste 128 Einträge der Groß-/Kleinschreibung
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)
Beim Formatieren eines Volumes können Implementierungen eine Groß-/Kleinschreibungstabelle in einem komprimierten Format mithilfe der Identitätszuordnungskomprimierung generieren, da ein großer Teil des Unicode-Zeichenbereichs kein Konzept der Groß-/Kleinschreibung aufweist (was bedeutet, dass die Zeichen "Kleinschreibung" und "Groß-/Kleinschreibung" gleichwertig sind). Implementierungen komprimieren eine Groß-/Kleinschreibungstabelle, indem eine Reihe von Identitätszuordnungen mit dem Wert FFFFh dargestellt wird, gefolgt von der Anzahl der Identitätszuordnungen.
Eine Implementierung kann z. B. die ersten 100 Zeichenzuordnungen (64h) mit den folgenden acht Einträgen einer komprimierten Groß-/Kleinschreibungstabelle darstellen:
FFFFh, 0061h, 0041h, 0042h, 0043h
Die ersten beiden Einträge geben an, dass die ersten 97 (61h) Zeichen (von 0000h bis 0060h) Identitätszuordnungen aufweisen. Die nachfolgenden Zeichen, 0061h bis 0063h, ordnen die Zeichen 0041h bis 0043h bzw. 0043h zu.
Die Möglichkeit, eine komprimierte Groß-/Kleinschreibungstabelle beim Formatieren eines Volumes bereitzustellen, ist optional. Die Möglichkeit, sowohl eine nicht komprimierte als auch eine komprimierte Falltabelle zu interpretieren, ist jedoch obligatorisch. Der Wert des Felds "TableChecksum" entspricht immer der Art, wie die Groß-/Kleinschreibungstabelle auf dem Volume vorhanden ist, die entweder komprimiert oder nicht komprimiert sein kann.
7.2.5.1 Empfohlene Up-Case-Tabelle
Beim Formatieren eines Volumes sollten Implementierungen die empfohlene Groß-/Kleinschreibungstabelle im komprimierten Format aufzeichnen (siehe Tabelle 25), für die der Wert des Felds "TableChecksum" E619D30Dh lautet.
Wenn eine Implementierung eine eigene up-case-Tabelle definiert, entweder komprimiert oder unkomprimiert, muss diese Tabelle den vollständigen Unicode-Zeichenbereich abdecken (von Zeichencodes 0000h bis einschließlich FFFFh).
Tabelle 25 Empfohlene Groß-/Kleinschreibungstabelle im komprimierten Format
Unformatierter 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 | 02:00 Uhr | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 02:10 Uhr | 0210h | 0212h | 02:12 Uhr | 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 | 03:06 Uhr | 0307h |
0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 0312h | 0313h | 03:14 h | 0315h | 0316h | 0317h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
0328h | 03:28 Uhr | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 03:32 Uhr | 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 | 03:59 Uhr | 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 | 04:05 Uhr | 0406h | 0407h |
0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0410h | 0410h | 0411h | 04:12 Uhr | 04:13 Uhr | 0414h | 0415h | 0416h | 0417h |
0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0420h | 0420h | 0421h | 0422h | 04:23 Uhr | 0424h | 0425h | 0426h | 0427h |
0428h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0430h | 0410h | 0411h | 04:12 Uhr | 04:13 Uhr | 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 | 04:05 Uhr | 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 | 0490 Uhr | 0490h | 0492h | 0492h | 0494h | 0494h | 0496h | 0496h |
0498h | 0498h | 0498h | 049Ah | 049Ah | 049Ch | 049Ch | 049Eh | 049Eh |
04A0h- | 04A0h | 04A0h | 04A2h | 04A2h | 04A4h | 04A4h | 04A6h | 04A6h |
04A8h | 04A8h | 04A8h | 04AAh | 04AAh | 04ACh | 04ACh | 04AEh | 04AEh |
04B0h- | 04B0h | 04B0h | 04B2h | 04B2h | 04B4h | 04B4h | 04B6h | 04B6h |
04B8h | 04B8h | 04B8h | 04BAh | 04BAh | 04BCh | 04BCh | 04BEh | 04BEh |
04C0h- | 04C0h | 04C1h | 04C1h | 04C3h | 04C3h | 04C5h | 04C5h | 04C7h |
04C8h- | 04C7h | 04C9h | 04C9h | 04CBh | 04CBh | 04CDh | 04CDh | 04C0h |
04D0h- | 04D0h | 04D0h | 04D2h | 04D2h | 04D4h | 04D4h | 04D6h | 04D6h |
04D8h- | 04D8h | 04D8h | 04DAh | 04DAh | 04DCh | 04DCh | 04DEh | 04DEh |
04E0h- | 04E0h | 04E0h | 04E2h | 04E2h | 04E4h | 04E4h | 04E6h | 04E6h |
04E8h- | 04E8h | 04E8h | 04EAh | 04EAh | 04ECh | 04ECh | 04EEh | 04EEh |
04F0h- | 04F0h | 04F0h | 04F2h | 04F2h | 04F4h | 04F4h | 04F6h | 04F6h |
04F8h | 04F8h | 04F8h | 04FAh | 04FAh | 04FCh | 04FCh | 04FEh | 04FEh |
0500h | 05:00 Uhr | 05:00 | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h- | 0510h | 0510h | 0512h | 0512h | 0514h | 0515h | 0516h | 0517h |
0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 0521h | 0522h | 0523h | 0524h | 0525h | 05:26 Uhr | 0527h |
0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
0530h | 0530h | 0531h | 05:32 Uhr | 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 | 05:44 Uhr | 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 | 20:30 Uhr | 2031h | 2032h | 2033h |
0840h | 20:34 Uhr | 20:35 Uhr | 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 | 20:50 Uhr | 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- | 20 Tage 4 Stunden | 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 | 21:01 Uhr | 2102h | 2103h |
0910h | 2104h | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 21:12 Uhr | 2113h |
0920h | 2114h | 21:15 Uhr | 2116h | 2117h | 21:18 Uhr | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 2120h | 2121h | 2122h | 2123h |
0930h | 2124h | 2125 Uhr | 2126h | 2127h | 2128h | 2129h | 212Ah | 212Bh |
0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131 Uhr | 2132h | 2133h |
0940h | 2134h | 2135h | 2136h | 2137h | 2138h | 2139h | 213Ah | 213Bh |
0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
0950h | 2144h | 2145h | 2146h | 2147 Stunden | 2148h | 2149 h | 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 | 2165 Stunden | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 24BBh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 07:46 Uhr | 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 Volumebezeichnungen
Die Volumebezeichnung ist eine Unicode-Zeichenfolge, mit der Endbenutzer ihre Speichervolumes unterscheiden können. Im exFAT-Dateisystem ist die Volumebezeichnung als kritischer primärer Verzeichniseintrag im Stammverzeichnis vorhanden (siehe Tabelle 26). Die gültige Anzahl von Verzeichniseinträgen für Volumebezeichnungen reicht von 0 bis 1.
Tabelle 26 Volume Label DirectoryEntry Structure
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.3.1 definiert seinen Inhalt. |
Zeichenanzahl | 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" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1).
7.3.1.1 TypeCode-Feld
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 Verzeichniseintrag "Volume Label" ist der gültige Wert für dieses Feld 3.
7.3.1.2 TypeImportance-Feld
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.2).
Für den Verzeichniseintrag "Volume Label" ist der gültige Wert für dieses Feld 0.
7.3.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.3).
7.3.1.4 InUse-Feld
Das Feld "InUse" muss der Definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1.4).
7.3.2 CharacterCount-Feld
Das Feld "CharacterCount" 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 (was die Entsprechung ohne Volumebezeichnung ist)
- Höchstens 11, was bedeutet, dass die Unicode-Zeichenfolge 11 Zeichen lang ist.
7.3.3 VolumeLabel-Feld
Das VolumeLabel-Feld muss eine Unicode-Zeichenfolge enthalten, bei der es sich um den benutzerfreundlichen Namen des Volumes handelt. Das VolumeLabel-Feld weist den gleichen Satz ungültiger Zeichen auf wie das Feld "FileName" 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). Damit ein Dateiverzeichniseintrag gültig ist, müssen genau ein Verzeichniseintrag der Datenerweiterung und mindestens ein Dateiname-Verzeichniseintrag unmittelbar dem Dateiverzeichniseintrag folgen (siehe Abschnitt 7.6 bzw. Abschnitt 7.7).
Tabelle 27 File DirectoryEntry
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.4.1 definiert seinen Inhalt. |
Sekundäranzahl | 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. |
Reserviert1 | 6 | 2 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
Zeitstempel erstellen | 8 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.4.5 definiert seinen Inhalt. |
Zeitstempel der letzten Änderung | 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 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 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. |
Reserviert2 | 25 | 7 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
7.4.1 Eintragstyp-Feld
Das Feld "EntryType" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1).
7.4.1.1 TypeCode-Feld
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-Feld
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.2).
Für einen Dateiverzeichniseintrag ist der gültige Wert für dieses Feld 0.
7.4.1.3 TypKategorie-Feld
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.3).
7.4.1.4 InUse-Feld
Das Feld "InUse" muss der Definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1.4).
7.4.2 SecondaryCount-Feld
Das Feld "SecondaryCount" muss der Definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.2).
7.4.3 SetChecksum-Feld
Das Feld "SetChecksum" entspricht der definition, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.3).
7.4.4 Dateiattribute-Feld
Das Feld "FileAttributes" enthält Flags (siehe Tabelle 28).
Tabelle 28 FileAttributes Field Structure
Feldname | Offset- (Bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
ReadOnly | 0 | 1 | Dieses Feld ist obligatorisch und entspricht der MS-DOS Definition. |
Versteckt | 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. |
Reserviert1 | 3 | 1 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
Verzeichnis | 4 | 1 | Dieses Feld ist obligatorisch und entspricht der MS-DOS Definition. |
Archiv | 5 | 1 | Dieses Feld ist obligatorisch und entspricht der MS-DOS Definition. |
Reserviert2 | 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 aus UTC. Die Durchführungen legen diese Felder bei der Erstellung des angegebenen Verzeichniseintragssatzes fest.
Diese Felder entsprechen den Definitionen der Felder "Zeitstempel", "10 msIncrement" und "UtcOffset" (siehe abschnitt 7.4.8, Abschnitt 7.4.9und Abschnitt 7.4.10).
7.4.6 LastModifiedTimestamp, LastModified10msIncrement und LastModifiedUtcOffset Fields
In Kombination müssen die Felder "LastModifiedTimestamp" und "LastModifiedTime10msIncrement" das lokale Datum und die Uhrzeit beschreiben, zu denen der Inhalt eines der Cluster, die dem angegebenen Eintrag der Datenerweiterung zugeordnet sind, zuletzt geändert wurden. Das Feld "LastModifiedUtcOffset" beschreibt den Offset des lokalen Datums und der Uhrzeit von UTC. Die Implementierungen müssen diese Felder aktualisieren:
- Nach dem Ändern des Inhalts eines der Cluster, die dem angegebenen Stream Extension-Verzeichniseintrag zugeordnet sind (mit Ausnahme von Inhalten, die über den Punkt hinausgehen, der im Feld "ValidDataLength" beschrieben wird)
- Beim Ändern der Werte der Felder "ValidDataLength" oder "DataLength"
Diese Felder entsprechen den Definitionen der Felder "Zeitstempel", "10 msIncrement" und "UtcOffset" (siehe abschnitt 7.4.8, Abschnitt 7.4.9und 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 im Zusammenhang mit dem angegebenen Verzeichniseintrag der Stream-Erweiterung zuletzt zugegriffen wurde. Das Feld "LastAccessedUtcOffset" beschreibt den Offset des lokalen Datums und der Uhrzeit von UTC. Die Implementierungen müssen diese 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 die ValidDataLength hinausgehen)
- Beim Ändern der Werte der Felder "ValidDataLength" oder "DataLength"
Implementierungen sollten diese Felder aktualisieren, nachdem der Inhalt eines der Cluster gelesen wurde, die dem angegebenen Verzeichniseintrag der Stream-Erweiterung zugeordnet sind.
Diese Felder entsprechen den Definitionen der Felder "Zeitstempel" und "UtcOffset" (siehe Abschnitt 7.4.8 bzw. Abschnitt 7.4.10).
7.4.8 Zeitstempelfelder
Zeitstempelfelder beschreiben lokales Datum und Uhrzeit bis zu einer Zwei-Sekunden-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. |
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, die 0 Sekunden darstellt
- 29, die 58 Sekunden darstellt
7.4.8.2 MinutenFeld
Das Feld "Minute" beschreibt den Minutenteil des Zeitstempelfelds.
Der gültige Wertebereich für dieses Feld lautet:
- 0, die 0 Minuten darstellt
- 59, die 59 Minuten darstellt
7.4.8.3 StundenFeld
Das Feld "Stunde" beschreibt den Stundenteil des Felds "Zeitstempel".
Der gültige Wertebereich für dieses Feld lautet:
- 0, die 00:00 Stunden darstellt
- 23, die 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, das ist der erste Tag des angegebenen Monats
- Der letzte Tag des angegebenen Monats (der angegebene Monat definiert die Anzahl gültiger Tage)
7.4.8.5 Monatsfeld
Im Feld "Monat" wird der Monatsteil des Felds "Zeitstempel" beschrieben.
Der gültige Wertebereich für dieses Feld lautet:
- Mindestens 1, das Januar darstellt
- Höchstens 12, der Dezember darstellt
7.4.8.6 Jahr Feld
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 10 msIncrement Fields
10 msIncrement-Felder müssen zusätzliche Zeitauflösungen für die entsprechenden Zeitstempelfelder in zehn Millisekunden-Vielfachen bereitstellen.
Der gültige Wertebereich für diese Felder lautet:
- Mindestens 0, das 0 Millisekunden darstellt
- Höchstens 199, das 1990 Millisekunden darstellt
7.4.10 UtcOffset-Felder
UtcOffset-Felder (siehe Tabelle 30) müssen den Offset von UTC bis zum lokalen Datum und zur Uhrzeit beschreiben, deren entsprechende Zeitstempel- und 10 msIncrement-Felder beschreiben. Der Offset von UTC zum lokalen Datum und zur lokalen Uhrzeit umfasst die Auswirkungen von Zeitzonen und anderen Datums-/Uhrzeitanpassungen, z. B. Sommerzeitänderungen und Regionale Sommerzeitänderungen.
Tabelle 30 UtcOffset-Feldstruktur
Feldname | Offset- (Bit) |
Größe (Bits) |
Kommentare |
---|---|---|---|
AbweichungVonUTC | 0 | 7 | Dieses Feld ist obligatorisch und Abschnitt 7.4.10.1definiert seinen Inhalt. |
OffsetGültig | 7 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.4.10.2 definiert seinen Inhalt. |
7.4.10.1 OffsetFromUtc-Feld
Das Feld "OffsetFromUtc" beschreibt den Offset von UTC des lokalen Datums und der Uhrzeit, die die zugehörigen Felder "Timestamp" und "10 msIncrement" enthalten. In diesem Feld wird der Offset von UTC in 15 Minutenintervallen beschrieben (siehe Tabelle 31).
Tabelle 31 Bedeutung der Werte des OffsetFromUtc-Felds
Wert | signierte Dezimalentsprechung | Beschreibung |
---|---|---|
3Fh | 63 | Lokales Datum und Uhrzeit ist UTC + 15:45 |
3Eh | 62 | Lokales Datum und Uhrzeit ist UTC + 15:30 |
. . . |
. . . |
. . . |
01 Uhr | 1 | Lokales Datum und Uhrzeit ist UTC + 00:15 |
00h | 0 | Lokales Datum und Uhrzeit ist UTC |
7Fh | –1 | Lokales Datum und Uhrzeit ist UTC – 00:15 |
. . . |
. . . |
. . . |
41 Stunden | -63 | Lokales Datum und Uhrzeit ist UTC – 15:45 |
40h | -64 | Lokales Datum und Uhrzeit ist UTC – 16:00 Uhr |
Wie in der obigen Tabelle angegeben, sind alle möglichen Werte für dieses Feld gültig. Implementierungen sollten jedoch nur den Wert 00h für dieses Feld aufzeichnen, wenn:
- Lokales Datum und uhrzeit sind tatsächlich identisch mit UTC, in diesem Fall muss der Wert des Felds OffsetValid 1 sein.
- Lokales Datum und Uhrzeit sind nicht bekannt, in diesem Fall muss der Wert des Felds OffsetValid 1 sein, und Implementierungen sollten UTC als lokales Datum und Uhrzeit betrachten.
- UTC ist nicht bekannt, in diesem Fall muss der Wert des Felds OffsetValid 0 sein.
Wenn der lokale Datums- und Uhrzeitoffset von UTC kein Vielfaches von 15 Minuten Intervallen ist, werden die Implementierungen im Feld OffsetFromUtc 00h aufzeichnen und erwägen, UTC als lokales Datum und Uhrzeit festzulegen.
7.4.10.2 OffsetValid-Feld
Das Feld OffsetValid beschreibt, ob der Inhalt des Felds "OffsetFromUtc" wie folgt gültig ist oder nicht:
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 nicht für die Berechnung des Werts des OffsetFromUtc-Felds verfügbar ist. Wenn dieses Feld den Wert 0 enthält, behandeln Implementierungen die Felder "Timestamp" und "10msIncrement" mit demselben UTC-Offset wie das aktuelle lokale Datum und die aktuelle Uhrzeit.
7.5 Volume-GUID-Verzeichniseintrag
Der Verzeichniseintrag "Volume GUID" enthält eine GUID, mit der Implementierungen Volumes eindeutig und programmgesteuert unterscheiden können. Die Volume-GUID ist als gutartiger primärer Verzeichniseintrag im Stammverzeichnis vorhanden (siehe Tabelle 32). Die gültige Anzahl der Volume-GUID-Verzeichniseinträge reicht von 0 bis 1.
Tabelle 32 Volume GUID DirectoryEntry
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 0 | 1 | Dieses Feld ist obligatorisch und Abschnitt 7.5.1 definiert seinen Inhalt. |
Sekundäranzahl | 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. |
AllgemeinePrimärFlags | 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 Eintragstyp-Feld
Das Feld "EntryType" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1).
7.5.1.1 TypeCode-Feld
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 Verzeichniseintrag "Volume GUID" ist der gültige Wert für dieses Feld 0.
7.5.1.2 TypeImportance-Feld
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.2).
Für den Verzeichniseintrag "Volume GUID" ist der gültige Wert für dieses Feld 1.
7.5.1.3 TypeCategory Field
Das Feld "TypeCategory" entspricht der Definition in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.1.3).
7.5.1.4 InUse-Feld
Das Feld "InUse" muss der Definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.1.4).
7.5.2 SecondaryCount-Feld
Das Feld "SecondaryCount" muss der Definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.2).
Für den Verzeichniseintrag "Volume GUID" ist der gültige Wert für dieses Feld 0.
7.5.3 SetChecksum-Feld
Das Feld "SetChecksum" entspricht der definition, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.3).
7.5.4 AllgemeinePrimärFlags-Feld
Das Feld "GeneralPrimaryFlags" muss der Definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" (siehe Abschnitt 6.3.4) angegeben ist und den Inhalt des zu reservierenden CustomDefined-Felds definiert.
7.5.4.1 AllocationPossible Field
Das Feld "AllocationPossible" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.4.1).
Für den Verzeichniseintrag "Volume GUID" ist der gültige Wert für dieses Feld 0.
7.5.4.2 NoFatChain-Feld
Das Feld "NoFatChain" muss der definition entsprechen, die in der Vorlage "Generic Primary DirectoryEntry" angegeben ist (siehe Abschnitt 6.3.4.2).
7.5.5 VolumeGuid-Feld
Das Feld "VolumeGuid" muss eine GUID enthalten, die das angegebene Volume eindeutig identifiziert.
Alle möglichen Werte für dieses Feld sind gültig, mit Ausnahme der NULL-GUID, die {00000000-0000-0000-0000-000000000000}ist.
7.6 Verzeichniseintrag der Streamerweiterung
Der Verzeichniseintrag "Stream Extension" ist ein wichtiger sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 33). Die gültige Anzahl der Verzeichniseinträge der Stream-Erweiterung in einem Dateiverzeichniseintragssatz ist 1. Darüber hinaus ist dieser Verzeichniseintrag nur gültig, wenn er unmittelbar auf den Dateiverzeichniseintrag folgt.
Tabelle 33 Stream Extension DirectoryEntry
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 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. |
Reserviert1 | 2 | 1 | Dieses Feld ist obligatorisch, und der Inhalt ist reserviert. |
Namenslänge | 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. |
Reserviert2 | 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. |
Datenlänge | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 7.6.7 definiert seinen Inhalt. |
7.6.1 EntryType Field
Das Feld "EntryType" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.1).
7.6.1.1 TypeCode-Feld
Das Feld "TypeCode" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.1.1).
Für den Verzeichniseintrag "Stream Extension" ist der gültige Wert für dieses Feld 0.
7.6.1.2 TypeImportance-Feld
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.2).
Für den Verzeichniseintrag "Stream Extension" ist der gültige Wert für dieses Feld 0.
7.6.1.3 TypeCategory Field
Das Feld "TypeCategory" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.1.3).
7.6.1.4 InUse-Feld
Das Feld "InUse" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.4).
7.6.2 AllgemeineSekundärFlags Feld
Das Feld "GeneralSecondaryFlags" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2) angegeben ist und den Inhalt des zu reservierten CustomDefined-Felds definiert.
7.6.2.1 AllocationPossible-Feld
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 1.
7.6.2.2 NoFatChain-Feld
Das Feld "NoFatChain" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.2.2).
7.6.3 NameLength-Feld
Das Feld "NameLength" enthält die Länge der Unicode-Zeichenfolge, die die nachfolgenden Dateinamenverzeichniseinträge (siehe Abschnitt 7.7) zusammen enthalten.
Der gültige Wertebereich für dieses Feld lautet:
- Mindestens 1, das ist der kürzeste mögliche Dateiname
- Höchstens 255, das ist der längste mögliche Dateiname
Der Wert des Felds NameLength wirkt sich auch auf die Anzahl der Dateinamenverzeichniseinträge aus (siehe Abschnitt 7.7).
7.6.4 NameHash-Feld
Das Feld "NameHash" enthält einen 2-Byte-Hash (siehe Abbildung 4) des Dateinamens mit Groß-/Kleinschreibung. Auf diese Weise können Implementierungen beim Suchen nach einer Datei anhand des Namens einen schnellen Vergleich durchführen. Wichtig ist, dass der NameHash eine sichere Überprüfung eines Konflikts bietet. Die Implementierungen überprüfen alle NameHash-Übereinstimmungen mit einem Vergleich des Dateinamens im Groß-/Kleinschreibungsfall.
Abbildung 4 NameHash-Berechnung
UInt16 NameHash
(
WCHAR * FileName, // points to an in-memory copy of the up-cased file name
UCHAR NameLength
)
{
UCHAR * Buffer = (UCHAR *)FileName;
UInt16 NumberOfBytes = (UInt16)NameLength * 2;
UInt16 Hash = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
Hash = ((Hash&1) ? 0x8000 : 0) + (Hash>>1) + (UInt16)Buffer[Index];
}
return Hash;
}
7.6.5 ValidDataLength-Feld
Das Feld "ValidDataLength" beschreibt, wie weit die Datenstrombenutzerdaten geschrieben wurden. Implementierungen müssen dieses Feld aktualisieren, wenn sie Daten weiter in den Datenstrom schreiben. Auf dem Speichermedium werden die Daten zwischen der gültigen Datenlänge und der Datenlänge des Datenstroms nicht definiert. Implementierungen geben Nullen für Lesevorgänge zurück, die über die gültige Datenlänge hinausgehen.
Wenn der entsprechende Dateiverzeichniseintrag ein Verzeichnis beschreibt, ist der einzige gültige Wert für dieses Feld gleich dem Wert des DataLength-Felds. Andernfalls lautet der Bereich der gültigen Werte für dieses Feld:
- Mindestens 0, was bedeutet, dass keine Benutzerdaten in den Datenstrom geschrieben wurden
- Bei den meisten DataLength, was bedeutet, dass Benutzerdaten in die gesamte Länge des Datenstroms geschrieben wurden.
7.6.6 FirstCluster Field
Das Feld "FirstCluster" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.3).
Dieses Feld enthält den Index des ersten Clusters des Datenstroms, der die Benutzerdaten hosten soll.
7.6.7 Datenlängenfeld
Das Feld "DataLength" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.4).
Wenn der entsprechende Dateiverzeichniseintrag ein Verzeichnis beschreibt, ist der gültige Wert für dieses Feld die gesamte Größe der zugeordneten Zuordnung in Bytes, die 0 sein kann. Für Verzeichnisse beträgt der Maximalwert für dieses Feld 256 MB.
7.7 Dateiname Verzeichniseintrag
Dateinamenverzeichniseinträge sind wichtige sekundäre Verzeichniseinträge in Dateiverzeichniseintragssätzen (siehe Tabelle 34). Die gültige Anzahl der Dateinamenverzeichniseinträge in einem Dateiverzeichniseintragssatz ist NameLength / 15, aufgerundet auf die nächste ganze Zahl. Darüber hinaus sind Dateinamenverzeichniseinträge nur gültig, wenn sie sofort dem Verzeichniseintrag "Stream Extension" als aufeinander folgende Datenreihe folgen. Dateinamenverzeichniseinträge werden kombiniert, um den Dateinamen für den Dateiverzeichniseintragssatz zu bilden.
Alle untergeordneten Elemente eines bestimmten Verzeichniseintrags müssen eindeutige Verzeichniseintragssätze aufweisen. Das heißt, es können keine doppelten Datei- oder Verzeichnisnamen nach der Groß-/Kleinschreibung in einem verzeichnis vorhanden sein.
Tabelle 34 Dateiname DirectoryEntry
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 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 Feld "EntryType" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.1).
7.7.1.1 TypeCode-Feld
Das Feld "TypeCode" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (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-Feld
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.2).
Für den Verzeichniseintrag "Dateiname" ist der gültige Wert für dieses Feld 0.
7.7.1.3 TypeCategory Field
Das Feld "TypeCategory" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.1.3).
7.7.1.4 InUse-Feld
Das Feld "InUse" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.4).
7.7.2 GeneralSecondaryFlags-Feld
Das Feld "GeneralSecondaryFlags" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2) angegeben ist und den Inhalt des zu reservierten CustomDefined-Felds definiert.
7.7.2.1 AllocationPossible Feld
Das Feld "AllocationPossible" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2.1).
Für den Verzeichniseintrag "Dateiname" ist der gültige Wert für dieses Feld 0.
7.7.2.2 NoFatChain-Feld
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-Feld
Das Feld "FileName" muss eine Unicode-Zeichenfolge enthalten, bei der es sich um einen Teil des Dateinamens handelt. In der Reihenfolge, in der Dateiname-Verzeichniseinträge in einem Dateiverzeichniseintragssatz vorhanden sind, verketten FileName-Felder, um den Dateinamen für den Dateiverzeichniseintragssatz zu bilden. Angesichts der Länge des Felds "FileName", "15 Zeichen" und der maximalen Anzahl von Dateinamenverzeichniseinträgen 17 beträgt die maximale Länge des endgültigen, verketteten Dateinamens 255.
Der verkettete Dateiname hat den gleichen 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 Dateinamenzeichen
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 | Sternchen | 002Fh | Schrägstrich | 003Ah | Doppelpunkt |
003Ch | Kleiner als-Zeichen | 003Eh | Größer-als-Zeichen | 003Fh | Fragezeichen |
005Ch | Schrägstrich | 007Ch | Senkrechter Strich |
Die Dateinamen "." und "." haben die besondere Bedeutung von "diesem Verzeichnis" bzw. "enthaltenden Verzeichnis". Implementierungen dürfen keine dieser reservierten Dateinamen im Feld "FileName" aufzeichnen. Implementierungen können diese beiden Dateinamen jedoch in Verzeichnisauflistungen generieren, um auf das Verzeichnis zu verweisen, das aufgelistet wird, und das enthaltende Verzeichnis.
Implementierungen möchten datei- und verzeichnisnamen möglicherweise nur auf den ASCII-Zeichensatz beschränken. Wenn ja, sollten sie die Zeichennutzung auf den Bereich gültiger Zeichen in den ersten 128 Unicode-Einträgen beschränken. Sie müssen Datei- und Verzeichnisnamen weiterhin in Unicode auf dem Volume speichern und beim Interfacing mit dem Benutzer in/aus ASCII/Unicode übersetzen.
7.8 Anbietererweiterungsverzeichniseintrag
Der Verzeichniseintrag "Anbietererweiterung" ist ein gutartiger sekundärer Verzeichniseintrag in Dateiverzeichniseintragssätzen (siehe Tabelle 36). Ein Dateiverzeichniseintragssatz kann eine beliebige Anzahl von Verzeichniseinträgen der Anbietererweiterung enthalten, bis zum Grenzwert für sekundäre Verzeichniseinträge, weniger die Anzahl anderer sekundärer Verzeichniseinträge. Darüber hinaus sind Verzeichniseinträge der Anbietererweiterung nur gültig, wenn sie den erforderlichen Verzeichniseinträgen der Stream-Erweiterung und des Dateinamens nicht vorangehen.
Anbietererweiterungsverzeichniseinträge ermöglichen Es Lieferanten, eindeutige, anbieterspezifische Verzeichniseinträge in einzelnen Dateiverzeichniseintragssätzen über das Feld "VendorGuid" zu haben (siehe Tabelle 36). Eindeutige Verzeichniseinträge ermöglichen es Anbietern, das ExFAT-Dateisystem zu erweitern. Anbieter können den Inhalt des Felds "VendorDefined" definieren (siehe Tabelle 36). Anbieterimplementierungen können den Inhalt des Felds "VendorDefined" beibehalten und möglicherweise anbieterspezifische Funktionen bereitstellen.
Implementierungen, die die GUID eines Anbietererweiterungsverzeichniseintrags nicht erkennen, behandeln den Verzeichniseintrag genauso wie jeder andere nicht erkannte nicht erkannte sekundäre Verzeichniseintrag (siehe Abschnitt 8.2).
Tabelle 36 Anbietererweiterung DirectoryEntry
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 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. |
Anbieterdefiniert | 18 | 14 | Dieses Feld ist obligatorisch, und Lieferanten können ihre Inhalte definieren. |
7.8.1 EntryType Field
Das Feld "EntryType" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.1).
7.8.1.1 TypeCode-Feld
Das Feld "TypeCode" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (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-Feld
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" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.1.3).
7.8.1.4 InUse-Feld
Das Feld "InUse" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.4).
7.8.2 GeneralSecondaryFlags Field
Das Feld "GeneralSecondaryFlags" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2) angegeben ist und den Inhalt des zu reservierten CustomDefined-Felds definiert.
7.8.2.1 ZuweisungsMöglichkeit Feld
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-Feld
Das Feld "NoFatChain" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (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, mit Ausnahme der NULL-GUID, die {00000000-0000-0000-0000-000000000000}ist. Anbieter sollten jedoch ein GUID-generierendes Tool verwenden, z. B. GuidGen.exe, um beim Definieren ihrer Erweiterungen eine GUID auszuwählen.
Der Wert dieses Felds bestimmt die anbieterspezifische Struktur des Felds "VendorDefined".
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 Lieferantenzuordnungsverzeichniseinträgen enthalten, bis zum Grenzwert für sekundäre Verzeichniseinträge, weniger die Anzahl anderer sekundärer Verzeichniseinträge. Darüber hinaus sind Anbieterzuordnungsverzeichniseinträge nur gültig, wenn sie den erforderlichen Verzeichniseinträgen der Stream-Erweiterung und des Dateinamens nicht vorangehen.
Anbieterzuordnungsverzeichniseinträge ermöglichen es Lieferanten, eindeutige, anbieterspezifische Verzeichniseinträge in einzelnen Dateiverzeichniseintragssätzen über das Feld "VendorGuid" zu haben (siehe Tabelle 37). Eindeutige Verzeichniseinträge ermöglichen es Anbietern, das ExFAT-Dateisystem zu erweitern. Anbieter können den Inhalt der zugeordneten Cluster definieren, sofern vorhanden. Anbieterimplementierungen können den Inhalt der zugehörigen Cluster beibehalten, sofern vorhanden, und sie können anbieterspezifische Funktionen bereitstellen.
Implementierungen, die die GUID eines Anbieterzuordnungsverzeichniseintrags nicht erkennen, behandeln den Verzeichniseintrag genauso wie alle anderen nicht erkannten nicht erkannten nicht erkannten sekundären Verzeichniseinträge (siehe Abschnitt 8.2).
Tabelle 37 Vendor Allocation DirectoryEntry
Feldname | Offset- (Byte) |
Größe (Byte) |
Kommentare |
---|---|---|---|
Eintragstyp | 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. |
Anbieterdefiniert | 18 | 2 | Dieses Feld ist obligatorisch, und Lieferanten können ihre Inhalte definieren. |
FirstCluster | 20 | 4 | Dieses Feld ist obligatorisch und Abschnitt 7.9.4 definiert seinen Inhalt. |
Datenlänge | 24 | 8 | Dieses Feld ist obligatorisch und Abschnitt 7.9.5 definiert seinen Inhalt. |
7.9.1 EntryType Field
Das Feld "EntryType" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.1).
7.9.1.1 TypeCode-Feld
Das Feld "TypeCode" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.1.1).
Für den Verzeichniseintrag "Lieferantenzuordnung" ist der gültige Wert für dieses Feld 1.
7.9.1.2 TypeImportance-Feld
Das Feld "TypeImportance" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.2).
Für den Verzeichniseintrag "Lieferantenzuordnung" ist der gültige Wert für dieses Feld 1.
7.9.1.3 TypeCategory Field
Das Feld "TypeCategory" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.1.3).
7.9.1.4 InUse-Feld
Das Feld "InUse" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.1.4).
7.9.2 GeneralSecondaryFlags Field
Das Feld "GeneralSecondaryFlags" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2) angegeben ist und den Inhalt des zu reservierten CustomDefined-Felds definiert.
7.9.2.1 AllocationPossible-Feld
Das Feld "AllocationPossible" entspricht der Definition in der Vorlage "Generic Secondary DirectoryEntry" (siehe Abschnitt 6.4.2.1).
Für den Verzeichniseintrag "Lieferantenzuordnung" ist der gültige Wert für dieses Feld 1.
7.9.2.2 NoFatChain Feld
Das Feld "NoFatChain" muss der definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.2.2).
7.9.3 VendorGuid Field
Das Feld "VendorGuid" muss eine GUID enthalten, die die angegebene Anbieterzuweisung eindeutig identifiziert.
Alle möglichen Werte für dieses Feld sind gültig, mit Ausnahme der NULL-GUID, die {00000000-0000-0000-0000-000000000000}ist. Anbieter sollten jedoch ein GUID-generierendes Tool verwenden, z. B. GuidGen.exe, um beim Definieren ihrer Erweiterungen eine GUID auszuwählen.
Der Wert dieses Felds bestimmt, falls vorhanden, die anbieterspezifische Struktur des Inhalts der zugeordneten Cluster.
7.9.4 FirstCluster-Feld
Das Feld "FirstCluster" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.3).
7.9.5 Datenlängenfeld
Das Feld "DataLength" muss der Definition entsprechen, die in der Vorlage "Generic Secondary DirectoryEntry" angegeben ist (siehe Abschnitt 6.4.4).
7.10 TexFAT-Polster-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 gutartigen Primärverzeichniseinträge, Implementierungen dürfen texFAT Padding-Verzeichniseinträge nicht verschieben.
8 Implementierungshinweise
8.1 Empfohlene Schreib sortierung
Implementierungen sollten sicherstellen, dass das Volume so robust wie möglich für Stromausfälle und andere unvermeidbare Fehler ist. Wenn Sie neue Verzeichniseinträge erstellen oder Clusterzuordnungen ändern, sollten Implementierungen im Allgemeinen dieser Schreibreihenfolge folgen:
- Legen Sie den Wert des Felds "VolumeDirty" auf 1 fest.
- Aktualisieren Sie bei Bedarf das aktive FAT
- Aktualisieren der aktiven Zuordnungsbitmap
- Erstellen oder Aktualisieren des Verzeichniseintrags bei Bedarf
- Löschen Sie den Wert des Felds "VolumeDirty" auf "0", wenn der Wert vor dem ersten Schritt 0 war.
Beim Löschen von Verzeichniseinträgen oder Freigeben von Clusterzuweisungen sollten Implementierungen dieser Schreibreihenfolge folgen:
- Legen Sie den Wert des Felds "VolumeDirty" auf 1 fest.
- Löschen oder Aktualisieren des Verzeichniseintrags bei Bedarf
- Aktualisieren Sie bei Bedarf das aktive FAT
- Aktualisieren der aktiven Zuordnungsbitmap
- Löschen Sie den Wert des Felds "VolumeDirty" auf "0", wenn der Wert vor dem ersten Schritt 0 war.
8.2 Auswirkungen nicht erkannter Verzeichniseinträge
Zukünftige ExFAT-Spezifikationen derselben Hauptrevisionsnummer, 1 und kleinere Revisionsnummer, die höher als 0 ist, können neue gutartige primäre, kritische sekundäre und gutartige sekundäre Verzeichniseinträge definieren. Nur exFAT-Spezifikationen einer höheren Hauptrevisionsnummer können neue wichtige primärverzeichniseinträge definieren. Implementierungen dieser Spezifikation, exFAT Revision 1.00 File System Basic Specification, sollten in der Lage sein, alle exFAT-Volumes der Hauptrevisionsnummer 1 und jede kleinere Revisionsnummer bereitzustellen und darauf zuzugreifen. Dies stellt Szenarien dar, in denen eine Implementierung auf Verzeichniseinträge stoßen kann, die nicht erkannt werden. Im Folgenden werden die Auswirkungen dieser Szenarien beschrieben:
Das Vorhandensein nicht erkannter wichtiger primärer Verzeichniseinträge im Stammverzeichnis rendert das Volume ungültig. Das Vorhandensein eines kritischen primären Verzeichniseintrags, mit Ausnahme von Dateiverzeichniseinträgen, in keinem Nicht-Stammverzeichnis, rendert das Hostingverzeichnis ungültig.
Implementierungen dürfen nicht erkannte gutartige Primärverzeichniseinträge oder ihre zugeordneten Clusterzuweisungen nicht ändern. Beim Löschen eines Verzeichnisses und nur beim Löschen eines Verzeichnisses werden implementierungen jedoch nicht erkannte nicht erkannte Primärverzeichniseinträge löschen und alle zugehörigen Clusterzuweisungen gegebenenfalls freigeben.
Implementierungen dürfen keine nicht erkannten kritischen sekundären Verzeichniseinträge oder die zugehörigen Clusterzuordnungen ändern. Das Vorhandensein eines oder mehrerer nicht erkannter kritischer sekundärer Verzeichniseinträge in einem Verzeichniseintragssatz rendert den gesamten Verzeichniseintragssatz nicht erkannt. Beim Löschen eines Verzeichniseintragssatzes, der mindestens einen nicht erkannten kritischen sekundären Verzeichniseintrag enthält, müssen Implementierungen alle Clusterzuweisungen, sofern vorhanden, freigeben, die nicht erkannten kritischen sekundären Verzeichniseinträgen zugeordnet sind. Wenn der Verzeichniseintragssatz ein Verzeichnis beschreibt, können Implementierungen:
- Durchlaufen des Verzeichnisses
- Aufzählen der darin enthaltenen Verzeichniseinträge
- Löschen von enthaltenen Verzeichniseinträgen
- Verschieben von enthaltenen Verzeichniseinträgen in ein anderes Verzeichnis
Die Durchführungen dürfen jedoch nicht:
- Ändern von enthaltenen Verzeichniseinträgen, mit Ausnahme des Löschens, wie angegeben
- Erstellen neuer enthaltener Verzeichniseinträge
- Geöffnete enthaltene Verzeichniseinträge, mit Ausnahme von Durchlaufen und Aufzählen, wie angegeben
Implementierungen dürfen nicht erkannte nicht erkannte sekundäre Verzeichniseinträge oder deren zugeordnete Clusterzuweisungen ändern. Implementierungen sollten nicht erkannte nicht erkannte sekundäre Verzeichniseinträge ignorieren. Beim Löschen eines Verzeichniseintragssatzes müssen Implementierungen alle Clusterzuweisungen freigeben, sofern vorhanden, die nicht erkannten nicht erkannten sekundären Verzeichniseinträgen zugeordnet sind.
9 Dateisystembeschränkungen
9.1 Branchengrößenbeschränkungen
Das Feld "BytesPerSectorShift" definiert die Größenbeschränkungen für den unteren und oberen Bereich (die als untere Grenze ausgewertet wird: 512 Byte; Obergrenze: 4.096 Byte).
9.2 Größenbeschränkungen für Cluster
Das Feld "SektorenPerClusterShift" definiert die Grenzwerte für die untere und obere Clustergröße (untere Grenze: 1 Sektor; Obergrenze: 25 -- BytesPerSectorShift-Sektoren, die auf 32 MB ausgewertet werden).
9.3 Größenbeschränkungen für Cluster heap
Der Cluster-Heap muss mindestens genügend Platz enthalten, um die folgenden grundlegenden Dateisystemstrukturen zu hosten: das Stammverzeichnis, alle Zuordnungsbitmaps und die Up-Case-Tabelle.
Die untere Größenbeschränkung für Cluster heap ist eine Funktion des niedrigeren Größenlimits der einzelnen grundlegenden Dateisystemstrukturen, die sich im Cluster-Heap befinden. Selbst angesichts des kleinsten möglichen Clusters (512 Byte) benötigt jeder der grundlegenden Dateisystemstrukturen nicht mehr als einen Cluster. Daher ist die untere Grenze: 2 + NumberOfFats-Cluster, die je nach Wert des Felds "NumberOfFats" zu 3 oder 4 Clustern ausgewertet werden.
Die obere Cluster-Heap-Größenbeschränkung ist eine einfache Funktion der maximal möglichen Anzahl von Clustern, die das ClusterCount-Feld definiert (Obergrenze: 232- 11 Cluster). Unabhängig von der Clustergröße verfügt ein solcher Clusterhap über genügend Speicherplatz, um zumindest die grundlegenden Dateisystemstrukturen zu hosten.
9,4 Volumengrößenbeschränkungen
Das Feld "VolumeLength" definiert die Grenzwerte für niedrigere und obere Volumengrößen (untere Grenze: 220/ 2BytesPerSectorShiftSektoren, die als 1 MB ausgewertet wird; Obergrenze: 264- 1 Sektoren, die angesichts der größtmöglichen Branchengröße auf ca. 64ZB ausgewertet werden). Diese Spezifikation empfiehlt jedoch nicht mehr als 224- 2 Cluster im Cluster heap (siehe Abschnitt 3.1.9). Daher ist die empfohlene Obergrenze eines Volumens: ClusterHeapOffset + (2^24 - 2) * 2SectorsPerClusterShift. Angesichts der größtmöglichen Clustergröße, 32 MB und vorausgesetzt, dass ClusterHeapOffset 96 MB (genügend 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 Grenzwerte für Verzeichnisgrößen
Das Feld "DataLength" des Eintrags "Datenerweiterung" 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 verbraucht 32 Bytes). Angesichts des kleinsten möglichen Dateiverzeichniseintrags, drei Verzeichniseinträge, kann ein Verzeichnis bis zu 2.796.202 Dateien hosten.
10 Anhang
10.1 Global eindeutige Bezeichner (GUIDs)
Eine GUID ist die Microsoft-Implementierung eines universell eindeutigen Bezeichners. Eine GUID ist ein 128-Bit-Wert, der aus einer Gruppe von 8 Hexadezimalziffern besteht, gefolgt von drei Gruppen von jeweils 4 Hexadezimalziffern und gefolgt von einer Gruppe von 12 Hexadezimalziffern, z. B. {6B29FC40-CA47-1067-B31D-00DD010662DA}, (siehe Tabelle 38).
Tabelle 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 zwei Bytes aus der zweiten Gruppe der GUID (CA47h aus dem Beispiel). |
Data3 | 6 | 2 | Dieses Feld ist obligatorisch und enthält die beiden Bytes aus der dritten Gruppe der GUID (1067h aus dem Beispiel). |
Data4[0] | 8 | 1 | Dieses Feld ist obligatorisch und enthält das wichtigste Byte aus der vierten Gruppe der GUID (B3h aus dem Beispiel). |
Data4[1] | 9 | 1 | Dieses Feld ist obligatorisch und enthält das am wenigsten signifikante Byte aus der vierten Gruppe der GUID (1Dh aus dem Beispiel). |
Data4[2] | 10 | 1 | Dieses Feld ist obligatorisch und enthält das erste Byte aus der fünften Gruppe der GUID (00h aus dem Beispiel). |
Data4[3] | 11 | 1 | Dieses Feld ist obligatorisch und enthält das zweite Byte aus der fünften Gruppe der GUID (DDh aus dem Beispiel). |
Data4[4] | 12 | 1 | Dieses Feld ist obligatorisch und enthält das dritte Byte aus der fünften Gruppe der GUID (01h aus dem Beispiel). |
Data4[5] | 13 | 1 | Dieses Feld ist obligatorisch und enthält das vierte Byte aus der fünften Gruppe der GUID (06h aus dem Beispiel). |
Data4[6] | 14 | 1 | Dieses Feld ist obligatorisch und enthält das fünfte Byte aus der fünften Gruppe der GUID (62h aus dem Beispiel). |
Data4[7] | 15 | 1 | Dieses Feld ist obligatorisch und enthält das sechste Byte aus der fünften Gruppe der GUID (DAh aus dem Beispiel). |
10.2 Partitionstabellen
Um die Interoperabilität von ExFAT-Volumes in einem breiten Satz von Verwendungsszenarien sicherzustellen, sollten Implementierungen partitionstyp 07h für MBR-partitionierten Speicher und Partitions-GUID {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} für GPT partitionierten Speicher verwenden.
11 Dokumentationsänderungsverlauf
Tabelle 39 beschreibt den Verlauf der Veröffentlichungen, Korrekturen, Ergänzungen, Entfernungen und Klarstellungen dieses Dokuments.
Tabelle 39: Änderungsverlauf
Datum | Beschreibung der Änderungs- |
---|---|
08.08.2008 | Erste Veröffentlichung der Grundspezifikation, die Folgendes umfasst: Abschnitt 1, Einführung Abschnitt 2, Abschnitt 3, Haupt- und Sicherungsstartbereiche Abschnitt 4, Dateizuordnungstabellenbereich Abschnitt 5, Datenbereich Abschnitt 6, Verzeichnisstruktur Abschnitt 7, Verzeichniseintragsdefinitionen Abschnitt 8, Implementierungshinweise Abschnitt 9, Dateisystembeschränkungen Abschnitt 10, Anhang |
08.08.2008 | Zweite Veröffentlichung der Basis-Spezifikation, die folgende Änderungen beinhaltet: Ergänzung des Abschnitts 11, Hinzufügen der Verzeichniseinträge "Vendor Extension" und "Vendor Allocation" in den Abschnitten 7.8 und 7.9 Ergänzung der empfohlenen Falltabelle in den Abschnitten 7.2.5 und 7.2.5.1 Hinzufügen der UtcOffset-Felder in Abschnitt 7.4 und Hinzufügen des UTC-Akronyms in Abschnitt 1.3 Korrektur der Größe des Felds "CustomDefined" in Tabelle 19 Korrektur des gültigen Bereichs von NameLength-Werten in Abschnitt 7.6.3 Korrektur und Klärung der Felder "Zeitstempel" und "10 msIncrement" in Abschnitt 7.4 Klarstellung der Struktur der Nullparameter in Abschnitt 3.3 Klärung der Bedeutung der Werte des Felds "NoFatChain" in Abschnitt 6.3.4.2 Klärung der Bedeutung der Werte des Felds "DataLength" in Abschnitt 6.2.3 Klärung des Felds "VolumeDirty" in Abschnitt 3.1.13.2 und empfohlene Schreib sortierung in Abschnitt 8.1 Klärung des Felds "MediaFailure" in Abschnitt 3.1.13.3 |
01.01.2008 | Dritte Version der Basic Specification, die die folgenden Änderungen enthält: Ergänzung von SHALL, SHOULD und MAY zu Felderklärungen Hinzufügen der UTC-Definition in Tabelle 2 Abschnitt 1.3 Geänderte Abschnitte 1.5, um die Ausrichtung mit dem TexFAT-Spezifikationsdokument sicherzustellen. Klärung der Einschränkung, die nur Microsoft das Layout von Verzeichniseinträgen in Abschnitt 6.2 definieren kann Klarstellung hinzugefügt, dass FirstCluster Field null sein soll, wenn "DataLength" null ist und "NoFatChain" auf "Section 6.3.5" und "Section 6.4.3" festgelegt ist Klärung der Anforderungen für gültige Dateiverzeichniseinträge in Abschnitt 7.4 Anforderung für eindeutige Datei- und Verzeichnisnamen zu Abschnitt 7.7 hinzugefügt Implementierungsnotiz für ASCII am Ende von Abschnitt 7.7.3 hinzugefügt |
01.01.2009 | Vierte Version der Basic Specification, die die folgenden Änderungen enthält: Entfernte Verweise auf Windows CE-Zugriffssteuerungseinträge Klarstellung zu Abschnitt 7.2.5.1 hinzugefügt, um explizit eine vollständige Falltabelle erforderlich zu machen |
02.02.2009 | Fünfte Version der Basic Specification, die die folgenden Änderungen enthält: Änderungen an der Dokumentformatierung, um eine bessere PDF-Konvertierung zu ermöglichen |
24. Februar-2010 | Sechste Version der Basic Specification, die die folgenden Änderungen enthält: Geänderte falsche Anweisung: "FirstCluster Field shall be zero if the DataLength is zero and NoFatChain is set" in Section 6.3.5 and Section 6.4.3 to "If the NoFatChain bit is 1 then FirstCluster must point to a valid cluster in the cluster heap" to clarify that there must be valid allocation if the NoFatChain bit is set. "Wenn das NoFatChain-Bit 1 ist, darf DataLength nicht null sein. Wenn das Feld "FirstCluster" null ist, muss "DataLength" auch auf Abschnitt 6.3.6 und Abschnitt 6.4.4 festgelegt sein, um zu verdeutlichen, dass eine gültige Zuordnung vorhanden sein muss, wenn das NoFatChain-Bit festgelegt ist. Copyright-Hinweis auf 2010 aktualisiert |
26. August-2019 | Siebte Version der Basic Specification, die die folgenden Änderungen enthält: Aktualisierte rechtliche Bestimmungen zur Spezifikation, einschließlich: Entfernen von Microsoft Vertraulicher Hinweis Entfernen des Abschnitts "Lizenzvertrag für technische Dokumentation" der Microsoft Corporation Copyright-Hinweis auf 2019 aktualisiert |