Specifica del file system exFAT
1 Introduzione
Il file system exFAT è il successore di FAT32 nella famiglia FAT di file system. Questa specifica descrive il file system exFAT e fornisce tutte le informazioni necessarie per implementare il file system exFAT.
1.1 Obiettivi di progettazione
Il file system exFAT ha tre obiettivi di progettazione centrale (vedere l'elenco seguente).
Mantenere la semplicità dei file system basati su FAT.
Due dei punti di forza dei file system basati su FAT sono la loro semplicità e facilità di implementazione. Nello spirito dei suoi predecessori, gli implementatori dovrebbero trovare exFAT relativamente semplice e facile da implementare.
Abilitare file e dispositivi di archiviazione molto grandi.
Il file system exFAT usa 64 bit per descrivere le dimensioni dei file, consentendo così alle applicazioni che dipendono da file molto grandi. Il file system exFAT consente anche i cluster di grandi dimensioni pari a 32 MB, consentendo in modo efficace dispositivi di archiviazione molto grandi.
Incorporare l'estendibilità per l'innovazione futura.
Il file system exFAT incorpora l'estendibilità nella sua progettazione, consentendo al file system di mantenere il ritmo con le innovazioni nell'archiviazione e nelle modifiche nell'utilizzo.
1.2 Terminologia specifica
Nel contesto di questa specifica, alcuni termini (vedere Tabella 1) contengono un significato specifico per la progettazione e l'implementazione del file system exFAT.
Tabella 1 definizione dei termini che contengono un significato molto specifico
Termine | Definizione |
---|---|
Deve | Questa specifica usa il termine "deve" per descrivere un comportamento obbligatorio. |
Dovrebbe | Questa specifica usa il termine "deve" per descrivere un comportamento che consiglia vivamente, ma non rende obbligatorio. |
Mag | Questa specifica usa il termine "may" per descrivere un comportamento facoltativo. |
Obbligatorio | Questo termine descrive un campo o una struttura che un'implementazione modifica e interpreta come questa specifica. |
Facoltativo | Questo termine descrive un campo o una struttura che può supportare o meno un'implementazione. Se un'implementazione supporta un determinato campo o struttura facoltativa, la modifica e interpreta il campo o la struttura come questa specifica. |
Non definito | Questo termine descrive il contenuto del campo o della struttura che un'implementazione può modificare in base alle esigenze (ad esempio, cancellare a zero quando si impostano campi o strutture circostanti) e non interpretare per contenere alcun significato specifico. |
Riservato | Questo termine descrive il contenuto del campo o della struttura che implementa:
|
1.3 Testo completo degli acronimi comuni
Questa specifica usa gli acronimi in uso comune nel settore del personal computer (vedere Tabella 2).
Tabella 2 full text degli acronimi comuni
Acronimo | Full-text |
---|---|
ASCII | Codice standard americano per l'interscambio delle informazioni |
BIOS | Sistema di output di input di base |
CPU | Unità di elaborazione centrale |
exFAT | Tabella di allocazione file estendibile |
FAT | Tabella di allocazione file |
FAT12 | Tabella allocazione file, indici cluster a 12 bit |
FAT16 | Tabella allocazione file, indici cluster a 16 bit |
FAT32 | Tabella allocazione file, indici cluster a 32 bit |
GPT | tabella delle partizioni GUID |
GUID | Identificatore univoco globale (vedere la sezione 10.1) |
INT | Interrompere |
MBR | record di avvio principale |
texFAT | ExFAT sicuro delle transazioni |
UTC | Ora universale coordinata |
1.4 Qualificatori di campo e struttura predefiniti
I campi e le strutture in questa specifica hanno i qualificatori seguenti (vedere l'elenco seguente), a meno che le note sulla specifica non siano diverse.
Non firmato
Usare la notazione decimale per descrivere i valori, dove non diversamente annotati; questa specifica usa la lettera "h" post-correzione per indicare i numeri esadecimali e racchiude i GUID nelle parentesi graffe
Sono in formato little-endian
Non richiedere un carattere di terminazione null per le stringhe
1.5 Windows CE e TexFAT
TexFAT è un'estensione di exFAT che aggiunge semantica operativa sicura per le transazioni nella parte superiore del file system di base. TexFAT viene usato da Windows CE. TexFAT richiede l'uso delle due bitmap di allocazione e delle due unità di tipo FATS per l'uso nelle transazioni. Definisce anche diverse strutture aggiuntive, tra cui descrittori di riempimento e descrittori di sicurezza.
Struttura del volume 2
Un volume è il set di tutte le strutture del file system e lo spazio dati necessario per archiviare e recuperare i dati utente. Tutti i volumi exFAT contengono quattro aree (vedere Tabella 3).
Struttura del volume tabella 3
Nome area secondaria | Offset (settore) |
Dimensione (settori) |
Commenti |
---|---|---|---|
Area di avvio principale | |||
Settore principale di avvio | 0 | 1 | Questa sotto-area è obbligatoria e la sezione 3.1 definisce il contenuto. |
Principali settori di avvio estesi | 1 | 8 | Questa sotto-area è obbligatoria e la sezione 3.2 definisce il contenuto. |
Parametri OEM principali | 9 | 1 | Questa sotto-area è obbligatoria e la sezione 3.3 definisce il contenuto. |
Principale riservato | 10 | 1 | Questa sotto-area è obbligatoria e il relativo contenuto è riservato. |
Controllo di avvio principale | 11 | 1 | Questa sotto-area è obbligatoria e la sezione 3.4 definisce il contenuto. |
Area di avvio del backup | |||
Settore di avvio di backup | 12 | 1 | Questa sotto-area è obbligatoria e la sezione 3.1 definisce il contenuto. |
Settori di avvio estesi di backup | 13 | 8 | Questa sotto-area è obbligatoria e la sezione 3.2 definisce il contenuto. |
Parametri OEM di backup | 21 | 1 | Questa sotto-area è obbligatoria e la sezione 3.3 definisce il contenuto. |
Backup riservato | 22 | 1 | Questa sotto-area è obbligatoria e il relativo contenuto è riservato. |
Controllo di avvio del backup | 23 | 1 | Questa sotto-area è obbligatoria e la sezione 3.4 definisce il contenuto. |
Area FAT | |||
Allineamento FAT | 24 | FatOffset - 24 | Questa sotto-area è obbligatoria e il relativo contenuto, se presente, non sono definiti. Nota: i settori di avvio principale e di backup contengono entrambi il campo FatOffset. |
Primo GRASSO | FatOffset | FatLength | Questa sotto-area è obbligatoria e la sezione 4.1 definisce il contenuto. Nota: i settori di avvio principale e di backup contengono entrambi i campi FatOffset e FatLength. |
Secondo GRASSO | FatOffset + FatLength | FatLength * (NumberOfFats - 1) | Questa sotto-area è obbligatoria e la sezione 4.1 definisce il contenuto, se presente. Nota: i settori di avvio principale e di backup contengono entrambi i campi FatOffset, FatLength e NumberOfFats. Il campo NumberOfFats può contenere solo valori 1 e 2. |
Area dati | |||
Allineamento dell'heap del cluster | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset : (FatOffset + FatLength * NumberOfFats) | Questa sotto-area è obbligatoria e il relativo contenuto, se presente, non sono definiti. Nota: i settori di avvio principale e di backup contengono entrambi i campi FatOffset, FatLength, NumberOfFats e ClusterHeapOffset. I valori validi del campo NumberOfFats sono 1 e 2. |
Cluster Heap | ClusterHeapOffset | ClusterCount * 2SettoriPerClusterShift | Questa sotto-area è obbligatoria e la sezione 5.1 definisce il contenuto. Nota: i settori di avvio principale e di backup contengono entrambi i campi ClusterHeapOffset, ClusterCount e SectorsPerClusterShift. |
Spazio in eccesso | ClusterHeapOffset + ClusterCount * 2SettoriPerClusterShift | VolumeLength : (ClusterHeapOffset + ClusterCount * 2SettoriPerClusterShift) | Questa sotto-area è obbligatoria e il relativo contenuto, se presente, non sono definiti. Nota: i settori di avvio principale e di backup contengono entrambi i campi ClusterHeapOffset, ClusterCount, SectorsPerClusterShift e VolumeLength. |
3 Aree di avvio principale e di backup
L'area principale di avvio fornisce tutte le istruzioni di avvio necessarie, l'identificazione delle informazioni e i parametri del file system per consentire a un'implementazione di eseguire le operazioni seguenti:
Nastro di avvio di un sistema computer da un volume exFAT.
Identificare il file system nel volume come exFAT.
Individuare il percorso delle strutture del file system exFAT.
L'area di avvio del backup è un backup dell'area di avvio principale. Consente il ripristino del volume exFAT in caso di avvio principale in uno stato incoerente. Ad eccezione di circostanze non frequenti, ad esempio l'aggiornamento delle istruzioni di avvio a strappo, le implementazioni non devono modificare il contenuto dell'area di avvio di backup.
3.1 Aree secondarie del settore principale e di avvio di backup
Il settore principale di avvio contiene il codice per l'associazione di avvio da un volume exFAT e parametri fondamentali di exFAT che descrivono la struttura del volume (vedere Tabella 4). BIOS, MBR o altri agenti di strapping di avvio possono controllare questo settore e possono caricare ed eseguire eventuali istruzioni di strapping di avvio contenute in esso.
Il settore di avvio di backup è un backup del settore principale di avvio e ha la stessa struttura (vedere La tabella 4). Il settore di avvio del backup può aiutare le operazioni di ripristino; tuttavia, le implementazioni considerano il contenuto dei campi VolumeFlags e PercentInUse come non aggiornati.
Prima di usare il contenuto del settore principale o di avvio di backup, le implementazioni verificheranno il contenuto convalidando il rispettivo checksum di avvio e assicurando che tutti i campi siano all'interno dell'intervallo di valori validi.
Anche se l'operazione di formato iniziale inizializza il contenuto dei settori di avvio principale e di backup, le implementazioni possono aggiornare questi settori (e aggiorneranno anche il rispettivo checksum di avvio) in base alle esigenze. Tuttavia, le implementazioni possono aggiornare i campi VolumeFlags o PercentInUse senza aggiornare il rispettivo checksum di avvio (il checksum esclude in modo specifico questi due campi).
Tabella 4 Struttura principale e del settore di avvio di backup
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
JumpBoot | 0 | 3 | Questo campo è obbligatorio e la sezione 3.1.1 definisce il contenuto. |
FileSystemName | 3 | 8 | Questo campo è obbligatorio e la sezione 3.1.2 definisce il contenuto. |
MustBeZero | 11 | 53 | Questo campo è obbligatorio e la sezione 3.1.3 ne definisce il contenuto. |
PartitionOffset | 64 | 8 | Questo campo è obbligatorio e la sezione 3.1.4 ne definisce il contenuto. |
VolumeLength | 72 | 8 | Questo campo è obbligatorio e la sezione 3.1.5 ne definisce il contenuto. |
FatOffset | 80 | 4 | Questo campo è obbligatorio e la sezione 3.1.6 ne definisce il contenuto. |
FatLength | 84 | 4 | Questo campo è obbligatorio e la sezione 3.1.7 ne definisce il contenuto. |
ClusterHeapOffset | 88 | 4 | Questo campo è obbligatorio e la sezione 3.1.8 ne definisce il contenuto. |
ClusterCount | 92 | 4 | Questo campo è obbligatorio e la sezione 3.1.9 ne definisce il contenuto. |
FirstClusterOfRootDirectory | 96 | 4 | Questo campo è obbligatorio e la sezione 3.1.10 ne definisce il contenuto. |
VolumeSerialNumber | 100 | 4 | Questo campo è obbligatorio e la sezione 3.1.11 ne definisce il contenuto. |
FileSystemRevision | 104 | 2 | Questo campo è obbligatorio e la sezione 3.1.12 ne definisce il contenuto. |
VolumeFlags | 106 | 2 | Questo campo è obbligatorio e la sezione 3.1.13 ne definisce il contenuto. |
BytesPerSectorShift | 108 | 1 | Questo campo è obbligatorio e la sezione 3.1.14 ne definisce il contenuto. |
SectorsPerClusterShift | 109 | 1 | Questo campo è obbligatorio e la sezione 3.1.15 ne definisce il contenuto. |
NumberOfFats | 110 | 1 | Questo campo è obbligatorio e la sezione 3.1.16 ne definisce il contenuto. |
DriveSelect | 111 | 1 | Questo campo è obbligatorio e la sezione 3.1.17 ne definisce il contenuto. |
PercentInUse | 112 | 1 | Questo campo è obbligatorio e la sezione 3.1.18 ne definisce il contenuto. |
Riservato | 113 | 7 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
BootCode | 120 | 390 | Questo campo è obbligatorio e la sezione 3.1.19 ne definisce il contenuto. |
BootSignature | 510 | 2 | Questo campo è obbligatorio e la sezione 3.1.20 ne definisce il contenuto. |
ExcessSpace | 512 | 2BytePerSectorShift - 512 | Questo campo è obbligatorio e il relativo contenuto, se presente, non sono definiti. Nota: i settori principale e di avvio di backup contengono entrambi il campo BytesPerSectorShift. |
3.1.1 Campo JumpBoot
Il campo JumpBoot deve contenere l'istruzione jump per le CPU comuni nei personal computer, che, quando eseguite, "salta" la CPU per eseguire le istruzioni di avvio a strapping nel campo BootCode.
Il valore valido per questo campo è (in ordine di byte di ordine basso a byte elevato) EBh 76h 90h.
3.1.2 Campo FileSystemName
Il campo FileSystemName deve contenere il nome del file system nel volume.
Il valore valido per questo campo è, in caratteri ASCII, "EXFAT", che include tre spazi vuoti finali.
3.1.3 Campo MustBeZero
Il campo MustBeZero deve corrispondere direttamente all'intervallo di byte utilizzato dal blocco di parametri BIOS compresso nei volumi FAT12/16/32.
Il valore valido per questo campo è 0, che consente di impedire alle implementazioni FAT12/16/32 di montare erroneamente un volume exFAT.
Campo PartitionOffset 3.1.4
Il campo PartitionOffset descrive l'offset del settore relativo ai supporti della partizione che ospita il volume exFAT specificato. Questo campo facilita l'strapping di avvio dal volume tramite INT esteso 13h nei computer personali.
Tutti i valori possibili per questo campo sono validi; Tuttavia, il valore 0 indica che le implementazioni devono ignorare questo campo.
Campo VolumeLength 3.1.5
Il campo VolumeLength descrive le dimensioni del volume exFAT specificato nei settori.
L'intervallo valido di valori per questo campo deve essere:
Almeno2 20/ 2BytePerSectorShift, che garantisce che il volume più piccolo non sia inferiore a 1 MB
Al massimo 264-1, il valore più grande che questo campo può descrivere.
Tuttavia, se la dimensione della sotto-area spazio in eccesso è 0, il valore più grande di questo campo è ClusterHeapOffset + (232- 11) * 2SectorsPerClusterShift.
3.1.6 Campo FatOffset
Il campo FatOffset descrive l'offset del settore relativo al volume del First FAT. Questo campo consente alle implementazioni di allineare first FAT alle caratteristiche dei supporti di archiviazione sottostanti.
L'intervallo di valori valido per questo campo deve essere:
Almeno 24, che rappresenta i settori in cui vengono usate le aree di avvio principale e di avvio di backup
Al massimo ClusterHeapOffset - (FatLength * NumberOfFats), che rappresenta i settori in cui viene utilizzato l'Heap cluster
3.1.7 Campo FatLength
Il campo FatLength descrive la lunghezza, nei settori, di ogni tabella FAT (il volume può contenere fino a due FTS).
L'intervallo di valori valido per questo campo deve essere:
Almeno (ClusterCount + 2) *2 2/ 2BytePerSectorShiftarrotondato fino all'intero più vicino, che assicura che ogni FAT abbia spazio sufficiente per descrivere tutti i cluster nell'heap del cluster
Al massimo (ClusterHeapOffset - FatOffset) / NumberOfFats arrotondato verso il basso al numero intero più vicino, che garantisce che le fats esistano prima dell'heap del cluster
Questo campo può contenere un valore in eccesso del relativo limite inferiore (come descritto in precedenza) per consentire al Secondo FAT, se presente, di essere allineato anche alle caratteristiche dei supporti di archiviazione sottostanti. Il contenuto dello spazio che supera quello che il FAT stesso richiede, se presente, non è definito.
Campo ClusterHeapOffset 3.1.8
Il campo ClusterHeapOffset descrive l'offset del settore relativo al volume dell'heap cluster. Questo campo consente alle implementazioni di allineare l'heap cluster alle caratteristiche dei supporti di archiviazione sottostanti.
L'intervallo di valori valido per questo campo deve essere:
Almeno FatOffset + FatLength * NumberOfFats, per tenere conto dei settori che usano tutte le aree precedenti
Al massimo 232- 1 o VolumeLength - (ClusterCount * 2SectorsPerClusterShift), il calcolo è minore
Campo ClusterCount 3.1.9
Il campo ClusterCount descrive il numero di cluster che il cluster heap contiene.
Il valore valido per questo campo deve essere minore dei seguenti:
(VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShiftarrotondato verso il basso all'intero più vicino, ovvero esattamente il numero di cluster che possono adattarsi tra l'inizio dell'heap cluster e la fine del volume
232- 11, ovvero il numero massimo di cluster che un FAT può descrivere
Il valore del campo ClusterCount determina la dimensione minima di un VALORE FAT. Per evitare le FTS estremamente grandi, le implementazioni possono controllare il numero di cluster nell'heap del cluster aumentando le dimensioni del cluster (tramite il campo SectorsPerClusterShift). Questa specifica consiglia di non più di 2 cluster da24 a 2 nel cluster Heap. Tuttavia, le implementazioni devono essere in grado di gestire i volumi con un massimo di 232- 11 cluster nell'heap del cluster.
3.1.10 PrimoClusterOfRootDirectory
Il campo FirstClusterOfRootDirectory contiene l'indice del cluster del primo cluster della directory radice. Le implementazioni devono eseguire ogni sforzo per posizionare il primo cluster della directory radice nel primo cluster non valido dopo l'utilizzo della bitmap di allocazione e della tabella up-case.
L'intervallo di valori valido per questo campo deve essere:
Almeno 2, l'indice del primo cluster nell'heap del cluster
Al massimo ClusterCount + 1, l'indice dell'ultimo cluster nell'heap del cluster
Campo VolumeSerialNumber 3.11
Il campo VolumeSerialNumber contiene un numero di serie univoco. In questo modo vengono aiutate le implementazioni a distinguere tra diversi volumi exFAT. Le implementazioni devono generare il numero di serie combinando la data e l'ora di formattazione del volume exFAT. Il meccanismo per combinare data e ora per formare un numero di serie è specifico dell'implementazione.
Tutti i valori possibili per questo campo sono validi.
Campo FileSystemRevision 3.1.12
Il campo FileSystemRevision descrive i numeri di revisione principali e secondari delle strutture exFAT nel volume specificato.
Il byte ad ordine elevato è il numero di revisione principale e il byte a basso ordine è il numero di revisione minore. Ad esempio, se il byte ad ordine elevato contiene il valore 01h e se il byte a basso ordine contiene il valore 05h, il campo FileSystemRevision descrive il numero di revisione 1.05. Analogamente, se il byte ad ordine elevato contiene il valore 0Ah e se il byte a basso ordine contiene il valore 0Fh, il campo FileSystemRevision descrive il numero di revisione 10.15.
L'intervallo di valori valido per questo campo deve essere:
Almeno 0 per il byte a basso ordine e 1 per il byte elevato
Al massimo 99 per il byte a basso ordine e 99 per il byte ad ordine elevato
Il numero di revisione di exFAT che descrive questa specifica è 1.00. Le implementazioni di questa specifica devono montare qualsiasi volume exFAT con il numero di revisione principale 1 e non montare alcun volume exFAT con qualsiasi altro numero di revisione principale. Le implementazioni devono rispettare il numero di revisione secondario e non eseguono operazioni o non creano strutture del file system non descritte nella specifica corrispondente del numero di revisione secondario specificato.
3.1.13 Campo VolumeFlags
Il campo VolumeFlags contiene flag che indicano lo stato di varie strutture del file system nel volume exFAT (vedere Tabella 5).
Le implementazioni non includono questo campo quando si calcola il rispettivo checksum dell'avvio principale o dell'area di avvio di backup. Quando si fa riferimento al settore di avvio di backup, le implementazioni considerano questo campo come non aggiornato.
Tabella 5 Struttura campo VolumeFlags
Nome campo | Offset (bit) |
Dimensione (bit) |
Commenti |
---|---|---|---|
ActiveFat | 0 | 1 | Questo campo è obbligatorio e la sezione 3.1.13.1 definisce il contenuto. |
VolumeDirty | 1 | 1 | Questo campo è obbligatorio e la sezione 3.1.13.2 definisce il contenuto. |
MediaFailure | 2 | 1 | Questo campo è obbligatorio e la sezione 3.1.13.3 definisce il contenuto. |
ClearToZero | 3 | 1 | Questo campo è obbligatorio e la sezione 3.1.13.4 definisce il contenuto. |
Riservato | 4 | 12 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
3.1.13.1 Campo ActiveFat
Il campo ActiveFat descrive quali bitmap FAT e allocazione sono attivi (e le implementazioni devono usare), come indicato di seguito:
0, il che significa che la prima bitmap DI FAT e First Allocazione sono attive
1, il che significa che la seconda bitmap DI FAT e Seconda allocazione sono attive ed è possibile solo quando il campo NumberOfFats contiene il valore 2
Le implementazioni devono considerare fat e bitmap di allocazione inattivi come non aggiornate. Solo le implementazioni con riconoscimento di TexFAT cambiano le bitmap DI FAT e allocazione attive (vedere la sezione 7.1).
3.1.13.2 Campo VolumeDirty
Il campo VolumeDirty descrive se il volume è sporco o meno, come indicato di seguito:
0, il che significa che il volume è probabilmente in uno stato coerente
1, il che significa che il volume è probabilmente in uno stato incoerente
Le implementazioni devono impostare il valore di questo campo su 1 quando si verificano metadati del file system inconsistenibili che non risolvono. Se, durante il montaggio di un volume, il valore di questo campo è 1, solo le implementazioni che risolvono i metadati del file system possono cancellare il valore di questo campo su 0. Tali implementazioni cancellano solo il valore di questo campo a 0 dopo aver verificato che il file system sia in uno stato coerente.
Se, durante il montaggio di un volume, il valore di questo campo è 0, le implementazioni devono impostare questo campo su 1 prima di aggiornare i metadati del file system e cancellare questo campo su 0 in seguito, simile all'ordinamento di scrittura consigliato descritto nella sezione 8.1.
3.1.13.3 MediaFailure Field
Il campo MediaFailure descrive se un'implementazione ha rilevato errori multimediali o meno, come indicato di seguito:
0, il che significa che il supporto di hosting non ha segnalato errori o eventuali errori noti sono già registrati nei cluster FAT come "cattivi"
1, il che significa che il supporto di hosting ha segnalato errori (ad esempio le operazioni di lettura o scrittura non riuscite)
Un'implementazione deve impostare questo campo su 1 quando:
Il supporto di hosting non riesce a tentare l'accesso a qualsiasi area nel volume
L'implementazione ha esaurito gli algoritmi di ripetizione dei tentativi di accesso, se presenti
Se, durante il montaggio di un volume, il valore di questo campo è 1, le implementazioni che analizzano l'intero volume per errori multimediali e registrano tutti gli errori come cluster "cattivi" nel FAT (o in caso contrario risolvere gli errori multimediali) possono cancellare il valore di questo campo su 0.
3.1.13.4 ClearToZero Field
Il campo ClearToZero non ha un significato significativo in questa specifica.
I valori validi per questo campo sono:
0, che non ha alcun significato particolare
1, che significa che le implementazioni cancellano questo campo a 0 prima di modificare le strutture, le directory o i file del file system
3.1.14 BytePerSectorShift Campo
Il campo BytePerSectorShift descrive i byte per settore espressi come log2(N), dove N è il numero di byte per settore. Ad esempio, per 512 byte per settore, il valore di questo campo è 9.
L'intervallo di valori valido per questo campo deve essere:
Almeno 9 (dimensioni del settore di 512 byte), che è il settore più piccolo possibile per un volume exFAT
Al massimo 12 (dimensioni del settore di 4096 byte), ovvero le dimensioni della pagina di memoria delle CPU comuni nei computer personali
3.1.15 SettoriPerClusterShift Field
Il campo SectorsPerClusterShift descrive i settori per cluster espressi come log2(N), dove N è il numero di settori per cluster. Ad esempio, per 8 settori per cluster, il valore di questo campo è 3.
L'intervallo di valori valido per questo campo deve essere:
Almeno 0 (1 settore per cluster), che è il cluster più piccolo possibile
Al massimo 25 - BytePerSectorShift, che restituisce una dimensione del cluster di 32 MB
3.1.16 Campo NumberOfFats
Il campo NumberOfFats descrive il numero di unità fats e bitmap di allocazione che contiene il volume.
L'intervallo di valori valido per questo campo deve essere:
1, che indica che il volume contiene solo la bitmap First FAT e First Allocation
2, che indica che il volume contiene il Primo FAT, Secondo FAT, Prima bitmap di allocazione e Seconda bitmap di allocazione; questo valore è valido solo per i volumi TexFAT
3.1.17 DriveSelect Field
Il campo DriveSelect contiene il numero di unità INT 13h esteso, che aiuta l'avvio a strappare da questo volume usando INT 13h estesi nei computer personali.
Tutti i valori possibili per questo campo sono validi. Campi simili nei file system basati su FAT precedenti contengono spesso il valore 80h.
Campo 3.1.18 PercentInUse
Il campo PercentInUse descrive la percentuale di cluster nell'heap cluster allocata.
L'intervallo di valori valido per questo campo deve essere:
Compreso tra 0 e 100 inclusivi, ovvero la percentuale di cluster allocati nell'heap del cluster, arrotondata al numero intero più vicino
FFh, che indica la percentuale di cluster allocati nell'heap del cluster non è disponibile
Le implementazioni modificano il valore di questo campo in modo da riflettere le modifiche apportate all'allocazione dei cluster nell'heap del cluster o modificarlo in FFh.
Le implementazioni non includono questo campo quando si calcola il rispettivo checksum dell'avvio principale o dell'area di avvio di backup. Quando si fa riferimento al settore di avvio di backup, le implementazioni considerano questo campo come non aggiornato.
Campo BootCode 3.1.19
Il campo BootCode contiene istruzioni di avvio. Le implementazioni possono popolare questo campo con le istruzioni della CPU necessarie per l'avvio a strappo di un sistema computer. Le implementazioni che non forniscono istruzioni di avvio devono inizializzare ogni byte in questo campo a F4h (l'istruzione di arresto per CPU comuni nei computer personali) come parte dell'operazione di formato.
3.1.20 Campo BootSignature
Il campo BootSignature descrive se la finalità di un determinato settore è che sia un settore di avvio o meno.
Il valore valido per questo campo è AA55h. Qualsiasi altro valore in questo campo invalida il rispettivo settore di avvio. Le implementazioni devono verificare il contenuto di questo campo prima di dipendere da qualsiasi altro campo nel rispettivo settore di avvio.
3.2 Aree secondarie dei settori di avvio estesi e backup
Ogni settore dei principali settori di avvio esteso ha la stessa struttura; tuttavia, ogni settore può contenere istruzioni di avvio-strapping distinte (vedere Tabella 6). Gli agenti di avvio, ad esempio le istruzioni di strapping di avvio nel settore principale dell'avvio, le implementazioni alternative del BIOS o il firmware di un sistema incorporato, possono caricare questi settori ed eseguire le istruzioni che contengono.
I settori di avvio estesi di backup sono un backup dei principali settori di avvio esteso e hanno la stessa struttura (vedere La tabella 6).
Prima di eseguire le istruzioni dei settori di avvio esteso main o backup, le implementazioni devono verificare il loro contenuto assicurando che il campo ExtendedBootSignature di ogni settore contenga il valore previsto.
Anche se l'operazione di formato iniziale inizializza il contenuto dei settori di avvio esteso main e backup, le implementazioni possono aggiornare questi settori (e aggiorneranno anche i rispettivi checksum di avvio) in base alle esigenze.
Tabella 6 Struttura del settore di avvio esteso
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
ExtendedBootCode | 0 | 2BytePerSectorShift - 4 | Questo campo è obbligatorio e la sezione 3.2.1 definisce il contenuto. Nota: i settori di avvio principale e di backup contengono entrambi il campo BytePerSectorShift. |
ExtendedBootSignature | 2BytePerSectorShift - 4 | 4 | Questo campo è obbligatorio e la sezione 3.2.2 definisce il contenuto. Nota: i settori di avvio principale e di backup contengono entrambi il campo BytePerSectorShift. |
Campo ExtendedBootCode 3.2.1
Il campo ExtendedBootCode contiene istruzioni di avvio. Le implementazioni possono popolare questo campo con le istruzioni della CPU necessarie per l'avvio a strappo di un sistema computer. Le implementazioni che non forniscono istruzioni di strapping di avvio inizializzeranno ogni byte in questo campo fino a 00h nell'ambito dell'operazione di formato.
Campo ExtendedBootSignature 3.2.2
Il campo ExtendedBootSignature descrive se la finalità del settore specificato è che sia un settore di avvio esteso o meno.
Il valore valido per questo campo è AA550000h. Qualsiasi altro valore in questo campo invalida il rispettivo settore di avvio esteso main o backup. Le implementazioni devono verificare il contenuto di questo campo prima di dipendere da qualsiasi altro campo nel rispettivo settore di avvio esteso.
3.3 Parametri OEM principali e di backup
L'area secondaria Dei parametri OEM principale contiene dieci strutture di parametri che possono contenere informazioni specifiche del produttore (vedere Tabella 7). Ognuna delle dieci strutture dei parametri deriva dal modello Parametri generici (vedere la sezione 3.3.2). I produttori possono derivare strutture di parametri personalizzati dal modello Parametri generici. Questa specifica definisce due strutture di parametri: Parametri Null (vedere la sezione 3.3.3) e i parametri Flash (vedere la sezione 3.3.4).
I parametri OEM di backup sono un backup dei parametri OEM principali e hanno la stessa struttura (vedere Tabella 7).
Prima di usare il contenuto dei parametri OEM main o backup, le implementazioni verificheranno il contenuto convalidando il rispettivo checksum di avvio.
I produttori devono popolare i parametri OEM main e backup con le proprie strutture di parametri personalizzati, se presenti e qualsiasi altra struttura di parametri. Le operazioni di formato successive conservano il contenuto dei parametri OEM main e backup.
Le implementazioni possono aggiornare i parametri OEM main e backup in base alle esigenze e aggiornare anche i rispettivi checksum di avvio.
Tabella 7 Struttura dei parametri OEM
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Parametri[0] | 0 | 48 | Questo campo è obbligatorio e la sezione 3.3.1 definisce il contenuto. |
. . . |
. . . |
. . . |
. . . |
Parametri[9] | 432 | 48 | Questo campo è obbligatorio e la sezione 3.3.1 definisce il contenuto. |
Riservato | 480 | 2BytePerSectorShift - 480 | Questo campo è obbligatorio e il relativo contenuto è riservato. Nota: i settori di avvio principale e di backup contengono entrambi il campo BytePerSectorShift. |
3.3.1 Parametri[0] ... Parametri[9]
Ogni campo Parametri in questa matrice contiene una struttura di parametri, che deriva dal modello Parametri generici (vedere sezione 3.3.2). Qualsiasi campo Parametri inutilizzati deve essere descritto come contenente una struttura Di parametri Null (vedere la sezione 3.3.3).
Modello di parametri generici 3.3.2
Il modello Parametri generici fornisce la definizione di base di una struttura di parametri (vedere Tabella 8). Tutte le strutture dei parametri derivano da questo modello. Il supporto per questo modello di parametri generici è obbligatorio.
Modello di parametri generici tabella 8
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
ParametriGuid | 0 | 16 | Questo campo è obbligatorio e la sezione 3.3.2.1 definisce il contenuto. |
CustomDefined | 16 | 32 | Questo campo è obbligatorio e le strutture che derivano da questo modello definiscono il relativo contenuto. |
Campo Parametri 3.3.2.1
Il campo ParametersGuid descrive un GUID che determina il layout del resto della struttura dei parametri specificati.
Tutti i valori possibili per questo campo sono validi; Tuttavia, i produttori devono usare uno strumento di generazione GUID, ad esempio GuidGen.exe, per selezionare un GUID durante la derivazione di strutture di parametri personalizzati da questo modello.
Parametri Null 3.3.3
La struttura Parametri Null deriva dal modello Parametri generici (vedere la sezione 3.3.2) e descrive un campo Parametri inutilizzati (vedere Tabella 9). Quando si crea o si aggiorna la struttura dei parametri OEM, le implementazioni popolano i campi Parametri inutilizzati con la struttura Parametri Null. Inoltre, quando si crea o si aggiorna la struttura dei parametri OEM, le implementazioni devono consolidare le strutture dei parametri Null alla fine della matrice, lasciando così tutte le altre strutture parametri all'inizio della struttura parametri OEM.
Il supporto per la struttura Parametri Null è obbligatorio.
Struttura parametri Null tabella 9
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
ParametriGuid | 0 | 16 | Questo campo è obbligatorio e la sezione 3.3.3.1 definisce il contenuto. |
Riservato | 16 | 32 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
Campo Parametri 3.3.3.1
Il campo ParametersGuid deve essere conforme alla definizione fornita dal modello Parametri generici (vedere la sezione 3.3.2.1).
Il valore valido per questo campo, nella notazione GUID, è {00000000-0000-0000-0000-000000000000}.
3.3.4 Parametri flash
La struttura dei parametri Flash deriva dal modello Parametri generici (vedere la sezione 3.3.2) e contiene parametri per i supporti flash (vedere Tabella 10). I produttori di dispositivi di archiviazione basati su flash possono popolare un campo Parametri (preferibilmente il campo Parametri[0] con questa struttura di parametri. Le implementazioni possono usare le informazioni nella struttura Parametri Flash per ottimizzare le operazioni di accesso durante letture/scritture e per l'allineamento delle strutture del file system che durano la formattazione del supporto.
Il supporto per la struttura Parametri Flash è facoltativo.
Struttura parametri Flash tabella 10
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
ParametriGuid | 0 | 16 | Questo campo è obbligatorio e la sezione 3.3.4.1 definisce il contenuto. |
CancelBlockSize | 16 | 4 | Questo campo è obbligatorio e la sezione 3.3.4.2 definisce il relativo contenuto. |
PageSize | 20 | 4 | Questo campo è obbligatorio e la sezione 3.3.4.3 definisce il relativo contenuto. |
SpareSectors | 24 | 4 | Questo campo è obbligatorio e la sezione 3.3.4.4 definisce il contenuto. |
RandomAccessTime | 28 | 4 | Questo campo è obbligatorio e la sezione 3.3.4.5 definisce il contenuto. |
ProgrammingTime | 32 | 4 | Questo campo è obbligatorio e la sezione 3.3.4.6 definisce il contenuto. |
ReadCycle | 36 | 4 | Questo campo è obbligatorio e la sezione 3.3.4.7 definisce il contenuto. |
WriteCycle | 40 | 4 | Questo campo è obbligatorio e la sezione 3.3.4.8 definisce il contenuto. |
Riservato | 44 | 4 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
Tutti i valori possibili per tutti i campi Parametri Flash, ad eccezione del campo ParametersGuid, sono validi. Tuttavia, il valore 0 indica che il campo è effettivamente senza significato (le implementazioni ignorano il campo specificato).
Campo Parametri 3.3.4.1
Il campo ParametersGuid deve essere conforme alla definizione fornita nel modello Parametri generici (vedere la sezione 3.3.2.1).
Il valore valido per questo campo, nella notazione GUID, è {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.
Campo CancelBlockSize 3.3.4.2
Il campo CancelBlockSize descrive le dimensioni, in byte, del blocco di cancellazione del supporto flash.
Campo PageSize 3.3.4.3
Il campo PageSize descrive le dimensioni, in byte della pagina del supporto flash.
3.3.4.4 Campo SpareSectors
Il campo SpareSectors descrive il numero di settori disponibili per le sue operazioni interne di spaziatura.
Campo CasualAccessTime 3.3.4.5
Il campo RandomAccessTime descrive il tempo medio di accesso casuale del supporto flash, in nanosecondi.
Campo ProgrammingTime 3.3.4.6
Il campo ProgrammingTime descrive il tempo di programmazione medio del supporto flash, in nanosecondi.
Campo ReadCycle 3.3.4.7
Il campo ReadCycle descrive il tempo medio di lettura del supporto flash, in nanosecondi.
Campo WriteCycle 3.3.4.8
Il campo WriteCycle descrive il tempo medio del ciclo di scrittura, in nanosecondi.
3.4 Aree secondarie main e backup boot checksum
I checksum principale e di avvio di backup contengono uno schema ripetuto del checksum di quattro byte del contenuto di tutte le altre aree secondarie nelle rispettive aree di avvio. Il calcolo checksum non include i campi VolumeFlags e PercentInUse nel rispettivo settore di avvio (vedere la figura 1). Il modello ripetuto del checksum a quattro byte riempie il rispettivo sotto-area checksum di avvio dall'inizio alla fine dell'area secondaria.
Prima di usare il contenuto di una delle altre aree secondarie nelle aree di avvio principale o di backup, le implementazioni verificheranno il contenuto convalidando il rispettivo checksum di avvio.
Mentre l'operazione di formato iniziale popola sia i checksum principale che di backup con il modello di checksum ripetuto, le implementazioni aggiorneranno questi settori come contenuto degli altri settori nelle rispettive aree di avvio cambiano.
Figura 1 Calcolo checksum avvio
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 Area tabella allocazione file
L'area FAT (File Allocation Table) può contenere fino a due FTS, una nell'area secondaria FIRST FAT e un'altra nell'area secondaria FAT seconda. Il campo NumberOfFats descrive il numero di fats contenute in questa area. I valori validi per il campo NumberOfFats sono 1 e 2. Pertanto, la prima sotto-area FAT contiene sempre un FAT. Se il campo NumberOfFats è due, la seconda sotto-area FAT contiene anche un valore FAT.
Il campo ActiveFat del campo VolumeFlags descrive quale FAT è attivo. Solo il campo VolumeFlags nel settore principale di avvio è corrente. Le implementazioni considerano il FAT che non è attivo come non aggiornato. L'uso del FAT inattivo e il passaggio tra le reti FATS è specifico.
4.1 Prime e Second FAT Sub-regions
Un fat descrive le catene di cluster nell'heap cluster (vedere Tabella 11). Una catena di cluster è una serie di cluster che forniscono spazio per registrare il contenuto di file, directory e altre strutture del file system. Un FAT rappresenta una catena di cluster come elenco collegato in modo singly-linked di indici del cluster. Ad eccezione delle prime due voci, ogni voce in un FAT rappresenta esattamente un cluster.
Tabella 11 Struttura tabella allocazione file
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
FatEntry[0] | 0 | 4 | Questo campo è obbligatorio e la sezione 4.1.1 definisce il contenuto. |
FatEntry[1] | 4 | 4 | Questo campo è obbligatorio e la sezione 4.1.2 definisce il contenuto. |
FatEntry[2] | 8 | 4 | Questo campo è obbligatorio e la sezione 4.1.3 definisce il contenuto. |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | Questo campo è obbligatorio e la sezione 4.1.3 definisce il contenuto. ClusterCount + 1 non può mai superare FFFFFFF6h. Nota: i settori di avvio principale e di backup contengono entrambi il campo ClusterCount. |
ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytePerSectorShift) – ((ClusterCount + 2) * 4) | Questo campo è obbligatorio e il relativo contenuto, se presente, non sono definiti. Nota: i settori di avvio principale e di backup contengono entrambi i campi ClusterCount, FatLength e BytesPerSectorShift. |
4.1.1 Campo FatEntry[0]
Il campo FatEntry[0] descrive il tipo di supporto nel primo byte (byte più basso) e deve contenere FFh nei tre byte rimanenti.
Il tipo di supporto (il primo byte) deve essere F8h.
4.1.2 FatEntry[1] Campo
Il campo FatEntry[1] esiste solo a causa della precedenza storica e non descrive nulla di interesse.
Il valore valido per questo campo è FFFFFFFFh. Le implementazioni inizializzano questo campo al relativo valore prescritto e non devono usare questo campo per alcun scopo. Le implementazioni non devono interpretare questo campo e conservarne il contenuto tra operazioni che modificano i campi circostanti.
4.1.3 FatEntry[2] ... Campi FatEntry[ClusterCount+1]
Ogni campo FatEntry in questa matrice rappresenta un cluster nell'heap del cluster. FatEntry[2] rappresenta il primo cluster nell'heap cluster e FatEntry[ClusterCount+1] rappresenta l'ultimo cluster nell'heap del cluster.
L'intervallo valido di valori per questi campi deve essere:
Tra 2 e ClusterCount + 1, inclusivamente, che punta alla successiva fatEntry nella catena di cluster specificata; il dato FatEntry non punta ad alcun FatEntry che lo precede nella catena di cluster specificata
Esattamente FFFFFFFFF7h, che contrassegna il cluster corrispondente di FatEntry come "cattivo"
FFFFFFFFh, che contrassegna il cluster corrispondente di FatEntry come ultimo cluster di una catena di cluster; si tratta dell'unico valore valido per l'ultima fatEntry di qualsiasi catena di cluster specificata
5 Area dati
L'area Dati contiene l'heap cluster, che fornisce spazio gestito per strutture, directory e file del file system.
5.1 Area secondaria del cluster Heap
La struttura dell'Heap cluster è molto semplice (vedere Tabella 12); ogni serie consecutiva di settori descrive un cluster, come definisce il campo SectorsPerClusterShift. Importante, il primo cluster dell'heap cluster ha indice due, che corrisponde direttamente all'indice di FatEntry[2].
In un volume exFAT, una bitmap di allocazione (vedere la sezione 7.1.5) mantiene il record dello stato di allocazione di tutti i cluster. Si tratta di una differenza significativa rispetto ai predecessori di exFAT (FAT12, FAT16 e FAT32), in cui un FAT ha mantenuto un record dello stato di allocazione di tutti i cluster nell'heap del cluster.
Struttura heap cluster tabella 12
Nome campo | Offset (settore) |
Dimensione (settori) |
Commenti |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2SettoriPerClusterShift | Questo campo è obbligatorio e la sezione 5.1.1 definisce il contenuto. Nota: i settori di avvio principale e di backup contengono entrambi i campi ClusterHeapOffset e SectorsPerClusterShift. |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount - 1) * 2SettoriPerClusterShift | 2SettoriPerClusterShift | Questo campo è obbligatorio e la sezione 5.1.1 definisce il contenuto. Nota: i settori di avvio principale e di backup contengono entrambi i campi ClusterCount, ClusterHeapOffset e SectorsPerClusterShift. |
5.1.1 Cluster[2] ... Campi cluster[ClusterCount+1]
Ogni campo Cluster in questa matrice è una serie di settori contigui, le cui dimensioni sono definite dal campo SectorsPerClusterShift.
Struttura della directory 6
Il file system exFAT usa un approccio ad albero di directory per gestire le strutture e i file del file system presenti nell'heap del cluster. Le directory hanno una relazione uno-a-molti tra padre e figlio nell'albero della directory.
La directory a cui fa riferimento il campo FirstClusterOfRootDirectory è la radice dell'albero della directory. Tutte le altre directory derivano dalla directory radice in modo collegato in modo singly-linked.
Ogni directory è costituita da una serie di voci di directory (vedere Tabella 13).
Una o più voci di directory si combinano in un set di voci di directory che descrive un elemento di interesse, ad esempio una struttura del file system, una sotto directory o un file.
Tabella 13 Struttura directory
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
DirectoryEntry[0] | 0 | 32 | Questo campo è obbligatorio e la sezione 6.1 definisce il contenuto. |
. . . |
. . . |
. . . |
. . . |
DirectoryEntry[N-1] | (N – 1) * 32 | 32 | Questo campo è obbligatorio e la sezione 6.1 definisce il contenuto. N, il numero di campi DirectoryEntry è la dimensione, in byte, della catena di cluster che contiene la directory specificata, suddivisa per le dimensioni di un campo DirectoryEntry, 32 byte. |
6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]
Ogni campo DirectoryEntry in questa matrice deriva dal modello Generic DirectoryEntry (vedere la sezione 6.2).
6.2 Modello generico DirectoryEntry
Il modello Generic DirectoryEntry fornisce la definizione di base per le voci della directory (vedere Tabella 14). Tutte le strutture di voce della directory derivano da questo modello e solo le strutture di voce della directory definite da Microsoft sono valide (exFAT non dispone di provisioning per le strutture di voce della directory definite dal produttore, ad eccezione di quanto definito nella sezione 7.8 e sezione 7.9). La possibilità di interpretare il modello Generic DirectoryEntry è obbligatoria.
Tabella 14 Modello generico DirectoryEntry
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 6.2.1 definisce il contenuto. |
CustomDefined | 1 | 19 | Questo campo è obbligatorio e le strutture che derivano da questo modello possono definire il relativo contenuto. |
FirstCluster | 20 | 4 | Questo campo è obbligatorio e la sezione 6.2.2 definisce il contenuto. |
Lunghezza dati | 24 | 8 | Questo campo è obbligatorio e la sezione 6.2.3 definisce il contenuto. |
Campo EntryType 6.2.1
Il campo EntryType ha tre modalità di utilizzo che il valore del campo definisce (vedere l'elenco seguente).
00h, che è un marcatore end-of-directory e le condizioni seguenti si applicano:
Tutti gli altri campi nella determinata DirectoryEntry sono effettivamente riservati
Tutte le voci di directory successive nella directory specificata sono anche indicatori end-of-directory
I marcatori di fine directory sono validi solo all'esterno dei set di voci di directory
Le implementazioni possono sovrascrivere i marcatori end-of-directory in base alle esigenze
Tra 01h e 7Fh inclusivamente, che è un marcatore di voce di directory inutilizzato e le condizioni seguenti si applicano:
Tutti gli altri campi nella determinata DirectoryEntry sono effettivamente non definiti
Le voci della directory inutilizzate sono valide solo all'esterno dei set di voci di directory
Le implementazioni possono sovrascrivere le voci di directory inutilizzate in base alle esigenze
Questo intervallo di valori corrisponde al campo InUse (vedere sezione 6.2.1.4) contenente il valore 0
Tra 81h e FFh inclusivamente, ovvero una voce di directory regolare e le condizioni seguenti si applicano:
Il contenuto del campo EntryType (vedere Tabella 15) determina il layout della struttura DirectoryEntry
Questo intervallo di valori e solo questo intervallo di valori, sono validi all'interno di un set di voci di directory
Questo intervallo di valori corrisponde direttamente al campo InUse (vedere la sezione 6.2.1.4) contenente il valore 1
Per evitare modifiche apportate al campo InUse (vedere sezione 6.2.1.4) erroneamente risultante da un marcatore di directory end-of-directory, il valore 80h non è valido.
Tabella 15 Struttura del campo EntryType generico
Nome campo | Offset (bit) |
Dimensione (bit) |
Commenti |
---|---|---|---|
TypeCode | 0 | 5 | Questo campo è obbligatorio e la sezione 6.2.1.1 definisce il contenuto. |
TypeImportance | 5 | 1 | Questo campo è obbligatorio e la sezione 6.2.1.2 definisce il contenuto. |
TypeCategory | 6 | 1 | Questo campo è obbligatorio e la sezione 6.2.1.3 definisce il contenuto. |
InUse | 7 | 1 | Questo campo è obbligatorio e la sezione 6.2.1.4 definisce il contenuto. |
Campo TypeCode 6.2.1.1
Il campo TypeCode descrive parzialmente il tipo specifico della voce di directory specificata. Questo campo, oltre ai campi TypeImportance e TypeCategory (vedere la sezione 6.2.1.2 e la sezione 6.2.1.3, rispettivamente) identificare in modo univoco il tipo della voce di directory specificata.
Tutti i valori possibili di questo campo sono validi, a meno che i campi TypeImportance e TypeCategory contengano entrambi il valore 0; in questo caso, il valore 0 non è valido per questo campo.
Campo 6.2.1.2 TypeImportance
Il campo TypeImportance descrive l'importanza della voce di directory specificata.
I valori validi per questo campo devono essere:
0, il che significa che la voce di directory specificata è fondamentale (vedere rispettivamente la sezione 6.3.1.2.1 e la sezione 6.4.1.2.1 per le voci di directory primarie e critiche secondarie critiche)
1, il che significa che la voce di directory specificata è benigna (vedere la sezione 6.3.1.2.2 e la sezione6.4.1.2.2 per le voci di directory primaria e secondaria benigna, rispettivamente)
Campo TypeCategory 6.2.1.3
Il campo TypeCategory descrive la categoria della voce di directory specificata.
I valori validi per questo campo devono essere:
0, il che significa che la voce di directory specificata è primaria (vedere la sezione 6.3)
1, che significa che la voce di directory specificata è secondaria (vedere la sezione 6.4)
Campo InUse 6.2.1.4
Il campo InUse descrive se la voce di directory specificata in uso o meno.
I valori validi per questo campo devono essere:
0, che significa che la voce di directory specificata non è in uso; ciò significa che la struttura specificata è effettivamente una voce di directory inutilizzata
1, il che significa che la voce di directory specificata è in uso; ciò significa che la struttura specificata è una voce di directory regolare
6.2.2 Campo FirstCluster
Il campo FirstCluster contiene l'indice del primo cluster di un'allocazione nell'heap cluster associato alla voce di directory specificata.
L'intervallo di valori valido per questo campo deve essere:
Esattamente 0, che significa che nessuna allocazione del cluster esiste
Tra 2 e ClusterCount + 1, ovvero l'intervallo di indici di cluster validi
Le strutture che derivano da questo modello possono ridefinire sia i campi FirstCluster che DataLength, se un'allocazione del cluster non è compatibile con la struttura derivata.
6.2.3 Campo DataLength
Il campo DataLength descrive le dimensioni, in byte, dei dati contenuti nell'allocazione del cluster associata.
L'intervallo di valori valido per questo campo è:
Almeno 0; se il campo FirstCluster contiene il valore 0, l'unico valore valido del campo è 0
Al massimo ClusterCount * 2SectorsPerClusterShift* 2BytePerSectorShift
Le strutture che derivano da questo modello possono ridefinire sia i campi FirstCluster che DataLength, se un'allocazione del cluster non è possibile per la struttura derivata.
6.3 Modello primario generico DirectoryEntry
La prima voce di directory in un set di voci di directory deve essere una voce di directory primaria. Tutte le voci di directory successive, se presenti, nel set di voci di voce della directory devono essere voci di directory secondarie (vedere la sezione 6.4).
La possibilità di interpretare il modello Generic Primary DirectoryEntry è obbligatoria.
Tutte le strutture di voce di directory primarie derivano dal modello Generic Primary DirectoryEntry (vedere Tabella 16), che deriva dal modello Generic DirectoryEntry (vedere sezione 6.2).
Tabella 16 Modello di directory primaria genericaEntry
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 6.3.1 definisce il contenuto. |
SecondaryCount | 1 | 1 | Questo campo è obbligatorio e la sezione 6.3.2 definisce il contenuto. |
SetChecksum | 2 | 2 | Questo campo è obbligatorio e la sezione 6.3.3 definisce il contenuto. |
GeneralPrimaryFlags | 4 | 2 | Questo campo è obbligatorio e la sezione 6.3.4 definisce il contenuto. |
CustomDefined | 6 | 14 | Questo campo è obbligatorio e strutture che derivano da questo modello definiscono il relativo contenuto. |
FirstCluster | 20 | 4 | Questo campo è obbligatorio e la sezione 6.3.5 definisce il contenuto. |
Lunghezza dati | 24 | 8 | Questo campo è obbligatorio e la sezione 6.3.6 definisce il contenuto. |
Campo EntryType 6.3.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello Generic DirectoryEntry (vedere la sezione 6.2.1).
Campo TypeCode 6.3.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic DirectoryEntry (vedere la sezione 6.2.1.1).
Campo TypeImportance 6.3.1.2
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic DirectoryEntry (vedere la sezione 6.2.1.2).
6.3.1.2.1 Voci della directory primaria critica
Le voci della directory primaria critiche contengono informazioni critiche per la gestione corretta di un volume exFAT. Solo la directory radice contiene voci di directory primarie critiche (le voci della directory file sono un'eccezione, vedere Sezione 7.4).
La definizione delle voci di directory primaria critiche è correlata al numero di revisione exFAT principale. Le implementazioni supportano tutte le voci di directory primarie critiche e registrano solo le strutture di voce della directory primaria critiche definite da questa specifica.
6.3.1.2.2 Voci della directory primaria benigna
Le voci della directory primaria benigne contengono informazioni aggiuntive che possono essere utili per la gestione di un volume exFAT. Qualsiasi directory può contenere voci di directory primaria benigne.
La definizione delle voci della directory primaria benigna correla al numero di revisione exFAT secondario. Il supporto per qualsiasi voce di directory primaria benigna questa specifica o qualsiasi specifica successiva, definisce è facoltativo. Una voce di directory primaria non riconosciuta esegue il rendering dell'intera voce di directory impostata come non riconosciuta (oltre la definizione dei modelli di voci di directory applicabili).
Campo TypeCategory 6.3.3.3
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello Generic DirectoryEntry (vedere la sezione 6.2.1.3).
Per questo modello, il valore valido per questo campo deve essere 0.
Campo InUse 6.3.1.4
Il campo InUse deve essere conforme alla definizione fornita nel modello Generic DirectoryEntry (vedere la sezione 6.2.1.4).
6.3.2 Campo secondarioCount
Il campo SecondaryCount descrive il numero di voci di directory secondarie che seguono immediatamente la voce di directory primaria specificata. Queste voci di directory secondarie, insieme alla voce di directory primaria specificata, costituiscono il set di voci di directory.
L'intervallo di valori valido per questo campo deve essere:
Almeno 0, il che significa che questa voce di directory primaria è l'unica voce nel set di voci di directory
Al massimo 255, ovvero le voci di directory successive 255 e questa voce di directory primaria include il set di voci di directory
Le strutture di voce della directory primaria critiche che derivano da questo modello possono ridefinire sia i campi SecondaryCount che SetChecksum.
Campo SetChecksum 6.3.3
Il campo SetChecksum contiene il checksum di tutte le voci della directory nel set di voci di directory specificato. Tuttavia, il checksum esclude questo campo (vedere la figura 2). Le implementazioni devono verificare che il contenuto di questo campo sia valido prima di usare qualsiasi altra voce di directory nel set di voci di directory specificato.
Le strutture di voce della directory primaria critiche che derivano da questo modello possono ridefinire sia i campi SecondaryCount che SetChecksum.
Figura 2 EntrySetChecksum Computation
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 GeneralePrimaryFlags Field
Il campo GeneralPrimaryFlags contiene flag (vedere Tabella 17).
Le strutture di voce della directory primaria critiche che derivano da questo modello possono ridefinire questo campo.
Tabella 17 Generic GeneralPrimaryFlags Field Structure
Nome campo | Offset (bit) |
Dimensione (bit) |
Commenti |
---|---|---|---|
AllocazionePossible | 0 | 1 | Questo campo è obbligatorio e la sezione 6.3.4.1 definisce il contenuto. |
NoFatChain | 1 | 1 | Questo campo è obbligatorio e la sezione 6.3.4.2 definisce il contenuto. |
CustomDefined | 2 | 14 | Questo campo è obbligatorio e le strutture che derivano da questo modello possono definire questo campo. |
6.3.4.1 Campo allocazionePossible
Il campo AllocationPossible descrive se un'allocazione nell'heap del cluster è possibile per la voce di directory specificata.
I valori validi per questo campo devono essere:
0, il che significa che un'allocazione associata di cluster non è possibile e i campi FirstCluster e DataLength sono effettivamente non definiti (strutture che derivano da questo modello possono ridefinire tali campi)
1, il che significa che è possibile un'allocazione associata dei cluster e i campi FirstCluster e DataLength sono definiti
Campo NoFatChain 6.3.4.2
Il campo NoFatChain indica se il fat attivo descrive la catena di cluster dell'allocazione specificata.
I valori validi per questo campo devono essere:
0, che significa che le voci FAT corrispondenti per la catena di cluster di allocazione sono valide e le implementazioni devono interpretarle; se il campo AllocationPossible contiene il valore 0 o se il campo AllocationPossible contiene il valore 1 e il campo FirstCluster contiene il valore 0, l'unico valore valido del campo è 0
1, il che significa che l'allocazione associata è una serie contigua di cluster; le voci FAT corrispondenti per i cluster non sono valide e le implementazioni non verranno interpretate; le implementazioni possono usare l'equazione seguente per calcolare le dimensioni dell'allocazione associata: DataLength / (2SectorsPerClusterShift* 2BytePerSectorShift) arrotondate fino all'intero più vicino
Se le strutture di voce della directory primaria critiche che derivano da questo modello ridefiniscono il campo GeneralPrimaryFlags, le voci FAT corrispondenti per la catena di cluster di allocazione associata sono valide.
6.3.5 Campo FirstCluster
Il campo FirstCluster è conforme alla definizione fornita nel modello Generic DirectoryEntry (vedere la sezione 6.2.2).
Se il bit NoFatChain è 1, FirstCluster deve puntare a un cluster valido nell'heap del cluster.
Le strutture di voce della directory primaria critiche che derivano da questo modello possono ridefinire i campi FirstCluster e DataLength. Altre strutture che derivano da questo modello possono ridefinire i campi FirstCluster e DataLength solo se il campo AllocationPossible contiene il valore 0.
6.3.6 Campo DataLength
Il campo DataLength deve essere conforme alla definizione fornita nel modello Generic DirectoryEntry (vedere la sezione 6.2.3).
Se il bit NoFatChain è 1, DataLength non deve essere zero. Se il campo FirstCluster è zero, DataLength deve anche essere zero.
Le strutture di voce della directory primaria critiche che derivano da questo modello possono ridefinire i campi FirstCluster e DataLength. Altre strutture che derivano da questo modello possono ridefinire i campi FirstCluster e DataLength solo se il campo AllocationPossible contiene il valore 0.
6.4 Modello di directory secondaria genericaEntry
Lo scopo centrale delle voci della directory secondaria consiste nel fornire informazioni aggiuntive su un set di voci di directory. La possibilità di interpretare il modello Generic Secondary DirectoryEntry è obbligatorio.
La definizione delle voci della directory secondaria critica e benigna correla al numero di revisione di exFAT secondario. Il supporto per qualsiasi voce di directory secondaria critica o benigna questa specifica, o le specifiche successive, definisce è facoltativo.
Tutte le strutture di voce di directory secondarie derivano dal modello Generic Secondary DirectoryEntry (vedere Tabella 18), che deriva dal modello Generic DirectoryEntry (vedere sezione 6.2).
Tabella 18 Modello di directory secondaria genericaEntry
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 6.4.1 definisce il contenuto. |
GeneraleSecondaryFlags | 1 | 1 | Questo campo è obbligatorio e la sezione 6.4.2 definisce il contenuto. |
CustomDefined | 2 | 18 | Questo campo è obbligatorio e strutture che derivano da questo modello definiscono il relativo contenuto. |
FirstCluster | 20 | 4 | Questo campo è obbligatorio e la sezione 6.4.3 definisce il contenuto. |
Lunghezza dati | 24 | 8 | Questo campo è obbligatorio e la sezione 6.4.4 definisce il contenuto. |
Campo EntryType 6.4.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello Generic DirectoryEntry (vedere la sezione 6.2.1)
Campo TypeCode 6.4.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic DirectoryEntry (vedere la sezione 6.2.1.1).
Campo TypeImportance 6.4.1.2
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic DirectoryEntry (vedere la sezione 6.2.1.2).
6.4.1.2.1 Voci della directory secondaria critica
Le voci di directory secondarie critiche contengono informazioni critiche per la gestione corretta del set di voci di directory. Anche se il supporto per qualsiasi voce di directory secondaria critica specifica è facoltativo, una voce di directory critica non riconosciuta esegue il rendering dell'intero set di voci di directory come non riconosciuto (oltre la definizione dei modelli di voce di directory applicabili).
Tuttavia, se un set di voci di directory contiene almeno una voce di directory secondaria critica che un'implementazione non riconosce, l'implementazione interpreterà al massimo i modelli delle voci di directory nel set di voci di directory e non i dati associati ad alcuna voce di directory nel set di voci di directory contiene (le voci di directory sono un'eccezione, vedere la sezione 7.4).
6.4.1.2.2 Voci di directory secondarie non dannose
Le voci di directory secondarie non dannose contengono informazioni aggiuntive che possono essere utili per la gestione del set di voci di directory contenitore. Il supporto per qualsiasi voce di directory secondaria non dannosa specifica è facoltativo. Le voci di directory secondarie non riconosciute non riconosciute non eseguono il rendering dell'intera voce di directory impostata come non riconosciuta.
Le implementazioni possono ignorare qualsiasi voce secondaria non dannosa che non riconosce.
6.4.1.3 TypeCategory Field
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello DirectoryEntry generico (vedere la sezione 6.2.1.3).
Per questo modello, il valore valido per questo campo è 1.
6.4.1.4 Campo Uso
Il campo InUse deve essere conforme alla definizione fornita nel modello DirectoryEntry generico (vedere la sezione 6.2.1.4).
6.4.2 Campo GeneraleSecondaryFlags
Il campo GeneralSecondaryFlags contiene flag (vedere la tabella 19).
Tabella 19 Generic GeneralSecondaryFlags Field Structure
Nome campo | Offset (bit) |
Dimensione (bit) |
Commenti |
---|---|---|---|
AllocationPossible | 0 | 1 | Questo campo è obbligatorio e la sezione 6.4.2.1 ne definisce il contenuto. |
NoFatChain | 1 | 1 | Questo campo è obbligatorio e la sezione 6.4.2.2 ne definisce il contenuto. |
CustomDefined | 2 | 6 | Questo campo è obbligatorio e le strutture che derivano da questo modello possono definire questo campo. |
6.4.2.1 Campo AllocationPossible
Il campo AllocationPossible deve avere la stessa definizione del campo con lo stesso nome nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.4.1).
Campo NoFatChain 6.4.2.2
Il campo NoFatChain avrà la stessa definizione del campo con lo stesso nome nel modello Generic Primary DirectoryEntry (vedere sezione 6.3.4.2).
6.4.3 Campo FirstCluster
Il campo FirstCluster deve essere conforme alla definizione fornita nel modello DirectoryEntry generico (vedere la sezione 6.2.2).
Se il bit NoFatChain è 1, FirstCluster deve puntare a un cluster valido nell'heap del cluster.
6.4.4 Campo DataLength
Il campo DataLength deve essere conforme alla definizione fornita nel modello DirectoryEntry generico (vedere la sezione 6.2.3).
Se il bit NoFatChain è 1, DataLength non deve essere zero. Se il campo FirstCluster è zero, DataLength deve anche essere zero.
7 Definizioni delle voci di directory
La revisione 1.00 del file system exFAT definisce le voci di directory seguenti:
Primario critico
Bitmap di allocazione (sezione 7.1)
Tabella up case (sezione 7.2)
Etichetta volume (sezione 7.3)
File (sezione 7.4)
Primario non dannoso
GUID del volume (sezione 7.5)
Riempimento TexFAT (sezione 7.10)
Secondario critico
Estensione di flusso (sezione 7.6)
Nome file (sezione 7.7)
Secondario non dannoso
Estensione fornitore (sezione 7.8)
Allocazione fornitore (sezione 7.9)
7.1 Voce della directory bitmap di allocazione
Nel file system exFAT, un FAT non descrive lo stato di allocazione dei cluster; piuttosto, una bitmap di allocazione fa. Le bitmap di allocazione esistono nell'heap del cluster (vedere la sezione 7.1.5) e contengono voci di directory primarie critiche corrispondenti nella directory radice (vedere la tabella 20).
Il campo NumberOfFats determina il numero di voci di directory bitmap di allocazione valide nella directory radice. Se il campo NumberOfFats contiene il valore 1, l'unico numero valido di voci della directory Bitmap di allocazione è 1. Inoltre, la voce di directory Bitmap di allocazione è valida solo se descrive la prima bitmap di allocazione (vedere la sezione 7.1.2.1). Se il campo NumberOfFats contiene il valore 2, l'unico numero valido di voci della directory Bitmap di allocazione è 2. Inoltre, le due voci della directory Bitmap di allocazione sono valide solo se una descrive la prima bitmap di allocazione e l'altra descrive la seconda bitmap di allocazione.
Tabella 20 Struttura bitmap di allocazione
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 7.1.1 ne definisce il contenuto. |
BitmapFlags | 1 | 1 | Questo campo è obbligatorio e la sezione 7.1.2 ne definisce il contenuto. |
Riservato | 2 | 18 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
FirstCluster | 20 | 4 | Questo campo è obbligatorio e la sezione 7.1.3 ne definisce il contenuto. |
Lunghezza dati | 24 | 8 | Questo campo è obbligatorio e la sezione 7.1.4 ne definisce il contenuto. |
Campo EntryType 7.1.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1).
Campo TypeCode 7.1.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.1).
Per una voce di directory Bitmap di allocazione, il valore valido per questo campo è 1.
Campo TypeImportance 7.1.1.2
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.2).
Per una voce di directory Bitmap di allocazione, il valore valido per questo campo è 0.
Campo TypeCategory 7.1.1.3
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.3).
Campo InUse 7.1.1.1.4
Il campo InUse deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.4).
7.1.2 Campo BitmapFlags
Il campo BitmapFlags contiene flag (vedere Tabella 21).
Tabella 21 Struttura campo BitmapFlags
Nome campo | Offset (bit) |
Dimensione (bit) |
Commenti |
---|---|---|---|
BitmapIdentifier | 0 | 1 | Questo campo è obbligatorio e la sezione 7.1.2.1 definisce il contenuto. |
Riservato | 1 | 7 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
Campo BitmapIdentifier 7.1.2.1
Il campo BitmapIdentifier indica quale bitmap di allocazione descrive la voce di directory specificata. Le implementazioni useranno la prima bitmap di allocazione insieme al Primo FAT e useranno la seconda bitmap di allocazione in combinazione con il secondo FAT. Il campo ActiveFat descrive quali bitmap DI FAT e allocazione sono attivi.
I valori validi per questo campo devono essere:
0, che significa che la voce di directory specificata descrive la prima bitmap di allocazione
1, ovvero la voce di directory specificata descrive la seconda bitmap di allocazione ed è possibile solo quando NumberOfFats contiene il valore 2
7.1.3 Campo FirstCluster
Il campo FirstCluster deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.5).
Questo campo contiene l'indice del primo cluster della catena di cluster, come descritto da FAT, che ospita la bitmap di allocazione.
7.1.4 Campo DataLength
Il campo DataCluster deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.6).
7.1.5 Bitmap allocazione
Una bitmap di allocazione registra lo stato di allocazione dei cluster nell'heap del cluster. Ogni bit in una bitmap di allocazione indica se il cluster corrispondente è disponibile per l'allocazione o meno.
Una bitmap di allocazione rappresenta i cluster dal livello più basso all'indice più alto (vedere Tabella 22). Per motivi cronologici, il primo cluster ha indice 2. Nota: il primo bit nella bitmap è il bit più basso del primo byte.
Tabella 22 Struttura bitmap di allocazione
Nome campo | Offset (bit) |
Dimensione (bit) |
Commenti |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | Questo campo è obbligatorio e la sezione 7.1.5.1 definisce il contenuto. |
. . . |
. . . |
. . . |
. . . |
BitmapEntry[ClusterCount+1] | ClusterCount - 1 | 1 | Questo campo è obbligatorio e la sezione 7.1.5.1 definisce il contenuto. Nota: i settori di avvio principale e di backup contengono entrambi il campo ClusterCount. |
Riservato | ClusterCount | (DataLength * 8) - ClusterCount | Questo campo è obbligatorio e il relativo contenuto, se presente, sono riservati. Nota: i settori di avvio principale e di backup contengono entrambi il campo ClusterCount. |
7.1.5.1 BitmapEntry[2] ... Campi BitmapEntry[ClusterCount+1]
Ogni campo BitmapEntry in questa matrice rappresenta un cluster nell'heap del cluster. BitmapEntry[2] rappresenta il primo cluster nell'heap cluster e BitmapEntry[ClusterCount+1] rappresenta l'ultimo cluster nell'heap del cluster.
I valori validi per questi campi devono essere:
0, che descrive il cluster corrispondente come disponibile per l'allocazione
1, che descrive il cluster corrispondente come non disponibile per l'allocazione (un'allocazione del cluster può già utilizzare il cluster corrispondente o il fat attivo può descrivere il cluster corrispondente come non valido)
7.2 Voce della directory tabella up-case
La tabella up-case definisce la conversione da caratteri minuscoli a caratteri maiuscoli. Ciò è importante a causa della voce della directory Nome file (vedere la sezione 7.7) usando caratteri Unicode e il file system exFAT in caso di conservazione senza distinzione tra maiuscole e minuscole. La tabella up-case esiste nell'heap del cluster (vedere la sezione 7.2.5) e ha una voce di directory primaria critica corrispondente nella directory radice (vedere Tabella 23). Il numero valido di voci della directory tabella up-case è 1.
A causa della relazione tra la tabella up-case e i nomi di file, le implementazioni non devono modificare la tabella up-case, ad eccezione delle operazioni di formato.
Tabella 23 struttura DirectoryEntry di tabella up-case
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 7.2.1 definisce il contenuto. |
Reserved1 | 1 | 3 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
TableChecksum | 4 | 4 | Questo campo è obbligatorio e la sezione 7.2.2 definisce il contenuto. |
Reserved2 | 8 | 12 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
FirstCluster | 20 | 4 | Questo campo è obbligatorio e la sezione 7.2.3 definisce il contenuto. |
Lunghezza dati | 24 | 8 | Questo campo è obbligatorio e la sezione 7.2.4 definisce il contenuto. |
Campo EntryType 7.2.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1).
Campo TypeCode 7.2.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.1).
Per la voce della directory tabella up-case, il valore valido per questo campo è 2.
Campo TypeImportance 7.2.1.2
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.2).
Per la voce della directory tabella up-case, il valore valido per questo campo è 0.
Campo TypeCategory 7.2.1.3
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.3).
Campo InUse 7.2.1.4
Il campo InUse deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.4).
Campo TableChecksum 7.2.2
Il campo TableChecksum contiene il checksum della tabella up-case (che descrivono i campi FirstCluster e DataLength). Le implementazioni devono verificare che il contenuto di questo campo sia valido prima di usare la tabella up-case.
Figura 3 Calcolo TableChecksum
UInt32 TableChecksum
(
UCHAR * Table, // points to an in-memory copy of the up-case table
UInt64 DataLength
)
{
UInt32 Checksum = 0;
UInt64 Index;
for (Index = 0; Index < DataLength; Index++)
{
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Table[Index];
}
return Checksum;
}
7.2.3 Campo FirstCluster
Il campo FirstCluster deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.5).
Questo campo contiene l'indice del primo cluster della catena di cluster, come descritto da FAT, che ospita la tabella up-case.
7.2.4 Campo DataLength
Il campo DataCluster deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.6).
Tabella up-case 7.2.5
Una tabella up-case è una serie di mapping di caratteri Unicode. Un mapping di caratteri è costituito da un campo a 2 byte, con l'indice del campo nella tabella up-case che rappresenta il carattere Unicode da inserire in maiuscolo e il campo 2 byte che rappresenta il carattere Unicode in maiuscolo.
I primi 128 caratteri Unicode hanno mapping obbligatori (vedere Tabella 24). Una tabella up-case con qualsiasi altro mapping di caratteri per uno dei primi 128 caratteri Unicode non è valida.
Le implementazioni che supportano solo i caratteri dell'intervallo di mapping obbligatorio possono ignorare i mapping del resto della tabella up-case. Tali implementazioni usano solo i caratteri dell'intervallo di mapping obbligatorio durante la creazione o la ridenominazione dei file (tramite la voce directory Nome file, vedere Sezione 7.7). Quando si aggiornano i nomi di file esistenti, tali implementazioni non devono essere maiuscole e minuscole dall'intervallo di mapping non obbligatorio, ma le lasciano intatte nel nome del file con maiuscole e minuscole risultanti (si tratta di un'up-maiuscola parziale). Quando si confrontano nomi di file, tali implementazioni considerano nomi di file diversi dal nome in confronto solo da caratteri Unicode dall'intervallo di mapping non obbligatorio come equivalente. Anche se tali nomi di file sono solo potenzialmente equivalenti, tali implementazioni non possono garantire che il nome file completamente maiuscolo non si compara con il nome in confronto.
Tabella 24 Voci di tabella up case obbligatoria 128
Indice tabella | + 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 |
(Nota: le voci con mapping up-case non identity sono in grassetto)
Dopo la formattazione di un volume, le implementazioni possono generare una tabella con maiuscole e minuscole in un formato compresso usando la compressione del mapping delle identità, poiché una grande parte dello spazio dei caratteri Unicode non ha alcun concetto di maiuscole e minuscole ( ovvero i caratteri "maiuscole" e "maiuscole" sono equivalenti). Le implementazioni comprimono una tabella up-case rappresentando una serie di mapping di identità con il valore FFFFh seguito con il numero di mapping delle identità.
Ad esempio, un'implementazione può rappresentare i primi 100 mapping di caratteri (64h) con le otto voci seguenti di una tabella con maiuscole e minuscole compresse:
FFFFh, 0061h, 0041h, 0042h, 0043h
Le prime due voci indicano i primi 97 caratteri (61h) (da 0000h a 0060h) hanno mapping di identità. I caratteri successivi, 0061h fino a 0063h, mappano rispettivamente a caratteri 0041h fino a 0043h.
La possibilità di fornire una tabella con maiuscole e minuscole compresse durante la formattazione di un volume è facoltativa. Tuttavia, la possibilità di interpretare sia una tabella non compressa che una tabella con maiuscole e minuscole compresse è obbligatoria. Il valore del campo TableChecksum è sempre conforme al modo in cui la tabella up-case esiste nel volume, che può essere in formato compresso o non compresso.
7.2.5.1 Tabella up case consigliata
Quando si formatta un volume, le implementazioni devono registrare la tabella up case consigliata in formato compresso (vedere la tabella 25), per cui il valore del campo TableChecksum è E619D30Dh.
Se un'implementazione definisce la propria tabella di maiuscole e minuscole, compressa o non compressa, tale tabella includerà l'intervallo di caratteri Unicode completo (dai codici carattere 0000h all'inclusione FFFFh).
Tabella 25 Tabella maiuscola consigliata in formato compresso
Offset non elaborato | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
0080h | 0080h | 0081h | 0082h | 0083h | 0084h | 0085h | 0086h | 0087h |
0088h | 0088h | 0089h | 008Ah | 008Bh | 008Ch | 008Dh | 008Eh | 008Fh |
0090h | 0090h | 0091h | 0092h | 0093h | 0094h | 0095h | 0096h | 0097h |
0098h | 0098h | 0099h | 009Ah | 009Bh | 009Ch | 009Dh | 009Eh | 009Fh |
00A0h | 00A0h | 00A1h | 00A2h | 00A3h | 00A4h | 00A5h | 00A6h | 00A7h |
00A8h | 00A8h | 00A9h | 00AAh | 00ABh | 00ACh | 00ADh | 00AEh | 00AFh |
00B0h | 00B0h | 00B1h | 00B2h | 00B3h | 00B4h | 00B5h | 00B6h | 00B7h |
00B8h | 00B8h | 00B9h | 00BAh | 00BBh | 00BCh | 00BDh | 00BEh | 00BFh |
00C0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00C8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00D0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00D7h |
00D8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 00DFh |
00E0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00E8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00F0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00F7h |
00F8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 0178h |
0100h | 0100h | 0100h | 0102h | 0102h | 0104h | 0104h | 0106h | 0106h |
0108h | 0108h | 0108h | 010Ah | 010Ah | 010Ch | 010Ch | 010Eh | 010Eh |
0110h | 0110h | 0110h | 0112h | 0112h | 0114h | 0114h | 0116h | 0116h |
0118h | 0118h | 0118h | 011Ah | 011Ah | 011Ch | 011Ch | 011Eh | 011Eh |
0120h | 0120h | 0120h | 0122h | 0122h | 0124h | 0124h | 0126h | 0126h |
0128h | 0128h | 0128h | 012Ah | 012Ah | 012Ch | 012Ch | 012Eh | 012Eh |
0130h | 0130h | 0131h | 0132h | 0132h | 0134h | 0134h | 0136h | 0136h |
0138h | 0138h | 0139h | 0139h | 013Bh | 013Bh | 013Dh | 013Dh | 013Fh |
0140h | 013Fh | 0141h | 0141h | 0143h | 0143h | 0145h | 0145h | 0147h |
0148h | 0147h | 0149h | 014Ah | 014Ah | 014Ch | 014Ch | 014Eh | 014Eh |
0150h | 0150h | 0150h | 0152h | 0152h | 0154h | 0154h | 0156h | 0156h |
0158h | 0158h | 0158h | 015Ah | 015Ah | 015Ch | 015Ch | 015Eh | 015Eh |
0160h | 0160h | 0160h | 0162h | 0162h | 0164h | 0164h | 0166h | 0166h |
0168h | 0168h | 0168h | 016Ah | 016Ah | 016Ch | 016Ch | 016Eh | 016Eh |
0170h | 0170h | 0170h | 0172h | 0172h | 0174h | 0174h | 0176h | 0176h |
0178h | 0178h | 0179h | 0179h | 017Bh | 017Bh | 017Dh | 017Dh | 017Fh |
0180h | 0243h | 0181h | 0182h | 0182h | 0184h | 0184h | 0186h | 0187h |
0188h | 0187h | 0189h | 018Ah | 018Bh | 018Bh | 018Dh | 018Eh | 018Fh |
0190h | 0190h | 0191h | 0191h | 0193h | 0194h | 01F6h | 0196h | 0197h |
0198h | 0198h | 0198h | 023Dh | 019Bh | 019Ch | 019Dh | 0220h | 019Fh |
01A0h | 01A0h | 01A0h | 01A2h | 01A2h | 01A4h | 01A4h | 01A6h | 01A7h |
01A8h | 01A7h | 01A9h | 01AAh | 01ABh | 01ACh | 01ACh | 01AEh | 01AFh |
01B0h | 01AFh | 01B1h | 01B2h | 01B3h | 01B3h | 01B5h | 01B5h | 01B7h |
01B8h | 01B8h | 01B8h | 01BAh | 01BBh | 01BCh | 01BCh | 01BEh | 01F7h |
01C0h | 01C0h | 01C1h | 01C2h | 01C3h | 01C4h | 01C5h | 01C4h | 01C7h |
01C8h | 01C8h | 01C7h | 01CAh | 01CBh | 01CAh | 01CDh | 01CDh | 01CFh |
01D0h | 01CFh | 01D1h | 01D1h | 01D3h | 01D3h | 01D5h | 01D5h | 01D7h |
01D8h | 01D7h | 01D9h | 01D9h | 01DBh | 01DBh | 018Eh | 01DEh | 01DEh |
01E0h | 01E0h | 01E0h | 01E2h | 01E2h | 01E4h | 01E4h | 01E6h | 01E6h |
01E8h | 01E8h | 01E8h | 01EAh | 01EAh | 01ECh | 01ECh | 01EEh | 01EEh |
01F0h | 01F0h | 01F1h | 01F2h | 01F1h | 01F4h | 01F4h | 01F6h | 01F7h |
01F8h | 01F8h | 01F8h | 01FAh | 01FAh | 01FCh | 01FCh | 01FEh | 01FEh |
0200h | 0200h | 0200h | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 0214h | 0216h | 0216h |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | 0226h | 0226h |
0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
02B8h | 02B8h | 02B9h | 02BAh | 02BBh | 02BCh | 02BDh | 02BEh | 02BFh |
02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02FFh |
0300h | 0300h | 0301h | 0302h | 0303h | 0304h | 0305h | 0306h | 0307h |
0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 0312h | 0313h | 0314h | 0315h | 0316h | 0317h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 0332h | 0333h | 0334h | 0335h | 0336h | 0337h |
0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 0346h | 0347h |
0348h | 0348h | 0349h | 034Ah | 034Bh | 034Ch | 034Dh | 034Eh | 034Fh |
0350h | 0350h | 0351h | 0352h | 0353h | 0354h | 0355h | 0356h | 0357h |
0358h | 0358h | 0359h | 035Ah | 035Bh | 035Ch | 035Dh | 035Eh | 035Fh |
0360h | 0360h | 0361h | 0362h | 0363h | 0364h | 0365h | 0366h | 0367h |
0368h | 0368h | 0369h | 036Ah | 036Bh | 036Ch | 036Dh | 036Eh | 036Fh |
0370h | 0370h | 0371h | 0372h | 0373h | 0374h | 0375h | 0376h | 0377h |
0378h | 0378h | 0379h | 037Ah | 03FDh | 03FEh | 03FFh | 037Eh | 037Fh |
0380h | 0380h | 0381h | 0382h | 0383h | 0384h | 0385h | 0386h | 0387h |
0388h | 0388h | 0389h | 038Ah | 038Bh | 038Ch | 038Dh | 038Eh | 038Fh |
0390h | 0390h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
0398h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03A0h | 03A0h | 03A1h | 03A2h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03A8h | 03A8h | 03A9h | 03AAh | 03ABh | 0386h | 0388h | 0389h | 038Ah |
03B0h | 03B0h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
03B8h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03C0h | 03A0h | 03A1h | 03A3h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03C8h | 03A8h | 03A9h | 03AAh | 03ABh | 038Ch | 038Eh | 038Fh | 03CFh |
03D0h | 03D0h | 03D1h | 03D2h | 03D3h | 03D4h | 03D5h | 03D6h | 03D7h |
03D8h | 03D8h | 03D8h | 03DAh | 03DAh | 03DCh | 03DCh | 03DEh | 03DEh |
03E0h | 03E0h | 03E0h | 03E2h | 03E2h | 03E4h | 03E4h | 03E6h | 03E6h |
03E8h | 03E8h | 03E8h | 03EAh | 03EAh | 03ECh | 03ECh | 03EEh | 03EEh |
03F0h | 03F0h | 03F1h | 03F9h | 03F3h | 03F4h | 03F5h | 03F6h | 03F7h |
03F8h | 03F7h | 03F9h | 03FAh | 03FAh | 03FCh | 03FDh | 03FEh | 03FFh |
0400h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0410h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0420h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0428h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0430h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0438h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0440h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0448h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0450h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0458h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0460h | 0460h | 0460h | 0462h | 0462h | 0464h | 0464h | 0466h | 0466h |
0468h | 0468h | 0468h | 046Ah | 046Ah | 046Ch | 046Ch | 046Eh | 046Eh |
0470h | 0470h | 0470h | 0472h | 0472h | 0474h | 0474h | 0476h | 0476h |
0478h | 0478h | 0478h | 047Ah | 047Ah | 047Ch | 047Ch | 047Eh | 047Eh |
0480h | 0480h | 0480h | 0482h | 0483h | 0484h | 0485h | 0486h | 0487h |
0488h | 0488h | 0489h | 048Ah | 048Ah | 048Ch | 048Ch | 048Eh | 048Eh |
0490h | 0490h | 0490h | 0492h | 0492h | 0494h | 0494h | 0496h | 0496h |
0498h | 0498h | 0498h | 049Ah | 049Ah | 049Ch | 049Ch | 049Eh | 049Eh |
04A0h | 04A0h | 04A0h | 04A2h | 04A2h | 04A4h | 04A4h | 04A6h | 04A6h |
04A8h | 04A8h | 04A8h | 04AAh | 04AAh | 04ACh | 04ACh | 04AEh | 04AEh |
04B0h | 04B0h | 04B0h | 04B2h | 04B2h | 04B4h | 04B4h | 04B6h | 04B6h |
04B8h | 04B8h | 04B8h | 04BAh | 04BAh | 04BCh | 04BCh | 04BEh | 04BEh |
04C0h | 04C0h | 04C1h | 04C1h | 04C3h | 04C3h | 04C5h | 04C5h | 04C7h |
04C8h | 04C7h | 04C9h | 04C9h | 04CBh | 04CBh | 04CDh | 04CDh | 04C0h |
04D0h | 04D0h | 04D0h | 04D2h | 04D2h | 04D4h | 04D4h | 04D6h | 04D6h |
04D8h | 04D8h | 04D8h | 04DAh | 04DAh | 04DCh | 04DCh | 04DEh | 04DEh |
04E0h | 04E0h | 04E0h | 04E2h | 04E2h | 04E4h | 04E4h | 04E6h | 04E6h |
04E8h | 04E8h | 04E8h | 04EAh | 04EAh | 04ECh | 04ECh | 04EEh | 04EEh |
04F0h | 04F0h | 04F0h | 04F2h | 04F2h | 04F4h | 04F4h | 04F6h | 04F6h |
04F8h | 04F8h | 04F8h | 04FAh | 04FAh | 04FCh | 04FCh | 04FEh | 04FEh |
0500h | 0500h | 0500h | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h | 0510h | 0510h | 0512h | 0512h | 0514h | 0515h | 0516h | 0517h |
0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 0521h | 0522h | 0523h | 0524h | 0525h | 0526h | 0527h |
0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
0530h | 0530h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0538h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0540h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0548h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0550h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | 0557h |
0558h | 0558h | 0559h | 055Ah | 055Bh | 055Ch | 055Dh | 055Eh | 055Fh |
0560h | 0560h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0568h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0570h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0578h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0580h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | FFFFh |
0588h | 17F6h | 2C63h | 1D7Eh | 1D7Fh | 1D80h | 1D81h | 1D82h | 1D83h |
0590h | 1D84h | 1D85h | 1D86h | 1D87h | 1D88h | 1D89h | 1D8Ah | 1D8Bh |
0598h | 1D8Ch | 1D8Dh | 1D8Eh | 1D8Fh | 1D90h | 1D91h | 1D92h | 1D93h |
05A0h | 1D94h | 1D95h | 1D96h | 1D97h | 1D98h | 1D99h | 1D9Ah | 1D9Bh |
05A8h | 1D9Ch | 1D9Dh | 1D9Eh | 1D9Fh | 1DA0h | 1DA1h | 1DA2h | 1DA3h |
05B0h | 1DA4h | 1DA5h | 1DA6h | 1DA7h | 1DA8h | 1DA9h | 1DAAh | 1DABh |
05B8h | 1DACh | 1DADh | 1DAEh | 1DAFh | 1DB0h | 1DB1h | 1DB2h | 1DB3h |
05C0h | 1DB4h | 1DB5h | 1DB6h | 1DB7h | 1DB8h | 1DB9h | 1DBAh | 1DBBh |
05C8h | 1DBCh | 1DBDh | 1DBEh | 1DBFh | 1DC0h | 1DC1h | 1DC2h | 1DC3h |
05D0h | 1DC4h | 1DC5h | 1DC6h | 1DC7h | 1DC8h | 1DC9h | 1DCAh | 1DCBh |
05D8h | 1DCCh | 1DCDh | 1DCEh | 1DCFh | 1DD0h | 1DD1h | 1DD2h | 1DD3h |
05E0h | 1DD4h | 1DD5h | 1DD6h | 1DD7h | 1DD8h | 1DD9h | 1DDAh | 1DDBh |
05E8h | 1DDCh | 1DDDh | 1DDEh | 1DDFh | 1DE0h | 1DE1h | 1DE2h | 1DE3h |
05F0h | 1DE4h | 1DE5h | 1DE6h | 1DE7h | 1DE8h | 1DE9h | 1DEAh | 1DEBh |
05F8h | 1DECh | 1DEDh | 1DEEh | 1DEFh | 1DF0h | 1DF1h | 1DF2h | 1DF3h |
0600h | 1DF4h | 1DF5h | 1DF6h | 1DF7h | 1DF8h | 1DF9h | 1DFAh | 1DFBh |
0608h | 1DFCh | 1DFDh | 1DFEh | 1DFFh | 1E00h | 1E00h | 1E02h | 1E02h |
0610h | 1E04h | 1E04h | 1E06h | 1E06h | 1E08h | 1E08h | 1E0Ah | 1E0Ah |
0618h | 1E0Ch | 1E0Ch | 1E0Eh | 1E0Eh | 1E10h | 1E10h | 1E12h | 1E12h |
0620h | 1E14h | 1E14h | 1E16h | 1E16h | 1E18h | 1E18h | 1E1Ah | 1E1Ah |
0628h | 1E1Ch | 1E1Ch | 1E1Eh | 1E1Eh | 1E20h | 1E20h | 1E22h | 1E22h |
0630h | 1E24h | 1E24h | 1E26h | 1E26h | 1E28h | 1E28h | 1E2Ah | 1E2Ah |
0638h | 1E2Ch | 1E2Ch | 1E2Eh | 1E2Eh | 1E30h | 1E30h | 1E32h | 1E32h |
0640h | 1E34h | 1E34h | 1E36h | 1E36h | 1E38h | 1E38h | 1E3Ah | 1E3Ah |
0648h | 1E3Ch | 1E3Ch | 1E3Eh | 1E3Eh | 1E40h | 1E40h | 1E42h | 1E42h |
0650h | 1E44h | 1E44h | 1E46h | 1E46h | 1E48h | 1E48h | 1E4Ah | 1E4Ah |
0658h | 1E4Ch | 1E4Ch | 1E4Eh | 1E4Eh | 1E50h | 1E50h | 1E52h | 1E52h |
0660h | 1E54h | 1E54h | 1E56h | 1E56h | 1E58h | 1E58h | 1E5Ah | 1E5Ah |
0668h | 1E5Ch | 1E5Ch | 1E5Eh | 1E5Eh | 1E60h | 1E60h | 1E62h | 1E62h |
0670h | 1E64h | 1E64h | 1E66h | 1E66h | 1E68h | 1E68h | 1E6Ah | 1E6Ah |
0678h | 1E6Ch | 1E6Ch | 1E6Eh | 1E6Eh | 1E70h | 1E70h | 1E72h | 1E72h |
0680h | 1E74h | 1E74h | 1E76h | 1E76h | 1E78h | 1E78h | 1E7Ah | 1E7Ah |
0688h | 1E7Ch | 1E7Ch | 1E7Eh | 1E7Eh | 1E80h | 1E80h | 1E82h | 1E82h |
0690h | 1E84h | 1E84h | 1E86h | 1E86h | 1E88h | 1E88h | 1E8Ah | 1E8Ah |
0698h | 1E8Ch | 1E8Ch | 1E8Eh | 1E8Eh | 1E90h | 1E90h | 1E92h | 1E92h |
06A0h | 1E94h | 1E94h | 1E96h | 1E97h | 1E98h | 1E99h | 1E9Ah | 1E9Bh |
06A8h | 1E9Ch | 1E9Dh | 1E9Eh | 1E9Fh | 1EA0h | 1EA0h | 1EA2h | 1EA2h |
06B0h | 1EA4h | 1EA4h | 1EA6h | 1EA6h | 1EA8h | 1EA8h | 1EAAh | 1EAAh |
06B8h | 1EACh | 1EACh | 1EAEh | 1EAEh | 1EB0h | 1EB0h | 1EB2h | 1EB2h |
06C0h | 1EB4h | 1EB4h | 1EB6h | 1EB6h | 1EB8h | 1EB8h | 1EBAh | 1EBAh |
06C8h | 1EBCh | 1EBCh | 1EBEh | 1EBEh | 1EC0h | 1EC0h | 1EC2h | 1EC2h |
06D0h | 1EC4h | 1EC4h | 1EC6h | 1EC6h | 1EC8h | 1EC8h | 1ECAh | 1ECAh |
06D8h | 1ECCh | 1ECCh | 1ECEh | 1ECEh | 1ED0h | 1ED0h | 1ED2h | 1ED2h |
06E0h | 1ED4h | 1ED4h | 1ED6h | 1ED6h | 1ED8h | 1ED8h | 1EDAh | 1EDAh |
06E8h | 1EDCh | 1EDCh | 1EDEh | 1EDEh | 1EE0h | 1EE0h | 1EE2h | 1EE2h |
06F0h | 1EE4h | 1EE4h | 1EE6h | 1EE6h | 1EE8h | 1EE8h | 1EEAh | 1EEAh |
06F8h | 1EECh | 1EECh | 1EEEh | 1EEEh | 1EF0h | 1EF0h | 1EF2h | 1EF2h |
0700h | 1EF4h | 1EF4h | 1EF6h | 1EF6h | 1EF8h | 1EF8h | 1EFAh | 1EFBh |
0708h | 1EFCh | 1EFDh | 1EFEh | 1EFFh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0710h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0718h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0720h | 1F1Ch | 1F1Dh | 1F16h | 1F17h | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0728h | 1F1Ch | 1F1Dh | 1F1Eh | 1F1Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0730h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0738h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0740h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0748h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0750h | 1F4Ch | 1F4Dh | 1F46h | 1F47h | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0758h | 1F4Ch | 1F4Dh | 1F4Eh | 1F4Fh | 1F50h | 1F59h | 1F52h | 1F5Bh |
0760h | 1F54h | 1F5Dh | 1F56h | 1F5Fh | 1F58h | 1F59h | 1F5Ah | 1F5Bh |
0768h | 1F5Ch | 1F5Dh | 1F5Eh | 1F5Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0770h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0778h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1FBAh | 1FBBh | 1FC8h | 1FC9h |
0780h | 1FCAh | 1FCBh | 1FDAh | 1FDBh | 1FF8h | 1FF9h | 1FEAh | 1FEBh |
0788h | 1FFAh | 1FFBh | 1F7Eh | 1F7Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0790h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0798h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A0h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A8h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B0h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B8h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FB8h | 1FB9h | 1FB2h | 1FBCh |
07C0h | 1FB4h | 1FB5h | 1FB6h | 1FB7h | 1FB8h | 1FB9h | 1FBAh | 1FBBh |
07C8h | 1FBCh | 1FBDh | 1FBEh | 1FBFh | 1FC0h | 1FC1h | 1FC2h | 1FC3h |
07D0h | 1FC4h | 1FC5h | 1FC6h | 1FC7h | 1FC8h | 1FC9h | 1FCAh | 1FCBh |
07D8h | 1FC3h | 1FCDh | 1FCEh | 1FCFh | 1FD8h | 1FD9h | 1FD2h | 1FD3h |
07E0h | 1FD4h | 1FD5h | 1FD6h | 1FD7h | 1FD8h | 1FD9h | 1FDAh | 1FDBh |
07E8h | 1FDCh | 1FDDh | 1FDEh | 1FDFh | 1FE8h | 1FE9h | 1FE2h | 1FE3h |
07F0h | 1FE4h | 1FECh | 1FE6h | 1FE7h | 1FE8h | 1FE9h | 1FEAh | 1FEBh |
07F8h | 1FECh | 1FEDh | 1FEEh | 1FEFh | 1FF0h | 1FF1h | 1FF2h | 1FF3h |
0800h | 1FF4h | 1FF5h | 1FF6h | 1FF7h | 1FF8h | 1FF9h | 1FFAh | 1FFBh |
0808h | 1FF3h | 1FFDh | 1FFEh | 1FFFh | 2000h | 2001h | 2002h | 2003h |
0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
0818h | 200Ch | 200Dh | 200Eh | 200Fh | 2010h | 2011h | 2012h | 2013h |
0820h | 2014h | 2015h | 2016h | 2017h | 2018h | 2019h | 201Ah | 201Bh |
0828h | 201Ch | 201Dh | 201Eh | 201Fh | 2020h | 2021h | 2022h | 2023h |
0830h | 2024h | 2025h | 2026h | 2027h | 2028h | 2029h | 202Ah | 202Bh |
0838h | 202Ch | 202Dh | 202Eh | 202Fh | 2030h | 2031h | 2032h | 2033h |
0840h | 2034h | 2035h | 2036h | 2037h | 2038h | 2039h | 203Ah | 203Bh |
0848h | 203Ch | 203Dh | 203Eh | 203Fh | 2040h | 2041h | 2042h | 2043h |
0850h | 2044h | 2045h | 2046h | 2047h | 2048h | 2049h | 204Ah | 204Bh |
0858h | 204Ch | 204Dh | 204Eh | 204Fh | 2050h | 2051h | 2052h | 2053h |
0860h | 2054h | 2055h | 2056h | 2057h | 2058h | 2059h | 205Ah | 205Bh |
0868h | 205Ch | 205Dh | 205Eh | 205Fh | 2060h | 2061h | 2062h | 2063h |
0870h | 2064h | 2065h | 2066h | 2067h | 2068h | 2069h | 206Ah | 206Bh |
0878h | 206Ch | 206Dh | 206Eh | 206Fh | 2070h | 2071h | 2072h | 2073h |
0880h | 2074h | 2075h | 2076h | 2077h | 2078h | 2079h | 207Ah | 207Bh |
0888h | 207Ch | 207Dh | 207Eh | 207Fh | 2080h | 2081h | 2082h | 2083h |
0890h | 2084h | 2085h | 2086h | 2087h | 2088h | 2089h | 208Ah | 208Bh |
0898h | 208Ch | 208Dh | 208Eh | 208Fh | 2090h | 2091h | 2092h | 2093h |
08A0h | 2094h | 2095h | 2096h | 2097h | 2098h | 2099h | 209Ah | 209Bh |
08A8h | 209Ch | 209Dh | 209Eh | 209Fh | 20A0h | 20A1h | 20A2h | 20A3h |
08B0h | 20A4h | 20A5h | 20A6h | 20A7h | 20A8h | 20A9h | 20AAh | 20ABh |
08B8h | 20ACh | 20ADh | 20AEh | 20AFh | 20B0h | 20B1h | 20B2h | 20B3h |
08C0h | 20B4h | 20B5h | 20B6h | 20B7h | 20B8h | 20B9h | 20BAh | 20BBh |
08C8h | 20BCh | 20BDh | 20BEh | 20BFh | 20C0h | 20C1h | 20C2h | 20C3h |
08D0h | 20C4h | 20C5h | 20C6h | 20C7h | 20C8h | 20C9h | 20CAh | 20CBh |
08D8h | 20CCh | 20CDh | 20CEh | 20CFh | 20D0h | 20D1h | 20D2h | 20D3h |
08E0h | 20D4h | 20D5h | 20D6h | 20D7h | 20D8h | 20D9h | 20DAh | 20DBh |
08E8h | 20DCh | 20DDh | 20DEh | 20DFh | 20E0h | 20E1h | 20E2h | 20E3h |
08F0h | 20E4h | 20E5h | 20E6h | 20E7h | 20E8h | 20E9h | 20EAh | 20EBh |
08F8h | 20ECh | 20EDh | 20EEh | 20EFh | 20F0h | 20F1h | 20F2h | 20F3h |
0900h | 20F4h | 20F5h | 20F6h | 20F7h | 20F8h | 20F9h | 20FAh | 20FBh |
0908h | 20FCh | 20FDh | 20FEh | 20FFh | 2100h | 2101h | 2102h | 2103h |
0910h | 2104h | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 2113h |
0920h | 2114h | 2115h | 2116h | 2117h | 2118h | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 2120h | 2121h | 2122h | 2123h |
0930h | 2124 ore | 2125h | 2126h | 2127h | 2128h | 2129h | 212Ah | 212Bh |
0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131h | 2132h | 2133h |
0940h | 2134h | 2135h | 2136h | 2137h | 2138h | 2139h | 213Ah | 213Bh |
0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
0950h | 2144h | 2145h | 2146h | 2147h | 2148h | 2149h | 214Ah | 214Bh |
0958h | 214Ch | 214Dh | 2132h | 214Fh | 2150h | 2151h | 2152h | 2153h |
0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
0968h | 215Ch | 215Dh | 215Eh | 215Fh | 2160h | 2161h | 2162h | 2163h |
0970h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160h | 2161h | 2162h | 2163h |
0980h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 24BBh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 0746h | 2C00h |
09B0h | 2C01h | 2C02h | 2C03h | 2C04h | 2C05h | 2C06h | 2C07h | 2C08h |
09B8h | 2C09h | 2C0Ah | 2C0Bh | 2C0Ch | 2C0Dh | 2C0Eh | 2C0Fh | 2C10h |
09C0h | 2C11h | 2C12h | 2C13h | 2C14h | 2C15h | 2C16h | 2C17h | 2C18h |
09C8h | 2C19h | 2C1Ah | 2C1Bh | 2C1Ch | 2C1Dh | 2C1Eh | 2C1Fh | 2C20h |
09D0h | 2C21h | 2C22h | 2C23h | 2C24h | 2C25h | 2C26h | 2C27h | 2C28h |
09D8h | 2C29h | 2C2Ah | 2C2Bh | 2C2Ch | 2C2Dh | 2C2Eh | 2C5Fh | 2C60h |
09E0h | 2C60h | 2C62h | 2C63h | 2C64h | 2C65h | 2C66h | 2C67h | 2C67h |
09E8h | 2C69h | 2C69h | 2C6Bh | 2C6Bh | 2C6Dh | 2C6Eh | 2C6Fh | 2C70h |
09F0h | 2C71h | 2C72h | 2C73h | 2C74h | 2C75h | 2C75h | 2C77h | 2C78h |
09F8h | 2C79h | 2C7Ah | 2C7Bh | 2C7Ch | 2C7Dh | 2C7Eh | 2C7Fh | 2C80h |
0A00h | 2C80h | 2C82h | 2C82h | 2C84h | 2C84h | 2C86h | 2C86h | 2C88h |
0A08h | 2C88h | 2C8Ah | 2C8Ah | 2C8Ch | 2C8Ch | 2C8Eh | 2C8Eh | 2C90h |
0A10h | 2C90h | 2C92h | 2C92h | 2C94h | 2C94h | 2C96h | 2C96h | 2C98h |
0A18h | 2C98h | 2C9Ah | 2C9Ah | 2C9Ch | 2C9Ch | 2C9Eh | 2C9Eh | 2CA0h |
0A20h | 2CA0h | 2CA2h | 2CA2h | 2CA4h | 2CA4h | 2CA6h | 2CA6h | 2CA8h |
0A28h | 2CA8h | 2CAAh | 2CAAh | 2CACh | 2CACh | 2CAEh | 2CAEh | 2CB0h |
0A30h | 2CB0h | 2CB2h | 2CB2h | 2CB4h | 2CB4h | 2CB6h | 2CB6h | 2CB8h |
0A38h | 2CB8h | 2CBAh | 2CBAh | 2CBCh | 2CBCh | 2CBEh | 2CBEh | 2CC0h |
0A40h | 2CC0h | 2CC2h | 2CC2h | 2CC4h | 2CC4h | 2CC6h | 2CC6h | 2CC8h |
0A48h | 2CC8h | 2CCAh | 2CCAh | 2CCCh | 2CCCh | 2CCEh | 2CCEh | 2CD0h |
0A50h | 2CD0h | 2CD2h | 2CD2h | 2CD4h | 2CD4h | 2CD6h | 2CD6h | 2CD8h |
0A58h | 2CD8h | 2CDAh | 2CDAh | 2CDCh | 2CDCh | 2CDEh | 2CDEh | 2CE0h |
0A60h | 2CE0h | 2CE2h | 2CE2h | 2CE4h | 2CE5h | 2CE6h | 2CE7h | 2CE8h |
0A68h | 2CE9h | 2CEAh | 2CEBh | 2CECh | 2CEDh | 2CEEh | 2CEFh | 2CF0h |
0A70h | 2CF1h | 2CF2h | 2CF3h | 2CF4h | 2CF5h | 2CF6h | 2CF7h | 2CF8h |
0A78h | 2CF9h | 2CFAh | 2CFBh | 2CFCh | 2CFDh | 2CFEh | 2CFFh | 10A0h |
0A80h | 10A1h | 10A2h | 10A3h | 10A4h | 10A5h | 10A6h | 10A7h | 10A8h |
0A88h | 10A9h | 10AAh | 10ABh | 10ACh | 10ADh | 10AEh | 10AFh | 10B0h |
0A90h | 10B1h | 10B2h | 10B3h | 10B4h | 10B5h | 10B6h | 10B7h | 10B8h |
0A98h | 10B9h | 10BAh | 10BBh | 10BCh | 10BDh | 10BEh | 10BFh | 10C0h |
0AA0h | 10C1h | 10C2h | 10C3h | 10C4h | 10C5h | FFFFh | D21Bh | FF21h |
0AA8h | FF22h | FF23h | FF24h | FF25h | FF26h | FF27h | FF28h | FF29h |
0AB0h | FF2Ah | FF2Bh | FF2Ch | FF2Dh | FF2Eh | FF2Fh | FF30h | FF31h |
0AB8h | FF32h | FF33h | FF34h | FF35h | FF36h | FF37h | FF38h | FF39h |
0AC0h | FF3Ah | FF5Bh | FF5Ch | FF5Dh | FF5Eh | FF5Fh | FF60h | FF61h |
0AC8h | FF62h | FF63h | FF64h | FF65h | FF66h | FF67h | FF68h | FF69h |
0AD0h | FF6Ah | FF6Bh | FF6Ch | FF6Dh | FF6Eh | FF6Fh | FF70h | FF71h |
0AD8h | FF72h | FF73h | FF74h | FF75h | FF76h | FF77h | FF78h | FF79h |
0AE0h | FF7Ah | FF7Bh | FF7Ch | FF7Dh | FF7Eh | FF7Fh | FF80h | FF81h |
0AE8h | FF82h | FF83h | FF84h | FF85h | FF86h | FF87h | FF88h | FF89h |
0AF0h | FF8Ah | FF8Bh | FF8Ch | FF8Dh | FF8Eh | FF8Fh | FF90h | FF91h |
0AF8h | FF92h | FF93h | FF94h | FF95h | FF96h | FF97h | FF98h | FF99h |
0B00h | FF9Ah | FF9Bh | FF9Ch | FF9Dh | FF9Eh | FF9Fh | FFA0h | FFA1h |
0B08h | FFA2h | FFA3h | FFA4h | FFA5h | FFA6h | FFA7h | FFA8h | FFA9h |
0B10h | FFAAh | FFABh | FFACh | FFADh | FFAEh | FFAFh | FFB0h | FFB1h |
0B18h | FFB2h | FFB3h | FFB4h | FFB5h | FFB6h | FFB7h | FFB8h | FFB9h |
0B20h | FFBAh | FFBBh | FFBCh | FFBDh | FFBEh | FFBFh | FFC0h | FFC1h |
0B28h | FFC2h | FFC3h | FFC4h | FFC5h | FFC6h | FFC7h | FFC8h | FFC9h |
0B30h | FFCAh | FFCBh | FFCCh | FFCDh | FFCEh | FFCFh | FFD0h | FFD1h |
0B38h | FFD2h | FFD3h | FFD4h | FFD5h | FFD6h | FFD7h | FFD8h | FFD9h |
0B40h | FFDAh | FFDBh | FFDCh | FFDDh | FFDEh | FFDFh | FFE0h | FFE1h |
0B48h | FFE2h | FFE3h | FFE4h | FFE5h | FFE6h | FFE7h | FFE8h | FFE9h |
0B50h | FFEAh | FFEBh | FFECh | FFEDh | FFEEH | FFEFh | FFF0h | FFF1h |
0B58h | FFF2h | FFF3h | FFF4h | FFF5h | FFF6h | FFF7h | FFF8h | FFF9h |
0B60h | FFFAh | FFFBh | FFFCh | FFFDh | FFFEh | FFFFh |
7.3 Voce directory etichetta volume
L'etichetta volume è una stringa Unicode che consente agli utenti finali di distinguere i volumi di archiviazione. Nel file system exFAT, l'etichetta del volume esiste come voce di directory primaria critica nella directory radice (vedere Tabella 26). Il numero valido di voci della directory dell'etichetta del volume è compreso tra 0 e 1.
Tabella 26 Struttura directory etichetta volumeEntry
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 7.3.1 definisce il contenuto. |
CharacterCount | 1 | 1 | Questo campo è obbligatorio e la sezione 7.3.2 definisce il contenuto. |
VolumeLabel | 2 | 22 | Questo campo è obbligatorio e la sezione 7.3.3 definisce il contenuto. |
Riservato | 24 | 8 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
Campo EntryType 7.3.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1).
Campo TypeCode 7.3.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.1).
Per la voce directory Etichetta volume, il valore valido per questo campo è 3.
Campo TypeImportance 7.3.1.2
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.2).
Per la voce directory Etichetta volume, il valore valido per questo campo è 0.
Campo TypeCategory 7.3.1.3
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.3).
Campo InUse 7.3.1.4
Il campo InUse deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.4).
Campo CarattereCount 7.3.2
Il campo CharacterCount contiene la lunghezza della stringa Unicode contenente il campo VolumeLabel.
L'intervallo di valori valido per questo campo deve essere:
Almeno 0, ovvero la stringa Unicode è lunga 0 caratteri (equivalente a nessuna etichetta del volume)
Al massimo 11, il che significa che la stringa Unicode è di 11 caratteri lunghi
Campo VolumeLabel 7.3.3
Il campo VolumeLabel contiene una stringa Unicode, ovvero il nome descrittivo del volume. Il campo VolumeLabel ha lo stesso set di caratteri non validi del campo FileName della voce directory Nome file (vedere la sezione 7.7.3).
7.4 Voce directory file
Le voci della directory file descrivono i file e le directory. Sono voci di directory primarie critiche e qualsiasi directory può contenere zero o più voci di directory file (vedere Tabella 27). Per la validità di una voce di directory File, è necessario che una voce di directory dell'estensione di flusso e almeno una voce di directory nome file debba seguire immediatamente la voce Della directory File (vedere la sezione 7.6 e la sezione 7.7 rispettivamente).
Tabella 27 File DirectoryEntry
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 7.4.1 definisce il contenuto. |
SecondaryCount | 1 | 1 | Questo campo è obbligatorio e la sezione 7.4.2 definisce il contenuto. |
SetChecksum | 2 | 2 | Questo campo è obbligatorio e la sezione 7.4.3 definisce il contenuto. |
FileAttributes | 4 | 2 | Questo campo è obbligatorio e la sezione 7.4.4 definisce il contenuto. |
Reserved1 | 6 | 2 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
CreateTimestamp | 8 | 4 | Questo campo è obbligatorio e la sezione 7.4.5 a> definisce il contenuto. |
LastModifiedTimestamp | 12 | 4 | Questo campo è obbligatorio e la sezione 7.4.6 definisce il contenuto. |
LastAccessedTimestamp | 16 | 4 | Questo campo è obbligatorio e la sezione 7.4.7 definisce il contenuto. |
Create10msIncrement | 20 | 1 | Questo campo è obbligatorio e la sezione 7.4.5 a> definisce il contenuto. |
LastModified10msIncrement | 21 | 1 | Questo campo è obbligatorio e la sezione 7.4.6 definisce il contenuto. |
CreateUtcOffset | 22 | 1 | Questo campo è obbligatorio e la sezione 7.4.5 a> definisce il contenuto. |
LastModifiedUtcOffset | 23 | 1 | Questo campo è obbligatorio e la sezione 7.4.6 ne definisce il contenuto. |
LastAccessedUtcOffset | 24 | 1 | Questo campo è obbligatorio e la sezione 7.4.7 ne definisce il contenuto. |
Reserved2 | 25 | 7 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
Campo EntryType 7.4.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1).
Campo TypeCode 7.4.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.1).
Per una voce di directory File, il valore valido per questo campo è 5.
Campo 7.4.1.2 TypeImportance
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.2).
Per una voce di directory File, il valore valido per questo campo è 0.
7.4.1.3 Campo TypeCategory
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.3).
7.4.1.4 Campo Uso
Il campo InUse deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.4).
7.4.2 Campo SecondaryCount
Il campo SecondaryCount deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.2).
7.4.3 Campo SetChecksum
Il campo SetChecksum deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.3).
Campo FileAttributes 7.4.4
Il campo FileAttributes contiene flag (vedere la tabella 28).
Tabella 28 Struttura dei campi FileAttributes
Nome campo | Offset (bit) |
Dimensione (bit) |
Commenti |
---|---|---|---|
ReadOnly | 0 | 1 | Questo campo è obbligatorio ed è conforme alla definizione MS-DOS. |
Nascosto | 1 | 1 | Questo campo è obbligatorio ed è conforme alla definizione MS-DOS. |
Sistema | 2 | 1 | Questo campo è obbligatorio ed è conforme alla definizione MS-DOS. |
Reserved1 | 3 | 1 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
Directory | 4 | 1 | Questo campo è obbligatorio ed è conforme alla definizione MS-DOS. |
Archiviazione | 5 | 1 | Questo campo è obbligatorio ed è conforme alla definizione MS-DOS. |
Reserved2 | 6 | 10 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
7.4.5 CreateTimestamp, Create10msIncrement e CreateUtcOffset Fields
In combinazione, i campi CreateTimestamp e CreateTime10msIncrement descrivono la data e l'ora locali in cui è stato creato il file o la directory specificati. Il campo CreateUtcOffset descrive l'offset della data e dell'ora locali dall'ora UTC. Le implementazioni impostano questi campi al momento della creazione del set di voci di directory specificato.
Questi campi sono conformi alle definizioni dei campi Timestamp, 10msIncrement e UtcOffset (vedere la sezione 7.4.8, la sezione 7.4.9 e la sezione 7.4.10 rispettivamente).
7.4.6 LastModifiedTimestamp, LastModified10msIncrement e LastModifiedUtcOffset Fields
In combinazione, i campi LastModifiedTimestamp e LastModifiedTime10msIncrement descrivono la data e l'ora locali del contenuto di uno dei cluster associati alla voce di directory dell'estensione di flusso specificata sono stati modificati per l'ultima volta. Il campo LastModifiedUtcOffset descrive l'offset della data e dell'ora locali dall'ora UTC. Le implementazioni aggiornano questi campi:
Dopo aver modificato il contenuto di uno qualsiasi dei cluster associati alla voce di directory dell'estensione di flusso specificata (ad eccezione del contenuto che esiste oltre il punto descritto dal campo ValidDataLength)
Quando si modificano i valori dei campi ValidDataLength o DataLength
Questi campi sono conformi alle definizioni dei campi Timestamp, 10msIncrement e UtcOffset (vedere la sezione 7.4.8, la sezione 7.4.9 e la sezione 7.4.10 rispettivamente).
7.4.7 Campi LastAccessedTimestamp e LastAccessedUtcOffset
Il campo LastAccessedTimestamp descrive la data e l'ora locali in cui è stato eseguito l'ultimo accesso al contenuto di uno dei cluster associati alla voce di directory dell'estensione di flusso specificata. Il campo LastAccessedUtcOffset descrive l'offset della data e dell'ora locali dall'ora UTC. Le implementazioni aggiornano questi campi:
Dopo aver modificato il contenuto di uno qualsiasi dei cluster associati alla voce di directory dell'estensione di flusso specificata (ad eccezione del contenuto che esiste oltre il valore di ValidDataLength)
Quando si modificano i valori dei campi ValidDataLength o DataLength
Le implementazioni devono aggiornare questi campi dopo aver letto il contenuto di uno dei cluster associati alla voce di directory dell'estensione di flusso specificata.
Questi campi sono conformi alle definizioni dei campi Timestamp e UtcOffset (vedere rispettivamente la sezione 7.4.8 e la sezione 7.4.10).
7.4.8 Campi timestamp
I campi timestamp descrivono sia la data che l'ora locali, fino a una risoluzione di due secondi (vedere la tabella 29).
Tabella 29 Struttura del campo Timestamp
Nome campo | Offset (bit) |
Dimensione (bit) |
Commenti |
---|---|---|---|
DoubleSeconds | 0 | 5 | Questo campo è obbligatorio e la sezione 7.4.8.1 ne definisce il contenuto. |
Minuto | 5 | 6 | Questo campo è obbligatorio e la sezione 7.4.8.2 definisce il contenuto. |
Ora | 11 | 5 | Questo campo è obbligatorio e la sezione 7.4.8.3 definisce il contenuto. |
Giorno | 16 | 5 | Questo campo è obbligatorio e la sezione 7.4.8.4 definisce il contenuto. |
Month | 21 | 4 | Questo campo è obbligatorio e la sezione 7.4.8.5 definisce il contenuto. |
Year | 25 | 7 | Questo campo è obbligatorio e la sezione 7.4.8.6 definisce il relativo contenuto. |
Campo DoubleSeconds 7.4.8.1
Il campo DoubleSeconds descrive la parte dei secondi del campo Timestamp, in due secondi più.
L'intervallo di valori valido per questo campo deve essere:
0, che rappresenta 0 secondi
29, che rappresenta 58 secondi
Campo 7.4.8.2 Minuto
Il campo Minute descrive la parte minuti del campo Timestamp.
L'intervallo di valori valido per questo campo deve essere:
0, che rappresenta 0 minuti
59, che rappresenta 59 minuti
Campo 7.4.8.3 ora
Il campo Ora descrive la parte ore del campo Timestamp.
L'intervallo di valori valido per questo campo deve essere:
0, che rappresenta 00:00 ore
23, che rappresenta 23:00 ore
Campo 7.4.8.4 Giorno
Il campo Day descrive la parte del giorno del campo Timestamp.
L'intervallo di valori valido per questo campo deve essere:
1, che è il primo giorno del mese specificato
L'ultimo giorno del mese specificato (il mese specificato definisce il numero di giorni validi)
Campo 7.4.8.5 Mese
Il campo Month descrive la parte mensile del campo Timestamp.
L'intervallo di valori valido per questo campo deve essere:
Almeno 1, che rappresenta gennaio
Al massimo 12, che rappresenta dicembre
Campo anno 7.4.8.6
Il campo Year descrive la parte dell'anno del campo Timestamp, rispetto all'anno 1980. Questo campo rappresenta l'anno 1980 con il valore 0 e l'anno 2107 con il valore 127.
Tutti i valori possibili per questo campo sono validi.
Campi 7.4.9 10msIncrement
I campi 10msIncrement forniscono una risoluzione aggiuntiva del tempo ai relativi campi Timestamp corrispondenti in più di dieci millisecondi.
L'intervallo valido di valori per questi campi deve essere:
Almeno 0, che rappresenta 0 millisecondi
Al massimo 199, che rappresenta 1990 millisecondi
7.4.10 Campi UtcOffset
I campi UtcOffset (vedere Tabella 30) descrivono l'offset da UTC alla data locale e ora dei campi Timestamp e 10msIncrement corrispondenti. L'offset da UTC a data e ora locale include gli effetti dei fusi orari e di altre regolazioni di data e ora legale, ad esempio il salvataggio legale e le modifiche dell'ora legale a livello regionale.
Tabella 30 UtcOffset Field Structure
Nome campo | Offset (bit) |
Dimensione (bit) |
Commenti |
---|---|---|---|
OffsetFromUtc | 0 | 7 | Questo campo è obbligatorio e la sezione 7.4.10.1definisce il contenuto. |
OffsetValid | 7 | 1 | Questo campo è obbligatorio e la sezione 7.4.10.2 definisce il contenuto. |
Campo OffsetFromUtc 7.4.10.1
Il campo OffsetFromUtc descrive l'offset da UTC della data e dell'ora locale dei campi Timestamp e 10msIncrement correlati. Questo campo descrive l'offset da UTC in intervalli di 15 minuti (vedere Tabella 31).
Tabella 31 Significato dei valori del campo OffsetFromUtc
Valore | Equivalente decimale firmato | Descrizione |
---|---|---|
3Fh | 63 | Data e ora locale è UTC + 15:45 |
3Eh | 62 | Data e ora locale è UTC + 15:30 |
. . . |
. . . |
. . . |
01h | 1 | Data e ora locale è UTC + 00:15 |
00h | 0 | Data e ora locale è UTC |
7Fh | -1 | Data e ora locale è UTC - 00:15 |
. . . |
. . . |
. . . |
41h | -63 | Data e ora locale è UTC - 15:45 |
40h | -64 | Data e ora locale è UTC - 16:00 |
Come indicato nella tabella precedente, tutti i valori possibili per questo campo sono validi. Tuttavia, le implementazioni devono registrare solo il valore 00h per questo campo quando:
La data e l'ora locali sono effettivamente uguali a UTC, nel qual caso il valore del campo OffsetValid sarà 1
La data e l'ora locali non sono note, nel qual caso il valore del campo OffsetValid deve essere 1 e le implementazioni devono considerare utc la data e l'ora locali
UTC non è noto, nel qual caso il valore del campo OffsetValid deve essere 0
Se l'offset di data e ora locale da UTC non corrisponde a più intervalli di 15 minuti, le implementazioni devono registrare 00h nel campo OffsetFromUtc e prendere in considerazione l'ora UTC come data e ora locale.
Campo OffsetValid 7.4.10.2
Il campo OffsetValid descrive se il contenuto del campo OffsetFromUtc è valido o meno, come indicato di seguito:
0, il che significa che il contenuto del campo OffsetFromUtc non è valido
e sarà 00h
1, il che significa che il contenuto del campo OffsetFromUtc è valido
Le implementazioni devono impostare questo campo solo sul valore 0 quando UTC non è disponibile per calcolare il valore del campo OffsetFromUtc. Se questo campo contiene il valore 0, le implementazioni considerano i campi Timestamp e 10msIncrement come lo stesso offset UTC della data e dell'ora locale corrente.
7.5 Voce della directory GUID del volume
La voce della directory GUID del volume contiene un GUID che consente alle implementazioni di distinguere in modo univoco e a livello di codice i volumi. Il GUID volume esiste come voce di directory primaria benigna nella directory radice (vedere Tabella 32). Il numero valido di voci della directory GUID del volume è compreso tra 0 e 1.
Tabella 32 GUID volumeEntry
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 7.5.1 definisce il contenuto. |
SecondaryCount | 1 | 1 | Questo campo è obbligatorio e la sezione 7.5.2 definisce il contenuto. |
SetChecksum | 2 | 2 | Questo campo è obbligatorio e la sezione 7.5.3 definisce il contenuto. |
GeneralPrimaryFlags | 4 | 2 | Questo campo è obbligatorio e la sezione 7.5.4 definisce il contenuto. |
VolumeGuid | 6 | 16 | Questo campo è obbligatorio e la sezione 7.5.5 definisce il contenuto. |
Riservato | 22 | 10 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
Campo EntryType 7.5.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1).
Campo TypeCode 7.5.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.1).
Per la voce directory GUID del volume, il valore valido per questo campo è 0.
Campo TypeImportance 7.5.1.2
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.2).
Per la voce directory GUID del volume, il valore valido per questo campo è 1.
Campo TypeCategory 7.5.1.3
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.3).
Campo InUse 7.5.1.4
Il campo InUse deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.1.4).
7.5.2 Campo secondarioCount
Il campo SecondaryCount deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.2).
Per la voce directory GUID del volume, il valore valido per questo campo è 0.
Campo SetChecksum 7.5.3
Il campo SetChecksum è conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.3).
7.5.4 GeneralePrimaryFlags Field
Il campo GeneralPrimaryFlags è conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.4) e definisce il contenuto del campo CustomDefined da riservare.
7.5.4.1 Campo AllocazionePossible
Il campo AllocationPossible deve essere conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.4.1).
Per la voce directory GUID del volume, il valore valido per questo campo è 0.
Campo NoFatChain 7.5.4.2
Il campo NoFatChain è conforme alla definizione fornita nel modello Generic Primary DirectoryEntry (vedere la sezione 6.3.4.2).
Campo VolumeGuid 7.5.5
Il campo VolumeGuid contiene un GUID che identifica in modo univoco il volume specificato.
Tutti i valori possibili per questo campo sono validi, ad eccezione del GUID Null, ovvero {00000000-0000-0000-0000-000000000000}.
7.6 Voce della directory dell'estensione di flusso
La voce della directory estensione di flusso è una voce di directory secondaria critica nei set di voci di directory file (vedere Tabella 33). Il numero valido di voci della directory dell'estensione di flusso in un set di voci di directory file è 1. Inoltre, questa voce di directory è valida solo se segue immediatamente la voce Directory File.
Tabella 33 Estensione flusso DirectoryEntry
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 7.6.1 definisce il contenuto. |
GeneraleSecondaryFlags | 1 | 1 | Questo campo è obbligatorio e la sezione 7.6.2 definisce il contenuto. |
Reserved1 | 2 | 1 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
NameLength | 3 | 1 | Questo campo è obbligatorio e la sezione 7.6.3 definisce il contenuto. |
NameHash | 4 | 2 | Questo campo è obbligatorio e la sezione 7.6.4 definisce il contenuto. |
Reserved2 | 6 | 2 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
ValidDataLength | 8 | 8 | Questo campo è obbligatorio e la sezione 7.6.5 definisce il contenuto. |
Riservato3 | 16 | 4 | Questo campo è obbligatorio e il relativo contenuto è riservato. |
FirstCluster | 20 | 4 | Questo campo è obbligatorio e la sezione 7.6.6 definisce il contenuto. |
Lunghezza dati | 24 | 8 | Questo campo è obbligatorio e la sezione 7.6.7 definisce il contenuto. |
Campo EntryType 7.6.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1).
Campo TypeCode 7.6.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.1).
Per la voce della directory estensione di flusso, il valore valido per questo campo è 0.
Campo TypeImportance 7.6.1.2
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.2).
Per la voce della directory estensione di flusso, il valore valido per questo campo è 0.
Campo TypeCategory 7.6.1.3
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.3).
Campo InUse 7.6.1.4
Il campo InUse deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.4).
7.6.2 Campo GeneraleSecondaryFlags
Il campo GeneralSecondaryFlags è conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2) e definisce il contenuto del campo CustomDefined da riservare.
7.6.2.1 Campo allocazionePossible
Il campo AllocationPossible deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2.1).
Per la voce della directory estensione di flusso, il valore valido per questo campo è 1.
Campo NoFatChain 7.6.2.2
Il campo NoFatChain è conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2.2).
7.6.3 NomeLength Campo
Il campo NameLength contiene la lunghezza della stringa Unicode le voci successive della directory Nome file (vedere la sezione 7.7) contengono collettivamente.
L'intervallo di valori valido per questo campo deve essere:
Almeno 1, ovvero il nome di file più breve possibile
Al massimo 255, che è il nome di file più lungo possibile
Il valore del campo NameLength influisce anche sulle voci della directory nome file (vedere la sezione 7.7).
Campo NameHash 7.6.4
Il campo NameHash contiene un hash a 2 byte (vedere la figura 4) del nome del file con maiuscole e minuscole. Ciò consente alle implementazioni di eseguire un confronto rapido durante la ricerca di un file in base al nome. Importantemente, NameHash fornisce una verifica sicura di una mancata corrispondenza. Le implementazioni verificheranno tutte le corrispondenze di NameHash con un confronto tra il nome del file con maiuscole e minuscole.
Figura 4 Calcolo NameHash
UInt16 NameHash
(
WCHAR * FileName, // points to an in-memory copy of the up-cased file name
UCHAR NameLength
)
{
UCHAR * Buffer = (UCHAR *)FileName;
UInt16 NumberOfBytes = (UInt16)NameLength * 2;
UInt16 Hash = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
Hash = ((Hash&1) ? 0x8000 : 0) + (Hash>>1) + (UInt16)Buffer[Index];
}
return Hash;
}
7.6.5 Campo ValidDataLength
Il campo ValidDataLength descrive quanto tempo è stato scritto nei dati utente del flusso di dati. Le implementazioni aggiornano questo campo quando scrivono ulteriormente i dati nel flusso di dati. Nel supporto di archiviazione i dati tra la lunghezza dei dati valida e la lunghezza dei dati del flusso di dati non sono definiti. Le implementazioni restituiscono zero per le operazioni di lettura oltre la lunghezza dei dati valida.
Se la voce Directory file corrispondente descrive una directory, l'unico valore valido per questo campo è uguale al valore del campo DataLength. In caso contrario, l'intervallo di valori validi per questo campo deve essere:
Almeno 0, il che significa che non sono stati scritti dati utente nel flusso di dati
Al massimo DataLength, il che significa che i dati utente sono stati scritti nell'intera lunghezza del flusso di dati
Campo FirstCluster 7.6.6
Il campo FirstCluster deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.3).
Questo campo contiene l'indice del primo cluster del flusso di dati, che ospita i dati utente.
Campo DataLength 7.6.7
Il campo DataLength deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.4).
Se la voce directory file corrispondente descrive una directory, il valore valido per questo campo è l'intera dimensione dell'allocazione associata, in byte, che può essere 0. Inoltre, per le directory, il valore massimo per questo campo è 256 MB.
7.7 Voce directory nome file
Le voci della directory nome file sono voci di directory secondarie critiche nei set di voci di directory file (vedere Tabella 34). Il numero valido di voci della directory Nome file in un set di voci di directory file è NameLength/15, arrotondato fino all'intero più vicino. Inoltre, le voci della directory Nome file sono valide solo se seguono immediatamente la voce della directory estensione di flusso come serie consecutiva. Le voci della directory Nome file si combinano per formare il nome del file per il set di voci di directory file.
Tutti gli elementi figlio di una determinata voce di directory devono avere set di voci di directory file univoci. Ciò significa che non è possibile che non siano presenti nomi di file o directory duplicati dopo l'up-casing all'interno di una directory.
Tabella 34 File Name DirectoryEntry
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 7.7.1 definisce il contenuto. |
GeneraleSecondaryFlags | 1 | 1 | Questo campo è obbligatorio e la sezione 7.7.2 definisce il contenuto. |
FileName | 2 | 30 | Questo campo è obbligatorio e la sezione 7.7.3 definisce il contenuto. |
Campo EntryType 7.7.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1).
Campo TypeCode 7.7.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.1).
Per la voce directory Nome file, il valore valido per questo campo è 1.
Campo TypeImportance 7.7.1.2
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.2).
Per la voce directory Nome file, il valore valido per questo campo è 0.
Campo TypeCategory 7.7.1.3
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.3).
Campo InUse 7.7.1.4
Il campo InUse deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.4).
7.7.2 Campo GeneraleSecondaryFlags
Il campo GeneralSecondaryFlags è conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2) e definisce il contenuto del campo CustomDefined da riservare.
7.7.2.1 Campo allocazionePossible
Il campo AllocationPossible deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2.1).
Per la voce della directory estensione di flusso, il valore valido per questo campo è 0.
Campo NoFatChain 7.7.2.2
Il campo NoFatChain è conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2.2).
Campo Nome file 7.7.3
Il campo FileName contiene una stringa Unicode, ovvero una parte del nome file. Nelle voci della directory nome file dell'ordine esistono in un set di voci di directory file, i campi FileName concatenano per formare il nome del file per il set di voci di directory file. Dato la lunghezza del campo FileName, 15 caratteri e il numero massimo di voci della directory Nome file, 17, la lunghezza massima del nome file finale concatenato è 255.
Il nome del file concatenato ha lo stesso set di caratteri illegali di altri file system basati su FAT (vedere Tabella 35). Le implementazioni devono impostare i caratteri inutilizzati dei campi FileName sul valore 0000h.
Tabella 35 caratteri FileName non validi
Codice carattere | Descrizione | Codice carattere | Descrizione | Codice carattere | Descrizione |
---|---|---|---|---|---|
0000h | Codice di controllo | 0001h | Codice di controllo | 0002h | Codice di controllo |
0003h | Codice di controllo | 0004h | Codice di controllo | 0005h | Codice di controllo |
0006h | Codice di controllo | 0007h | Codice di controllo | 0008h | Codice di controllo |
0009h | Codice di controllo | 000Ah | Codice di controllo | 000Bh | Codice di controllo |
000Ch | Codice di controllo | 000Dh | Codice di controllo | 000Eh | Codice di controllo |
000Fh | Codice di controllo | 0010h | Codice di controllo | 0011h | Codice di controllo |
0012h | Codice di controllo | 0013h | Codice di controllo | 0014h | Codice di controllo |
0015h | Codice di controllo | 0016h | Codice di controllo | 0017h | Codice di controllo |
0018h | Codice di controllo | 0019h | Codice di controllo | 001Ah | Codice di controllo |
001Bh | Codice di controllo | 001Ch | Codice di controllo | 001Dh | Codice di controllo |
001Eh | Codice di controllo | 001Fh | Codice di controllo | 0022h | Virgoletta |
002Ah | Asterisco | 002Fh | Barra | 003Ah | Due punti |
003Ch | Segno di minore a | 003Eh | Segno di maggiore di | 003Fh | Punto interrogativo |
005Ch | Barra rovesciata | 007Ch | Barra verticale |
I nomi di file "." e ".." hanno rispettivamente il significato speciale di "questa directory" e "directory contenitore". Le implementazioni non registrano nessuno di questi nomi di file riservati nel campo FileName. Tuttavia, le implementazioni possono generare questi due nomi di file negli elenchi di directory per fare riferimento alla directory elencata e alla directory contenitore.
Le implementazioni potrebbero voler limitare i nomi di file e directory solo al set di caratteri ASCII. In tal caso, è consigliabile limitare l'uso del carattere all'intervallo di caratteri validi nelle prime 128 voci Unicode. Devono comunque archiviare i nomi di file e directory in Unicode nel volume e convertirlo in/da ASCII/Unicode durante l'interfaccia con l'utente.
7.8 Voce della directory dell'estensione del fornitore
La voce della directory Vendor Extension (Estensione fornitore) è una voce di directory secondaria non dannosa nei set di voci di directory file (vedere la tabella 36). Un set di voci di directory file può contenere un numero qualsiasi di voci di directory dell'estensione fornitore, fino al limite di voci di directory secondarie, meno il numero di altre voci di directory secondarie. Inoltre, le voci della directory Dell'estensione fornitore sono valide solo se non precedono le voci di directory dell'estensione di flusso e del nome file richieste.
Le voci della directory Vendor Extension consentono ai fornitori di avere voci di directory univoche specifiche del fornitore nei singoli set di voci di directory file tramite il campo VendorGuid (vedere la tabella 36). Le voci di directory univoche consentono ai fornitori di estendere il file system exFAT. I fornitori possono definire il contenuto del campo VendorDefined (vedere la tabella 36). Le implementazioni del fornitore possono mantenere il contenuto del campo VendorDefined e possono fornire funzionalità specifiche del fornitore.
Le implementazioni che non riconoscono il GUID di una voce di directory dell'estensione fornitore considerano la voce della directory come qualsiasi altra voce di directory secondaria non riconosciuta non riconosciuta (vedere la sezione 8.2).
Tabella 36 Directory dell'estensione fornitoreEntry
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 7.8.1 ne definisce il contenuto. |
GeneralSecondaryFlags | 1 | 1 | Questo campo è obbligatorio e la sezione 7.8.2 ne definisce il contenuto. |
VendorGuid | 2 | 16 | Questo campo è obbligatorio e la sezione 7.8.3 ne definisce il contenuto. |
VendorDefined | 18 | 14 | Questo campo è obbligatorio e i fornitori possono definirne il contenuto. |
Campo EntryType 7.8.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello DirectoryEntry secondaria generica (vedere la sezione 6.4.1).
Campo TypeCode 7.8.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.1).
Per la voce della directory Vendor Extension (Estensione fornitore), il valore valido per questo campo è 0.
Campo 7.8.1.2 TypeImportance
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.2).
Per la voce della directory Vendor Extension (Estensione fornitore), il valore valido per questo campo è 1.
7.8.1.3 Campo TypeCategory
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello DirectoryEntry secondaria generica (vedere la sezione 6.4.1.3).
7.8.1.4 Campo Uso
Il campo InUse deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.4).
7.8.2 Campo GeneraleSecondaryFlags
Il campo GeneralSecondaryFlags deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2) e definisce il contenuto del campo CustomDefined da riservare.
Campo AllocationPossible 7.8.2.1
Il campo AllocationPossible deve essere conforme alla definizione fornita nel modello DirectoryEntry secondaria generica (vedere la sezione 6.4.2.1).
Per la voce della directory Vendor Extension (Estensione fornitore), il valore valido per questo campo è 0.
Campo NoFatChain 7.8.2.2
Il campo NoFatChain deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2.2).
7.8.3 Campo VendorGuid
Il campo VendorGuid deve contenere un GUID che identifica in modo univoco l'estensione fornitore specificata.
Tutti i valori possibili per questo campo sono validi, ad eccezione del GUID Null, ovvero {00000000-0000-0000-0000-000000000000}. Tuttavia, i fornitori devono usare uno strumento di generazione GUID, ad esempio GuidGen.exe, per selezionare un GUID durante la definizione delle estensioni.
Il valore di questo campo determina la struttura specifica del fornitore del campo VendorDefined.
7.9 Voce directory allocazione fornitore
La voce della directory Allocazione fornitore è una voce di directory secondaria non dannosa nei set di voci di directory file (vedere la tabella 37). Un set di voci di directory file può contenere un numero qualsiasi di voci di directory di allocazione fornitore, fino al limite di voci di directory secondarie, meno il numero di altre voci di directory secondarie. Inoltre, le voci della directory di allocazione fornitore sono valide solo se non precedono le voci di directory dell'estensione di flusso e del nome file richieste.
Le voci della directory allocazione fornitore consentono ai fornitori di avere voci di directory specifiche del fornitore in singoli set di voci di directory file tramite il campo VendorGuid (vedere la tabella 37). Le voci di directory univoche consentono ai fornitori di estendere il file system exFAT. I fornitori possono definire il contenuto dei cluster associati, se presenti. Le implementazioni del fornitore possono mantenere il contenuto dei cluster associati, se presenti, e possono fornire funzionalità specifiche del fornitore.
Le implementazioni che non riconoscono il GUID di una voce di directory di allocazione fornitore trattano la voce della directory come qualsiasi altra voce di directory secondaria non riconosciuta non riconosciuta (vedere la sezione 8.2).
Tabella 37 Directory allocazione fornitoreEntry
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Entrytype | 0 | 1 | Questo campo è obbligatorio e la sezione 7.9.1 ne definisce il contenuto. |
GeneralSecondaryFlags | 1 | 1 | Questo campo è obbligatorio e la sezione 7.9.2 ne definisce il contenuto. |
VendorGuid | 2 | 16 | Questo campo è obbligatorio e la sezione 7.9.3 ne definisce il contenuto. |
VendorDefined | 18 | 2 | Questo campo è obbligatorio e i fornitori possono definire il relativo contenuto. |
FirstCluster | 20 | 4 | Questo campo è obbligatorio e la sezione 7.9.4 definisce il contenuto. |
Lunghezza dati | 24 | 8 | Questo campo è obbligatorio e la sezione 7.9.5 definisce il contenuto. |
Campo EntryType 7.9.1
Il campo EntryType deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1).
Campo TypeCode 7.9.1.1
Il campo TypeCode deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.1).
Per la voce Directory Allocazione fornitore, il valore valido per questo campo è 1.
Campo TypeImportance 7.9.1.2
Il campo TypeImportance deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.2).
Per la voce Directory Allocazione fornitore, il valore valido per questo campo è 1.
Campo TypeCategory 7.9.1.3
Il campo TypeCategory deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.3).
Campo InUse 7.9.1.4
Il campo InUse deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.1.4).
7.9.2 Campo GeneraleSecondaryFlags
Il campo GeneralSecondaryFlags è conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2) e definisce il contenuto del campo CustomDefined da riservare.
7.9.2.1 Campo allocazionePossible
Il campo AllocationPossible deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2.1).
Per la voce Directory Allocazione fornitore, il valore valido per questo campo è 1.
Campo NoFatChain 7.9.2.2
Il campo NoFatChain è conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.2.2).
7.9.3 Campo VendorGuid
Il campo VendorGuid contiene un GUID che identifica in modo univoco l'allocazione del fornitore specificata.
Tutti i valori possibili per questo campo sono validi, ad eccezione del GUID Null, ovvero {00000000-0000-0000-0000-000000000000}. Tuttavia, i fornitori devono usare uno strumento di generazione GUID, ad esempio GuidGen.exe, per selezionare un GUID durante la definizione delle estensioni.
Il valore di questo campo determina la struttura specifica del fornitore del contenuto dei cluster associati, se presente.
7.9.4 Campo FirstCluster
Il campo FirstCluster deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.3).
Campo DataLength 7.9.5
Il campo DataLength deve essere conforme alla definizione fornita nel modello Generic Secondary DirectoryEntry (vedere la sezione 6.4.4).
7.10 Voce della directory di riempimento TexFAT
Questa specifica, exFAT Revision 1.00 File System Basic Specification, non definisce la voce della directory TexFAT Padding. Tuttavia, il codice di tipo è 1 e l'importanza del tipo è 1. Le implementazioni di questa specifica trattano le voci della directory TexFAT Padding uguali a qualsiasi altra voce di directory primaria non riconosciuta, le implementazioni non verranno spostate nelle voci della directory di riempimento TexFAT.
8 Note sull'implementazione
8.1 Ordinamento di scrittura consigliato
Le implementazioni devono assicurarsi che il volume sia il più resiliente possibile per l'alimentazione degli errori e altri errori inevitabili. Quando si creano nuove voci di directory o si modificano le allocazioni del cluster, le implementazioni devono in genere seguire questo ordine di scrittura:
Impostare il valore del campo VolumeDirty su 1
Aggiornare il FAT attivo, se necessario
Aggiornare la bitmap di allocazione attiva
Creare o aggiornare la voce della directory, se necessario
Cancellare il valore del campo VolumeDirty su 0, se il valore precedente al primo passaggio era 0
Quando si eliminano le voci della directory o liberando le allocazioni del cluster, le implementazioni devono seguire questo ordine di scrittura:
Impostare il valore del campo VolumeDirty su 1
Eliminare o aggiornare la voce della directory, se necessario
Aggiornare il FAT attivo, se necessario
Aggiornare la bitmap di allocazione attiva
Cancellare il valore del campo VolumeDirty su 0, se il valore precedente al primo passaggio era 0
8.2 Implicazioni delle voci directory non riconosciute
Le specifiche exFAT future dello stesso numero di revisione principale, 1 e minore numero di revisione superiore a 0 possono definire nuove voci di directory primaria, secondaria critica e secondaria benigne. Solo le specifiche exFAT di un numero di revisione principale superiore possono definire nuove voci di directory primaria critiche. Le implementazioni di questa specifica, exFAT Revision 1.00 File System Basic Specification, devono essere in grado di montare e accedere a qualsiasi volume exFAT del numero di revisione principale 1 e qualsiasi numero di revisione secondario. Questo presenta scenari in cui un'implementazione può riscontrare voci di directory che non riconosce. Di seguito vengono descritte le implicazioni di questi scenari:
La presenza di voci di directory primarie critiche non riconosciute nella directory radice esegue il rendering del volume non valido. La presenza di qualsiasi voce di directory primaria critica, ad eccezione delle voci della directory file, in qualsiasi directory non radice, esegue il rendering della directory di hosting non valida.
Le implementazioni non modificano le voci di directory primaria non riconosciute o le relative allocazioni di cluster associate. Tuttavia, quando si elimina una directory e solo quando si elimina una directory, le implementazioni eliminano le voci di directory primarie non riconosciute e liberano tutte le allocazioni di cluster associate, se presenti.
Le implementazioni non modificano le voci di directory secondarie critiche non riconosciute o le relative allocazioni di cluster associate. La presenza di una o più voci di directory secondarie critiche non riconosciute in un set di voci di voce della directory esegue il rendering dell'intero set di voci di directory non riconosciuto. Quando si elimina un set di voci di directory che contiene una o più voci di directory secondarie critiche, le implementazioni liberano tutte le allocazioni del cluster, se presenti, associate alle voci di directory secondarie critiche non riconosciute. Inoltre, se il set di voci della directory descrive una directory, le implementazioni possono:
Passare alla directory
Enumerare le voci della directory che contiene
Eliminare le voci della directory contenute
Spostare le voci della directory contenute in una directory diversa
Tuttavia, le implementazioni non devono:
Modificare le voci della directory contenute, ad eccezione dell'eliminazione, come indicato
Creare nuove voci di directory contenute
Aprire le voci della directory contenute, ad eccezione dell'attraversamento e dell'enumerazione, come indicato
Le implementazioni non devono modificare le voci di directory secondarie non riconosciute o le relative allocazioni di cluster associate. Le implementazioni devono ignorare le voci di directory secondarie secondarie non riconosciute. Quando si elimina un set di voci di directory, le implementazioni liberano tutte le allocazioni del cluster, se presenti, associate alle voci di directory secondarie non riconosciute.
9 Limiti del file system
9.1 Limiti delle dimensioni del settore
Il campo BytesPerSectorShift definisce i limiti di dimensioni inferiori e superiori del settore (che valutano un limite inferiore: 512 byte; limite superiore: 4.096 byte).
9.2 Limiti delle dimensioni del cluster
Il campo SectorPerClusterShift definisce i limiti di dimensioni del cluster inferiori e superiori (limite inferiore: 1 settore; limite superiore: 25 -- BytesPerSectorShift, che restituisce 32 MB).
9.3 Limiti delle dimensioni dell'heap del cluster
L'heap del cluster contiene almeno spazio sufficiente per ospitare le strutture di file system di base seguenti: la directory radice, tutte le bitmap di allocazione e la tabella up-case.
Il limite di dimensioni di Heap cluster inferiore è una funzione del limite di dimensioni inferiori di ognuna delle strutture di file system di base che risiedono nell'heap del cluster. Anche dato il cluster più piccolo possibile (512 byte), ognuna delle strutture di file system di base non deve più di un cluster. Pertanto, il limite inferiore è: 2 + NumberOfFats cluster, che restituisce 3 o 4 cluster, a seconda del valore del campo NumberOfFats.
Il limite superiore delle dimensioni di Heap cluster è una semplice funzione del numero massimo possibile di cluster, che il campo ClusterCount definisce (limite superiore: 232- 11 cluster). Indipendentemente dalle dimensioni del cluster, tale heap del cluster dispone di spazio sufficiente per ospitare almeno le strutture di file system di base.
9.4 Limiti delle dimensioni del volume
Il campo VolumeLength definisce i limiti di dimensioni del volume inferiori e superiori (limite inferiore: 2 20/2BytesPerSectorShiftsettori, che valuta 1 MB; limite superiore: 264- 1 settori, che, dato il più grande possibile dimensione del settore, valuta circa 64ZB. Tuttavia, questa specifica consiglia di non più di2 24-2 cluster nell'heap cluster (vedere la sezione 3.1.9). Pertanto, il limite superiore consigliato di un volume è: ClusterHeapOffset + (2 24- 2) * 2SettoriPerClusterShift. Data la dimensione massima possibile del cluster, 32 MB e presupponendo che ClusterHeapOffset sia di 96 MB (spazio sufficiente per le aree di avvio principale e backup e solo il Primo FAT), il limite massimo consigliato di un volume restituisce circa 512 TB.
9.5 Limiti delle dimensioni della directory
Il campo DataLength della voce della directory Dell'estensione di flusso definisce i limiti di dimensioni della directory inferiori e superiori (limite inferiore: 0 byte; limite superiore: 256 MB). Ciò significa che una directory può ospitare fino a 8.388.608 voci di directory (ogni voce di directory utilizza 32 byte). Dato il set di voci di directory file più piccolo possibile, tre voci di directory, una directory può ospitare fino a 2.796.202 file.
10 Appendice
10.1 Identificatori univoci globali (GUID)
Un GUID è l'implementazione Microsoft di un identificatore univoco universale. Un GUID è un valore a 128 bit costituito da un gruppo di 8 cifre esadecimali, seguito da tre gruppi di 4 cifre esadecimali ciascuno e seguito da un gruppo di 12 cifre esadecimali, ad esempio {6B29FC40-CA47-1067-B31D-00DD010662DA}, (vedere la tabella 38).
Tabella 38 Struttura GUID
Nome campo | Offset (byte) |
Dimensione (byte) |
Commenti |
---|---|---|---|
Data1 | 0 | 4 | Questo campo è obbligatorio e contiene i quattro byte del primo gruppo del GUID (6B29FC40h dall'esempio). |
Data2 | 4 | 2 | Questo campo è obbligatorio e contiene i due byte del secondo gruppo del GUID (CA47h dall'esempio). |
Data3 | 6 | 2 | Questo campo è obbligatorio e contiene i due byte del terzo gruppo del GUID (1067h dall'esempio). |
Data4[0] | 8 | 1 | Questo campo è obbligatorio e contiene il byte più significativo del quarto gruppo del GUID (B3h dall'esempio). |
Data4[1] | 9 | 1 | Questo campo è obbligatorio e contiene il byte meno significativo del quarto gruppo del GUID (1Dh dall'esempio). |
Data4[2] | 10 | 1 | Questo campo è obbligatorio e contiene il primo byte del quinto gruppo del GUID (00h dall'esempio). |
Data4[3] | 11 | 1 | Questo campo è obbligatorio e contiene il secondo byte del quinto gruppo del GUID (DDh dell'esempio). |
Data4[4] | 12 | 1 | Questo campo è obbligatorio e contiene il terzo byte del quinto gruppo del GUID (01h dall'esempio). |
Data4[5] | 13 | 1 | Questo campo è obbligatorio e contiene il quarto byte del quinto gruppo del GUID (06h dall'esempio). |
Data4[6] | 14 | 1 | Questo campo è obbligatorio e contiene il quinto byte del quinto gruppo del GUID (62h dall'esempio). |
Data4[7] | 15 | 1 | Questo campo è obbligatorio e contiene il sesto byte del quinto gruppo del GUID (DAh dell'esempio). |
10.2 Tabelle di partizione
Per garantire l'interoperabilità dei volumi exFAT in un ampio set di scenari di utilizzo, le implementazioni devono usare il tipo di partizione 07h per l'archiviazione partizionata MBR e il GUID di partizione {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} per l'archiviazione partizionata GPT.
11 Cronologia delle modifiche della documentazione
La tabella 39 descrive la cronologia delle versioni di, correzioni, aggiunte, rimozioni da e chiarimenti di questo documento.
Tabella 39 Cronologia delle modifiche della documentazione
Data | Descrizione della modifica |
---|---|
08-Gennaio 2008 | Prima versione della specifica di base, che include:
|
08-Giu-2008 | Seconda versione della specifica di base, che include le modifiche seguenti:
|
01-ottobre 2008 | Terza versione della specifica di base, che include le modifiche seguenti:
|
01-gennaio 2009 | Quarta versione della specifica di base, che include le modifiche seguenti:
|
02-Sep-2009 | Quinta versione della specifica di base, che include le modifiche seguenti:
|
24 febbraio 2010 | Sesto rilascio della specifica di base, che include le modifiche seguenti:
|
26-agosto 2019 | Settimo rilascio della specifica di base, che include le modifiche seguenti:
|