1 簡介
exFAT 文件系統是 FAT32 在 FAT 系列的文件系統中繼任者。 此規格描述 exFAT 檔案系統,並提供實作 exFAT 檔案系統所需的所有資訊。
1.1 設計目標
exFAT 檔案系統有三個中央設計目標(請參閱下方清單)。
保留 FAT 型文件系統的簡單性。
FAT 型文件系統的兩個優點是其相對簡單且易於實作。 在前任的精神下,實作者應該發現exFAT相對簡單且容易實作。
啟用非常大的檔案和存儲設備。
exFAT 檔案系統會使用 64 位來描述檔案大小,藉此啟用相依於非常大檔案的應用程式。 exFAT 文件系統也允許叢集大小達 32 MB,有效地啟用非常大型的存儲設備。
納入未來創新的擴充性。
exFAT 檔系統將擴充性併入其設計中,讓文件系統能夠跟上記憶體創新及使用量變更的步調。
1.2 特定術語
在此規格的內容中,某些詞彙(請參閱 表 1)對於 exFAT 文件系統的設計和實作具有特定意義。
表 1 定義具有非常特定意義的詞彙
字詞 | 定義 |
---|---|
將 | 此規格使用 「shall」 一詞來描述強制的行為。 |
應該 | 此規格會使用「應該」一詞來描述其強烈建議的行為,但不會強制使用。 |
五月 | 此規格會使用「可能」一詞來描述選擇性的行為。 |
命令的 | 此詞彙描述實作應修改的字段或結構,且應解譯為此規格所描述。 |
自選 | 此詞彙描述實作可能或可能不支援的欄位或結構。 如果實作支援指定的選擇性字段或結構,則應該修改 ,並將欄位或結構解譯為此規格所描述。 |
定義 | 此詞彙描述實作可能視需要修改的欄位或結構內容(亦即設定周圍的欄位或結構時清楚為零),不得解譯為保留任何特定意義。 |
保留 | 此字彙描述實作的欄位或結構內容:
|
1.3 常見縮寫全文
此規格使用個人計算機產業中常用的縮寫(請參閱 表 2)。
表 2 常見縮寫全文
縮寫 | 全文檢索 |
---|---|
ASCII | 適用於資訊交換的美國標準程序代碼 |
BIOS | 基本輸入輸出系統 |
中央處理器 | 中央處理單位 |
exFAT | 可延伸檔案配置數據表 |
脂肪 | 檔案配置數據表 |
FAT12 | 檔案配置數據表,12 位叢集索引 |
FAT16 | 檔案配置數據表,16 位叢集索引 |
FAT32 | 檔案配置數據表,32 位叢集索引 |
GPT | GUID 資料分割數據表 |
GUID | 全域唯一識別碼 (請參閱 第 10.1 節) |
INT | 中斷 |
MBR | 主要開機記錄 |
texFAT | 交易安全 exFAT |
UTC | 國際標準時間 |
1.4 預設欄位和結構限定符
此規格中的欄位和結構具有下列限定元(請參閱下方清單),除非另有說明規格。
未簽署
使用十進位表示法來描述未註明的值;此規格會使用後置修正字母 「h」 來表示十六進位數位,並以大括弧括住 GUID
格式為小到大
字串不需要 Null 終止字元
1.5 Windows CE 和 TexFAT
TexFAT 是 exFAT 的延伸模組,可在基底文件系統之上新增交易安全作語意。 Windows CE 會使用 TexFAT。 TexFAT 需要使用兩個 FAT 和配置位圖,才能在交易中使用。 它也會定義數個額外的結構,包括填補描述元和安全性描述元。
2 磁碟區結構
磁碟區是儲存和擷取用戶數據所需的所有文件系統結構和數據空間集合。 所有 exFAT 磁碟區都包含四個區域(請參閱 表 3)。
表 3 磁碟區結構
子區域名稱 | 位移 (部門) |
大小 (部門) |
批注 |
---|---|---|---|
主要開機區域 | |||
主要開機扇區 | 0 | 1 | 這個子區域是必要的,第 3.1 節 定義其內容。 |
主要擴充開機扇區 | 1 | 8 | 這個子區域是強制性的,第 3.2 節) 會定義其內容。 |
主要 OEM 參數 | 9 | 1 | 這個子區域是必要的,第 3.3 節 定義其內容。 |
主要保留 | 10 | 1 | 此子區域是必要專案,且其內容是保留的。 |
主要開機總和檢查碼 | 11 | 1 | 此子區域為必要專案,第 3.4 節 定義其內容。 |
備份開機區域 | |||
備份開機扇區 | 12 | 1 | 這個子區域是必要的,第 3.1 節 定義其內容。 |
備份擴充開機扇區 | 13 | 8 | 這個子區域是必要的,第 3.2 節 定義其內容。 |
備份 OEM 參數 | 21 | 1 | 這個子區域是必要的,第 3.3 節 定義其內容。 |
備份保留 | 22 | 1 | 此子區域是必要專案,且其內容是保留的。 |
備份開機總和檢查碼 | 23 | 1 | 此子區域為必要專案,第 3.4 節 定義其內容。 |
FAT 區域 | |||
FAT 對齊方式 | 24 | FatOffset – 24 | 這個子區域是強制性的,如果有任何內容,則為未定義。 注意:主要和備份開機扇區都包含 FatOffset 字段。 |
第一個 FAT | FatOffset | FatLength | 這個子區域是必要的,第 4.1 節 定義其內容。 注意:主要和備份開機扇區都包含 FatOffset 和 FatLength 字段。 |
第二個 FAT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | 此子區域是強制性的,第 4.1 節 定義其內容,如果有的話。 注意:主要和備份開機扇區都包含 FatOffset、FatLength 和 NumberOfFats 字段。 NumberOfFats 字段只能保留值 1 和 2。 |
數據區 | |||
叢集堆積對齊方式 | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | 這個子區域是強制性的,如果有任何內容,則為未定義。 注意:主要和備份開機扇區都包含 FatOffset、FatLength、NumberOfFats 和 ClusterHeapOffset 字段。 NumberOfFats 字段的有效值為 1 和 2。 |
叢集堆積 | ClusterHeapOffset | ClusterCount * 2SectorsPerClusterShift | 這個子區域是必要的,第 5.1 節 定義其內容。 注意:主要和備份開機扇區都包含 ClusterHeapOffset、ClusterCount 和 SectorsPerClusterShift 字段。 |
多餘的空間 | ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift) | 這個子區域是強制性的,如果有任何內容,則為未定義。 注意:主要和備份開機扇區都包含 ClusterHeapOffset、ClusterCount、SectorsPerClusterShift 和 VolumeLength 字段。 |
3 主要和備份開機區域
主要開機區域提供所有必要的開機帶狀指示、識別資訊和文件系統參數,讓實作能夠執行下列動作:
從 exFAT 磁碟區開機帶式電腦系統。
將磁碟區上的文件系統識別為 exFAT。
探索 exFAT 檔系統結構的位置。
備份開機區域是主要開機區域的備份。 當主要開機區域處於不一致狀態時,它有助於復原exFAT磁碟區。 除非在不頻繁的情況下,例如更新開機帶狀指示,否則實作不應修改備份開機區域的內容。
3.1 主要和備份開機扇區子區域
主要開機扇區包含從exFAT磁碟區進行開機綁帶的程式代碼,以及描述磁碟區結構的基本exFAT參數(請參閱 表4)。 BIOS、MBR 或其他開機帶式代理程式可能會檢查此扇區,並可能載入並執行其所包含的任何開機帶狀指示。
備份開機扇區是主要開機扇區的備份,而且具有相同的結構(請參閱 表 4)。 備份開機部門可能會協助復原作業;不過,實作會將 VolumeFlags 和 PercentInUse 欄位的內容視為過時。
在使用主要或備份開機扇區的內容之前,實作應藉由驗證各自的開機總和檢查碼來驗證其內容,並確保其所有字段都在其有效值範圍內。
雖然初始格式作業會初始化主要和備份開機扇區的內容,但實作可能會視需要更新這些扇區(而且也應該更新各自的開機總和檢查碼)。 不過,實作可能會更新 VolumeFlags 或 PercentInUse 欄位,而不更新其各自的開機總和檢查碼(總和檢查碼特別排除這兩個字段)。
表 4 主要和備份開機扇區結構
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
JumpBoot | 0 | 3 | 此欄位為必要欄位,第 3.1.1 節 定義其內容。 |
FileSystemName | 3 | 8 | 此欄位為必要欄位,第 3.1.2 節 定義其內容。 |
MustBeZero | 11 | 53 | 此欄位為必要欄位,第 3.1.3 節 定義其內容。 |
PartitionOffset | 64 | 8 | 此欄位為必要欄位,第 3.1.4 節 定義其內容。 |
VolumeLength | 72 | 8 | 此欄位為必要欄位,第 3.1.5 節 定義其內容。 |
FatOffset | 80 | 4 | 此欄位為必要欄位,第 3.1.6 節 定義其內容。 |
FatLength | 84 | 4 | 此欄位為必要欄位,第 3.1.7 節 定義其內容。 |
ClusterHeapOffset | 88 | 4 | 此欄位為必要欄位,第 3.1.8 節 定義其內容。 |
ClusterCount | 92 | 4 | 此欄位為必要欄位,第 3.1.9 節 定義其內容。 |
FirstClusterOfRootDirectory | 96 | 4 | 此欄位為必要欄位,第 3.1.10 節 定義其內容。 |
VolumeSerialNumber | 100 | 4 | 此欄位為必要欄位,第 3.1.11 節 定義其內容。 |
FileSystemRevision | 104 | 2 | 此欄位為必要欄位,區段 3.1.12 定義其內容。 |
VolumeFlags | 106 | 2 | 此欄位為必要欄位,第 3.1.13 節 定義其內容。 |
BytesPerSectorShift | 108 | 1 | 此欄位為必要欄位,第 3.1.14 節 定義其內容。 |
SectorsPerClusterShift | 109 | 1 | 此欄位為必要欄位,第 3.1.15 節 定義其內容。 |
NumberOfFats | 110 | 1 | 此欄位為必要欄位,第 3.1.16 節 定義其內容。 |
DriveSelect | 111 | 1 | 此欄位為必要欄位,第 3.1.17 節 定義其內容。 |
PercentInUse | 112 | 1 | 此欄位為必要欄位,第 3.1.18 節 定義其內容。 |
保留 | 113 | 7 | 此欄位為必要欄位,並保留其內容。 |
BootCode | 120 | 390 | 此欄位為必要欄位,第 3.1.19 節 定義其內容。 |
BootSignature | 510 | 2 | 此欄位為必要欄位,第 3.1.20 節 定義其內容。 |
ExcessSpace | 512 | 2BytesPerSectorShift – 512 | 此欄位是必要欄位,如果有任何內容,則為未定義。 注意:主要和備份開機扇區都包含 BytesPerSectorShift 字段。 |
3.1.1 JumpBoot 欄位
JumpBoot 欄位應包含個人電腦中常見的 CPU 跳躍指示,執行時,CPU 會在 BootCode 字段中執行開機綁帶指令。
此欄位的有效值為 (以低順序位元組到高階位元組的順序) EBh 76h 90h。
3.1.2 FileSystemName 字段
FileSystemName 字段應包含磁碟區上的文件系統名稱。
此欄位的有效值為 ASCII 字元 「EXFAT」,其中包含三個尾端空格符。
3.1.3 MustBeZero 字段
MustBeZero 位元段應直接與 FAT12/16/32 磁碟區上包裝 BIOS 參數區塊取用的位元組範圍相對應。
此欄位的有效值為 0,有助於防止 FAT12/16/32 實作錯誤地掛接 exFAT 磁碟區。
3.1.4 PartitionOffset 字段
PartitionOffset 字段應該描述裝載指定 exFAT 磁碟區之數據分割的媒體相對扇區位移。 此字段有助於在個人計算機上使用擴充 INT 13h 從磁碟區進行開機綁帶。
此欄位的所有可能值都是有效的;不過,值 0 表示實作應該忽略此欄位。
3.1.5 VolumeLength 字段
VolumeLength 字段應描述扇區中指定 exFAT 磁碟區的大小。
此欄位的有效值範圍應該是:
至少 220/ 2BytesPerSectorShift,這可確保最小磁碟區不小於 1MB
最多 264- 1,此字段可以描述的最大值。
不過,如果多餘的空間子區域大小為 0,則此字段的最大值為 ClusterHeapOffset + (232- 11) * 2SectorsPerClusterShift。
3.1.6 FatOffset 字段
FatOffset 字段應描述第一個 FAT 的數量相對扇區位移。 此欄位可讓實作讓第一個 FAT 符合基礎儲存媒體的特性。
此欄位的有效值範圍應該是:
至少 24 個,這佔主要開機和備份開機區域取用的扇區
最多叢集HeapOffset - (FatLength * NumberOfFats),其占叢集堆積取用的扇區
3.1.7 FatLength 欄位
FatLength 欄位應描述每個 FAT 數據表的扇區長度(磁碟區最多可包含兩個 FAT)。
此欄位的有效值範圍應該是:
至少 (ClusterCount + 2) * 22/ 2BytesPerSectorShift四捨五入為最接近的整數,以確保每個 FAT 有足夠的空間來描述叢集堆積中的所有叢集
最多 (ClusterHeapOffset - FatOffset) / NumberOfFats 四捨五入為最接近的整數,以確保叢集堆積之前有 FAT
此欄位可能包含超出其下限的值(如上所述),讓第二個 FAT,如果有的話,也會與基礎儲存媒體的特性一致。 超出 FAT 本身所需之空間的內容,如果有的話,則為未定義。
3.1.8 ClusterHeapOffset 字段
[ClusterHeapOffset] 字段應該描述叢集堆積的磁碟區相對扇區位移。 此欄位可讓實作讓叢集堆積符合基礎儲存媒體的特性。
此欄位的有效值範圍應該是:
至少 FatOffset + FatLength * NumberOfFats,以考慮上述所有區域取用的扇區
最多 232- 1 或 VolumeLength - (ClusterCount * 2SectorsPerClusterShift),無論計算少
3.1.9 ClusterCount 字段
[ClusterCount] 字段應該描述叢集堆積所包含的叢集數目。
此欄位的有效值應小於下列其中一項:
(VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShift四捨五入為最接近的整數,這正是叢集數目,該叢集可在叢集堆積開頭與磁碟區結尾之間調整
232- 11,這是 FAT 可描述的最大叢集數目
[ClusterCount] 字段的值會決定 FAT 的大小下限。 為了避免極大型的 FAT,實作可以藉由增加叢集大小來控制叢集堆積中的叢集數目(透過 SectorsPerClusterShift 字段)。 此規格建議在叢集堆積中不超過 224 個- 2 個叢集。 不過,實作應該能夠處理叢集堆積中最多 2 個32 個- 11 個叢集的磁碟區。
3.1.10 FirstClusterOfRootDirectory 字段
FirstClusterOfRootDirectory 字段應包含根目錄第一個叢集的叢集索引。 實作應該盡一切努力將根目錄的第一個叢集放在叢集的配置位圖和向上案例數據表取用之後的第一個非不良叢集中。
此欄位的有效值範圍應該是:
至少 2,叢集堆積中第一個叢集的索引
最多叢集計數 + 1,叢集堆積中最後一個叢集的索引
3.1.11 VolumeSerialNumber 字段
VolumeSerialNumber 字段應包含唯一的序號。 這可協助實作區分不同的exFAT磁碟區。 實作應該結合格式化 exFAT 磁碟區的日期和時間來產生序號。 結合日期和時間形成序號的機制是實作特定的。
此欄位的所有可能值都是有效的。
3.1.12 FileSystemRevision 字段
FileSystemRevision 字段應描述指定磁碟區上 exFAT 結構的主要和次要修訂編號。
高階位元組是主要修訂編號,而低階位元組則是次要修訂編號。 例如,如果高階位元組包含值01h,而低階位元組包含值05h,則FileSystemRevision位元段會描述修訂編號1.05。 同樣地,如果高階位元組包含0Ah值,如果低序位元組包含0Fh值,則FileSystemRevision位元段會描述修訂編號10.15。
此欄位的有效值範圍應該是:
低階位元組至少為0,高階位元組至少為1
低階位元組最多 99,高階位元組為 99
此規格描述的 exFAT 修訂編號為 1.00。 此規格的實作應該掛接任何具有主要修訂編號 1 的 exFAT 磁碟區,且不得掛接任何其他主要修訂編號的任何 exFAT 磁碟區。 實作應遵守次要修訂編號,不得執行作業或建立未在指定次要修訂編號對應規格中描述的任何文件系統結構。
3.1.13 VolumeFlags 字段
VolumeFlags 字段應包含旗標,指出 exFAT 磁碟區上各種文件系統結構的狀態(請參閱 表 5)。
實作在計算其各自的主要開機或備份開機區域總和檢查碼時,不應包含此欄位。 參考備份開機扇區時,實作會將此字段視為過時。
表格 5 VolumeFlags 字段結構
功能變數名稱 | 位移 (位) |
大小 (位) |
批注 |
---|---|---|---|
ActiveFat | 0 | 1 | 此欄位為必要欄位,第 3.1.13.1 節 定義其內容。 |
VolumeDirty | 1 | 1 | 此欄位為必要欄位,第 3.1.13.2 節 定義其內容。 |
MediaFailure | 2 | 1 | 此欄位為必要欄位,第 3.1.13.3 節 定義其內容。 |
ClearToZero | 3 | 1 | 此欄位為必要欄位,第 3.1.13.4 節 定義其內容。 |
保留 | 4 | 12 | 此欄位為必要欄位,並保留其內容。 |
3.1.13.1 ActiveFat 字段
ActiveFat 字段應描述哪些 FAT 和配置位圖為作用中 (且應使用 實作),如下所示:
0,這表示第一個 FAT 和第一個配置位圖為使用中
1,這表示第二個 FAT 和第二個配置位圖為使用中,而且只有在 NumberOfFats 字段包含值 2 時才可能
實作會將非作用中的 FAT 和配置位圖視為過時。 只有 TexFAT 感知實作才能切換使用中的 FAT 和配置位圖(請參閱 第 7.1 節)。
3.1.13.2 VolumeDirty 字段
VolumeDirty 字段應該描述磁碟區是否肮髒,如下所示:
0,這表示磁碟區可能處於一致狀態
1,這表示磁碟區可能處於不一致的狀態
實作應該會在遇到無法解析的文件系統元數據不一致時,將此字段的值設定為 1。 如果掛接磁碟區時,此欄位的值是 1,則只有解析文件系統元數據不一致之實作可能會將此欄位的值清除為 0。 這類實作只有在確保文件系統處於一致狀態之後,才會將此欄位的值清除為 0。
如果掛接磁碟區時,此位元段的值為0,則實作應該將此欄位設定為1,再更新文件系統元數據,之後將此欄位清除為0,類似於 第8.1節8.1中所述的建議寫入順序。
3.1.13.3 MediaFailure 字段
MediaFailure 字段應該描述實作是否發現媒體失敗,如下所示:
0,這表示裝載媒體未回報失敗,或 FAT 中已記錄任何已知失敗為「不良」叢集
1,這表示主控媒體回報失敗(亦即讀取或寫入作業失敗)
當下列情況時,實作應該將此字段設定為 1:
裝載媒體無法嘗試存取磁碟區中的任何區域
實作已用盡存取重試演算法,如果有的話
如果掛接磁碟區時,此字段的值是 1,實作會掃描整個磁碟區是否有媒體失敗,並將所有失敗記錄為 FAT 中的「不良」叢集(否則解決媒體失敗)可能會將此字段的值清除為 0。
3.1.13.4 ClearToZero 字段
ClearToZero 欄位在此規格中沒有意義。
此欄位的有效值為:
0,其沒有任何特定意義
1,這表示實作應該先將此字段清除為0,再修改任何文件系統結構、目錄或檔案
3.1.14 BytesPerSectorShift 字段
BytesPerSectorShift 字段應該描述以記錄2(N) 表示的每個扇區位元組,其中 N 是每個扇區的位元組數目。 例如,針對每個扇區 512 個字節,此欄位的值是 9。
此欄位的有效值範圍應該是:
至少 9 個 (扇區大小為 512 個字節),這是 exFAT 磁碟區可能最小的扇區
最多12個 (扇區大小為4096個字節),這是個人計算機中常見的CPU記憶體頁面大小
3.1.15 SectorsPerClusterShift 字段
SectorsPerClusterShift 字段應描述以記錄2(N) 表示的每個群集扇區,其中 N 是每個叢集的扇區數目。 例如,針對每個叢集 8 個扇區,此字段的值是 3。
此欄位的有效值範圍應該是:
至少 0 個(每個叢集 1 個扇區),這是最小的叢集
最多 25 - BytesPerSectorShift,其評估為 32MB 的叢集大小
3.1.16 NumberOfFats 字段
NumberOfFats 字段應該描述磁碟區所包含的 FAT 數目和配置位陣圖。
此欄位的有效值範圍應該是:
1,表示磁碟區只包含第一個 FAT 和第一個配置位圖
2,表示磁碟區包含第一個 FAT、第二個 FAT、第一個配置位圖和第二個配置位圖:此值僅適用於 TexFAT 磁碟區
3.1.17 DriveSelect 字段
DriveSelect 字段應包含延伸的 INT 13h 磁碟驅動器號碼,這可協助在個人電腦上使用延伸 INT 13h 從此磁碟區進行開機綁帶。
此欄位的所有可能值都是有效的。 先前 FAT 型文件系統中的類似字段經常包含值 80h。
3.1.18 PercentInUse 欄位
PercentInUse 字段應該描述已配置叢集堆積中的叢集百分比。
此欄位的有效值範圍應該是:
在 0 到 100 之間,這是叢集堆積中配置叢集的百分比,四捨五入為最接近的整數
完全 FFh,指出叢集堆積中已配置叢集的百分比無法使用
實作應變更此欄位的值,以反映叢集堆積中叢集配置變更,或將它變更為 FFh。
實作在計算其各自的主要開機或備份開機區域總和檢查碼時,不應包含此欄位。 參考備份開機扇區時,實作會將此字段視為過時。
3.1.19 BootCode 欄位
BootCode 欄位應包含開機帶式指示。 實作可能會將此欄位填入開機綁帶電腦系統所需的 CPU 指示。 未提供開機帶指示的實作,應將此欄位中的每一個字節初始化為 F4h(個人電腦中常見的 CPU 停止指令),做為其格式作業的一部分。
3.1.20 BootSignature 字段
BootSignature 字段應該描述指定扇區的意圖是否為開機扇區。
此欄位的有效值為 AA55h。 此欄位中的任何其他值會使其各自的開機扇區失效。 實作應該先確認此字段的內容,再依其個別開機扇區的任何其他字段而定。
3.2 主要和備份擴充開機扇區子區域
主要擴充開機扇區的每個扇區都有相同的結構:不過,每個扇區可能會有不同的靴子綁帶指示(請參閱表 6)。 開機帶式代理程式,例如主要開機扇區中的開機帶狀指示、替代 BIOS 實作或內嵌系統的韌體,可能會載入這些扇區,並執行它們所包含的指示。
備份擴充開機扇區是主要擴充開機扇區的備份,而且具有相同的結構(請參閱 表 6)。
在執行主要或備份擴充開機扇區的指示之前,實作應確認其內容,方法是確保每個扇區的 ExtendedBootSignature 字段包含其指定的值。
雖然初始格式作業會初始化主要和備份擴充開機扇區的內容,但實作可能會更新這些扇區(並視需要更新各自的開機總和檢查碼)。
表 6 擴充開機扇區結構
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | 此欄位為必要欄位,第 3.2.1 節 定義其內容。 注意:主要和備份開機扇區都包含 BytesPerSectorShift 字段。 |
ExtendedBootSignature | 2BytesPerSectorShift – 4 | 4 | 此欄位為必要欄位,區段 3.2.2 定義其內容。 注意:主要和備份開機扇區都包含 BytesPerSectorShift 字段。 |
3.2.1 ExtendedBootCode 字段
ExtendedBootCode 字段應包含啟動帶式指示。 實作可能會將此欄位填入開機綁帶電腦系統所需的 CPU 指示。 未提供開機帶式指令的實作,應將此位元段中的每一個字節初始化為 00h,做為其格式作業的一部分。
3.2.2 ExtendedBootSignature 字段
ExtendedBootSignature 字段應描述指定扇區的意圖是否為延伸開機扇區。
此欄位的有效值為 AA550000h。 此欄位中的任何其他值會使其各自的主要或備份擴充開機扇區失效。 實作應該先確認此欄位的內容,再依其個別擴充開機扇區中的其他任何欄位而定。
3.3主要和備份 OEM 參數子區域
主要 OEM 參數子區域包含十個參數結構,可能包含製造商特定資訊(請參閱表 7 )。 這十個參數結構中的每個都衍生自泛型參數範本(請參閱 第 3.3.2 節)。 製造商可以從泛型參數範本衍生自己的自定義參數結構。 此規格本身定義兩個參數結構:Null 參數(請參閱 第 3.3.3 節) 和 Flash 參數 (請參閱 第 3.3.4 節)。
備份 OEM 參數是主要 OEM 參數的備份,而且具有相同的結構(請參閱表 7 )。
在使用主要或備份 OEM 參數的內容之前,實作應藉由驗證其各自的開機總和檢查碼來驗證其內容。
製造商應該使用自己的自定義參數結構填入 Main 和 Backup OEM 參數,如果有的話,以及任何其他參數結構。 後續的格式作業應保留Main和Backup OEM 參數的內容。
實作可以視需要更新主要和備份 OEM 參數(而且也應該更新各自的開機總和檢查碼)。
表 7 OEM 參數結構
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
Parameters[0] | 0 | 48 | 此欄位為必要欄位,第 3.3.1 節 定義其內容。 |
. . . |
. . . |
. . . |
. . . |
Parameters[9] | 432 | 48 | 此欄位為必要欄位,第 3.3.1 節 定義其內容。 |
保留 | 480 | 2BytesPerSectorShift – 480 | 此欄位為必要欄位,並保留其內容。 注意:主要和備份開機扇區都包含 BytesPerSectorShift 字段。 |
3.3.1 參數[0] ...Parameters[9]
此陣列中的每個Parameters字段都包含參數結構,其衍生自泛型參數範本(請參閱 第3.3.2節)。 任何未使用的Parameters字段應描述為包含Null Parameters結構(請參閱 第3.3.3節)。
3.3.2 泛型參數範本
泛型參數範本提供參數結構的基底定義(請參閱表 8 )。 所有參數結構都衍生自此範本。 此泛型參數範本的支援是必要的。
表 8 泛型參數範本
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
ParametersGuid | 0 | 16 | 此欄位為必要欄位,區段 3.3.2.1 定義其內容。 |
CustomDefined | 16 | 32 | 此欄位是必要欄位,且衍生自此範本的結構會定義其內容。 |
3.3.2.1 ParametersGuid 字段
ParametersGuid 字段應描述 GUID,以決定指定參數結構的其餘部分的配置。
此欄位的所有可能值都是有效的;不過,製造商應該使用 GUID 產生工具,例如 GuidGen.exe,從此範本衍生自定義參數結構時選取 GUID。
3.3.3 Null 參數
Null Parameters 結構衍生自泛型參數範本(請參閱
對 Null 參數結構的支援是必要的。
表 9 Null 參數結構
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
ParametersGuid | 0 | 16 | 此欄位為必要欄位,區段 3.3.3.1 定義其內容。 |
保留 | 16 | 32 | 此欄位為必要欄位,並保留其內容。 |
3.3.3.1 ParametersGuid 字段
ParametersGuid 字段應符合泛型參數範本所提供的定義(請參閱 第 3.3.2.1 節)。
此欄位的有效值在 GUID 表示法中為 {00000000-0000-0000-0000-000000000000}。
3.3.4 Flash 參數
Flash 參數結構衍生自泛型參數範本(請參閱 第 3.3.2 節),並包含快閃媒體的參數(請參閱 表 10。 以快閃為基礎的存儲設備製造商可能會填入 [參數] 字段(最好是 Parameters[0] 字段),並具有這個參數結構。 實作可能會使用 Flash Parameters 結構中的資訊,在讀取/寫入期間優化存取作業,以及調整文件系統結構的固定格式設定。
Flash 參數結構的支持是選擇性的。
表 10 Flash 參數結構
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
ParametersGuid | 0 | 16 | 此欄位為必要欄位,區段 3.3.4.1 定義其內容。 |
EraseBlockSize | 16 | 4 | 此欄位為必要欄位,區段 3.3.4.2 定義其內容。 |
PageSize | 20 | 4 | 此欄位為必要欄位,區段 3.3.4.3 定義其內容。 |
SpareSectors | 24 | 4 | 此欄位為必要欄位,第 3.3.4.4 節 定義其內容。 |
RandomAccessTime | 28 | 4 | 此欄位為必要欄位,區段 3.3.4.5 定義其內容。 |
ProgrammingTime | 32 | 4 | 此欄位為必要欄位,區段 3.3.4.6 定義其內容。 |
ReadCycle | 36 | 4 | 此欄位為必要欄位,第 3.3.4.7 節 定義其內容。 |
WriteCycle | 40 | 4 | 此欄位為必要欄位,區段 3.3.4.8 定義其內容。 |
保留 | 44 | 4 | 此欄位為必要欄位,並保留其內容。 |
除了 ParametersGuid 欄位之外,所有 Flash Parameters 欄位的所有可能值都是有效的。 不過,值 0 表示欄位實際上毫無意義(實作應忽略指定的欄位)。
3.3.4.1 ParametersGuid 字段
ParametersGuid 字段應符合泛型參數範本中提供的定義(請參閱 第 3.3.2.1 節)。
在 GUID 表示法中,此字段的有效值為 {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}。
3.3.4.2 EraseBlockSize 字段
EraseBlockSize 字段應該描述快閃媒體清除區塊的大小,以位元組為單位。
3.3.4.3 PageSize 字段
PageSize 位元組應該以快閃媒體頁面的位元組為單位來描述大小。
3.3.4.4 備用專案欄位
備用裝置欄位應描述閃光媒體為其內部疏散作業可用的扇區數目。
3.3.4.5 RandomAccessTime 字段
RandomAccessTime 字段應以 nanoseconds 描述快閃媒體的平均隨機存取時間。
3.3.4.6 程式設計時間欄位
[程序設計時間] 字段應以 nano 秒描述快閃媒體的平均程式設計時間。
3.3.4.7 ReadCycle 字段
ReadCycle 字段應該以奈秒為單位來描述快閃媒體的平均讀取周期時間。
3.3.4.8 WriteCycle 字段
WriteCycle 字段應該以 nanoseconds 描述平均寫入周期時間。
3.4主要和備份開機總和檢查碼子區域
主要和備份開機總和檢查碼各包含其個別開機區域中所有其他子區域內容的四位元組總和檢查碼重複模式。 總和檢查碼計算不應在其各自的開機扇區中包含 VolumeFlags 和 PercentInUse 欄位(請參閱 圖 1)。 四位元組總和檢查碼的重複模式會從子區域的開頭到結尾填滿其各自的開機總和檢查碼子區域。
在主要或備份開機區域中使用任何其他子區域的內容之前,實作應藉由驗證其各自的開機總和檢查碼來驗證其內容。
雖然初始格式作業會以重複總和檢查碼模式填入Main和BackupBoot Checksum,但實作會隨著各自開機區域中其他扇區的內容變更而更新這些扇區。
圖 1 開機總和檢查碼計算
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 檔案配置數據表區域
檔案配置數據表 (FAT) 區域最多可包含兩個 FAT,一個位於第一個 FAT 子區域,另一個位於第二個 FAT 子區域中。 NumberOfFats 字段描述此區域包含多少個 FAT。 NumberOfFats 字段的有效值為 1 和 2。 因此,第一個 FAT 子區域一律包含 FAT。 如果 NumberOfFats 字段是兩個,則第二個 FAT 子區域也會包含 FAT。
VolumeFlags 字段的 ActiveFat 字段描述哪些 FAT 為作用中。 只有主要開機扇區中的 VolumeFlags 欄位是最新的。 實作應將非作用中的 FAT 視為過時。 使用非作用中的 FAT 並在 FAT 之間切換是特定的實作。
4.1 第一個和第二個 FAT 子區域
FAT 應描述叢集堆積中的叢集鏈結(請參閱 表 11)。 叢集鏈結是一系列叢集,可提供空間來記錄檔案、目錄和其他文件系統結構的內容。 FAT 會將叢集鏈結表示為叢集索引的明確連結清單。 除了前兩個專案之外,FAT 中的每個專案都代表一個叢集。
表 11 檔案配置數據表結構
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
FatEntry[0] | 0 | 4 | 此欄位為必要欄位,第 4.1.1 節 定義其內容。 |
FatEntry[1] | 4 | 4 | 此欄位為必要欄位,第 4.1.2 節 定義其內容。 |
FatEntry[2] | 8 | 4 | 此欄位為必要欄位,第 4.1.3 節 定義其內容。 |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | 此欄位為必要欄位,第 4.1.3 節 定義其內容。 ClusterCount + 1 永遠不能超過 FFFFFFF6h。 注意:主要和備份開機扇區都包含 [ClusterCount] 字段。 |
ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – (ClusterCount + 2) * 4) | 此欄位是必要欄位,如果有任何內容,則為未定義。 注意:主要和備份開機扇區都包含 ClusterCount、FatLength 和 BytesPerSectorShift 字段。 |
4.1.1 FatEntry[0] 字段
FatEntry[0] 位元元應描述第一個字節 (最低順序位元組) 中的媒體類型,並包含其餘三個字節中的 FFh。
媒體類型 (第一個字節) 應該是 F8h。
4.1.2 FatEntry[1] 字段
FatEntry[1] 字段只會因為歷史優先順序而存在,而且不會描述任何感興趣的專案。
此欄位的有效值為 FFFFFFFFh。 實作應將此字位初始化為其指定值,且不應將此字段用於任何用途。 實作不應解譯此字段,而且應該在修改周圍欄位的作業之間保留其內容。
4.1.3 FatEntry[2] ...FatEntry[ClusterCount+1] 字段
此陣列中的每個 FatEntry 字段都應該代表叢集堆積中的叢集。 FatEntry[2] 代表叢集堆積中的第一個叢集,而 FatEntry[ClusterCount+1] 代表叢集堆積中的最後一個叢集。
這些欄位的有效值範圍應該是:
介於 2 與 ClusterCount + 1 之間,這可指向指定叢集鏈結中的下一個 FatEntry;指定的 FatEntry 不得指向在指定叢集鏈結中之前的任何 FatEntry
完全 FFFFFFF7h,它會將指定的 FatEntry 對應叢集標示為「壞」
完全符合 FFFFFFFFh,它會將指定的 FatEntry 對應叢集標示為叢集鏈結的最後一個叢集;這是任何指定叢集鏈結中最後一個 FatEntry 的唯一有效值
5 數據區
數據區域包含叢集堆積,可為文件系統結構、目錄和檔案提供受控空間。
5.1 叢集堆積子區域
叢集堆積的結構非常簡單(請參閱 表 12):每個連續數列的扇區都會描述一個叢集,因為 SectorsPerClusterShift 欄位會定義。 重要的是,叢集堆積的第一個叢集有索引 2,其直接對應至 FatEntry[2] 的索引。
在 exFAT 磁碟區中,配置位圖(請參閱 第 7.1.5 節)會維護所有叢集的配置狀態記錄。 這與 exFAT 的前身(FAT12、FAT16 和 FAT32)有很大的差異,其中 FAT 會維護叢集堆積中所有叢集的配置狀態記錄。
表 12 叢集堆積結構
功能變數名稱 | 位移 (部門) |
大小 (部門) |
批注 |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2SectorsPerClusterShift | 此欄位為必要欄位,第 5.1.1 節 定義其內容。 注意:主要和備份開機扇區都包含 ClusterHeapOffset 和 SectorsPerClusterShift 字段。 |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2SectorsPerClusterShift | 2SectorsPerClusterShift | 此欄位為必要欄位,第 5.1.1 節 定義其內容。 注意:主要和備份開機扇區都包含 ClusterCount、ClusterHeapOffset 和 SectorsPerClusterShift 字段。 |
5.1.1 叢集[2] ...Cluster[ClusterCount+1] 字段
此陣列中的每個叢集欄位都是一系列的連續扇區,其大小是由 SectorsPerClusterShift 字段所定義。
6 目錄結構
exFAT 檔案系統會使用目錄樹狀目錄方法來管理存在於叢集堆積中的文件系統結構和檔案。 目錄在目錄樹狀目錄中的父系和子系之間具有一對多關聯性。
FirstClusterOfRootDirectory 字段所參考的目錄是目錄樹狀目錄的根目錄。 所有其他目錄都會以單向連結的方式從根目錄遞減。
一或多個目錄項目結合成目錄專案集,描述感興趣的專案,例如文件系統結構、子目錄或檔案。
表 13 目錄結構
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
DirectoryEntry[0] | 0 | 32 | 此欄位為必要欄位,第 6.1 節 定義其內容。 |
. . . |
. . . |
. . . |
. . . |
DirectoryEntry[N–1] | (N – 1) * 32 | 32 | 此欄位為必要欄位,第 6.1 節 定義其內容。 N,DirectoryEntry 位元段的數目,是包含指定目錄的叢集鏈結大小,除以 DirectoryEntry 位元位的大小,32 個字節。 |
6.1 DirectoryEntry[0] ...DirectoryEntry[N--1]
此陣列中的每個 DirectoryEntry 欄位都衍生自 Generic DirectoryEntry 樣本(請參閱
6.2 一般 DirectoryEntry 範本
Generic DirectoryEntry 範本提供目錄專案的基底定義(請參閱 表 14)。 所有目錄項目結構都衍生自此範本,而且只有Microsoft定義的目錄項目結構有效(exFAT 沒有製造商定義的目錄項目結構布建,但如 第 7.8 節 和 第 7.9 節中所定義除外)。 解譯 Generic DirectoryEntry 範本的能力是必要的。
表 14 一般 DirectoryEntry 範本
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,Section 6.2.1 定義其內容。 |
CustomDefined | 1 | 19 | 此欄位是必要欄位,衍生自此範本的結構可能會定義其內容。 |
FirstCluster | 20 | 4 | 此欄位為必要欄位,第 6.2.2 節 定義其內容。 |
DataLength | 24 | 8 | 此欄位為必要欄位,第 6.2.3 節 定義其內容。 |
6.2.1 EntryType 欄位
EntryType 欄位有三種使用模式,欄位的值會定義這些模式(請參閱下方清單)。
00h,這是目錄結尾標記,適用下列條件:
指定 DirectoryEntry 中的所有其他欄位實際上都會保留
指定目錄中所有後續的目錄專案也是目錄結尾標記
目錄結尾標記只有在目錄專案集外部才有效
實作可能會視需要覆寫目錄結尾標記
在 01h 和 7Fh 之間,這是未使用的目錄項目標記,且適用下列條件:
指定 DirectoryEntry 中的所有其他欄位實際上都未定義
未使用的目錄專案只有在目錄專案集之外才有效
實作可能會視需要覆寫未使用的目錄專案
這個值範圍對應至 InUse 欄位(請參閱 第 6.2.1.4 節),其中包含值 0
在 81h 和 FFh 之間,這是一般目錄專案,且適用下列條件:
EntryType 欄位的內容(請參閱 表格 15)決定 DirectoryEntry 結構其餘部分的配置
這個值範圍,而且只有這個值範圍,在目錄專案集內有效
這個值範圍會直接對應至 InUse 欄位(請參閱 第 6.2.1.4 節),其中包含值 1
若要防止修改 InUse 欄位(請參閱 第 6.2.1.4 節)錯誤地導致目錄結尾標記,值 80h 無效。
表格 15 泛型 EntryType 字段結構
功能變數名稱 | 位移 (位) |
大小 (位) |
批注 |
---|---|---|---|
TypeCode | 0 | 5 | 此欄位為必要欄位,第 6.2.1.1 節 定義其內容。 |
TypeImportance | 5 | 1 | 此欄位為必要欄位,而 Section Section 6.2.1.2 會定義其內容。 |
TypeCategory | 6 | 1 | 此欄位為必要欄位,第 6.2.1.3 節 定義其內容。 |
InUse | 7 | 1 | 此欄位為必要欄位,第 6.2.1.4 節 定義其內容。 |
6.2.1.1 TypeCode 字段
TypeCode 欄位部分描述指定目錄專案的特定類型。 此欄位加上 TypeImportance 和 TypeCategory 字段(請參閱 第 6.2.1.2 節 和 Section 6.2.1.3,分別可唯一識別指定目錄項目的類型。
除非 TypeImportance 和 TypeCategory 欄位都包含值 0,否則此字段的所有可能值為有效;在此情況下,這個欄位的值 0 無效。
6.2.1.2 TypeImportance 字段
TypeImportance 字段應該描述指定目錄專案的重要性。
此欄位的有效值為:
0,這表示指定的目錄專案很重要(請參閱分別 第 6.3.1.2.1 節 和 第 6.4.1.2.1 節 主要和關鍵次要目錄專案)
1,這表示指定的目錄專案是良性的(請參閱 第 6.3.1.2.2 節 和 第 6.4.1.2.2 節,分別 良性主要和良性次要目錄專案)
6.2.1.3 TypeCategory 字段
TypeCategory 字段應該描述指定目錄項目的類別。
此欄位的有效值為:
0,這表示指定的目錄專案是主要專案(請參閱 第 6.3 節)
6.2.1.4 InUse 欄位
InUse 欄位應該描述指定的目錄專案是否使用中。
此欄位的有效值為:
0,這表示指定的目錄專案不在使用中;這表示指定的結構實際上是未使用的目錄專案
1,這表示指定的目錄專案正在使用中;這表示指定的結構是一般目錄專案
6.2.2 FirstCluster 欄位
FirstCluster 字段應包含與指定目錄專案相關聯之叢集堆積中配置之第一個叢集的索引。
此欄位的有效值範圍應該是:
正好 0,這表示沒有任何叢集配置存在
介於 2 和 ClusterCount + 1 之間,這是有效叢集索引的範圍
如果叢集配置與衍生結構不相容,則衍生自此範本的結構可能會重新定義 FirstCluster 和 DataLength 字段。
6.2.3 DataLength 字段
DataLength 字段描述相關聯叢集配置所包含的數據大小,以位元組為單位。
此欄位的有效值範圍為:
至少 0;如果 FirstCluster 字段包含值 0,則此字段的唯一有效值為 0
最多 ClusterCount * 2SectorsPerClusterShift* 2BytesPerSectorShift
如果衍生自此範本的結構無法針對衍生結構重新定義 FirstCluster 和 DataLength 字段。
6.3 一般主要目錄Entry 範本
目錄專案集中的第一個目錄項目應該是主要目錄專案。 目錄中所有後續的目錄專案,如果有的話,都應該是次要目錄專案(請參閱 第 6.4 節)。
解譯泛型主要目錄Entry 範本的能力是必要的。
所有主要目錄項目結構都衍生自泛型主要目錄Entry 範本(請參閱 表 16),其衍生自 Generic DirectoryEntry 範本(請參閱第 6.2 節 )。
表格 16 一般主要目錄Entry 範本
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,第 6.3.1 節 定義其內容。 |
SecondaryCount | 1 | 1 | 此欄位為必要欄位,第 6.3.2 節 定義其內容。 |
SetChecksum | 2 | 2 | 此欄位為必要欄位,區段 6.3.3 定義其內容。 |
GeneralPrimaryFlags | 4 | 2 | 此欄位為必要欄位,第 6.3.4 節 定義其內容。 |
CustomDefined | 6 | 14 | 此欄位是必要欄位,且衍生自此範本的結構會定義其內容。 |
FirstCluster | 20 | 4 | 此欄位為必要欄位,第 6.3.5 節 定義其內容。 |
DataLength | 24 | 8 | 此欄位為必要欄位,第 6.3.6 節 定義其內容。 |
6.3.1 EntryType 欄位
EntryType 字段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.1 節)。
6.3.1.1 TypeCode 字段
TypeCode 字段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.1.1 節)。
6.3.1.2 TypeImportance 字段
TypeImportance 位元段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.1.2 節)。
6.3.1.2.1 重要主要目錄專案
重要主要目錄專案包含適當管理exFAT磁碟區的重要資訊。 只有根目錄包含重要的主要目錄專案(檔案目錄專案是例外狀況,請參閱 第 7.4 節)。
重要主要目錄項目的定義與主要exFAT修訂編號相互關聯。 實作應該支援所有重要的主要目錄專案,而且只記錄此規格所定義的重要主要目錄項目結構。
6.3.1.2.2 良性主要目錄專案
良性主要目錄專案包含其他資訊,可能有助於管理 exFAT 磁碟區。 任何目錄都可能包含良性的主要目錄專案。
良性主要目錄項目的定義與次要exFAT修訂編號相互關聯。 支援此規格或任何後續規格的任何良性主要目錄專案,定義是選擇性的。 無法辨識的良性主要目錄專案會將整個目錄專案集轉譯為無法辨識(超出適用目錄項目範本的定義)。
6.3.1.3 TypeCategory 字段
TypeCategory 字段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.1.3 節)。
在此範本中,此欄位的有效值為 0。
6.3.1.4 InUse 欄位
InUse 位元應符合 Generic DirectoryEntry 樣本中提供的定義(請參閱 第 6.2.1.4 節)。
6.3.2 SecondaryCount 字段
SecondaryCount 字段應該描述緊接在指定主要目錄項目之後的次要目錄項目數目。 這些次要目錄專案以及指定的主要目錄專案組成目錄專案集。
此欄位的有效值範圍應該是:
至少 0,這表示此主要目錄專案是目錄專案集中唯一的專案
最多 255 個,這表示接下來的 255 個目錄專案和這個主要目錄專案包含目錄專案集
衍生自此範本的重要主要目錄項目結構可能會重新定義 SecondaryCount 和 SetChecksum 字段。
6.3.3 SetChecksum 欄位
SetChecksum 字段應該包含指定目錄專案集中所有目錄專案的總和檢查碼。 不過,總和檢查碼會排除此字段(請參閱 圖 2)。 實作應該先確認此欄位的內容是否有效,再使用指定目錄專案集中的任何其他目錄專案。
衍生自此範本的重要主要目錄項目結構可能會重新定義 SecondaryCount 和 SetChecksum 字段。
圖 2 EntrySetChecksum 計算
UInt16 EntrySetChecksum
(
UCHAR * Entries, // points to an in-memory copy of the directory entry set
UCHAR SecondaryCount
)
{
UInt16 NumberOfBytes = ((UInt16)SecondaryCount + 1) * 32;
UInt16 Checksum = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 2) || (Index == 3))
{
continue;
}
Checksum = ((Checksum&1) ? 0x8000 : 0) + (Checksum>>1) + (UInt16)Entries[Index];
}
return Checksum;
}
6.3.4 GeneralPrimaryFlags 字段
GeneralPrimaryFlags 字段包含旗標(請參閱 表 17。
衍生自此範本的重要主要目錄項目結構可能會重新定義此欄位。
表 17 一般一般PrimaryFlags 字段結構
功能變數名稱 | 位移 (位) |
大小 (位) |
批注 |
---|---|---|---|
可能的配置 | 0 | 1 | 此欄位為必要欄位,第 6.3.4.1 節 定義其內容。 |
NoFatChain | 1 | 1 | 此欄位為必要欄位,第 6.3.4.2 節 定義其內容。 |
CustomDefined | 2 | 14 | 此欄位是必要欄位,而且衍生自此範本的結構可能會定義此欄位。 |
6.3.4.1 可能的配置欄位
[可能配置] 欄位應該描述指定的目錄專案是否可以在叢集堆積中配置。
此欄位的有效值為:
0,這表示不可能建立叢集的相關配置,而且 FirstCluster 和 DataLength 字段實際上未定義(衍生自此範本的結構可能會重新定義這些欄位)
1,這表示叢集的關聯配置是可能的,且 FirstCluster 和 DataLength 字段的定義如下
6.3.4.2 NoFatChain 字段
NoFatChain 字段應該指出作用中的 FAT 是否描述指定的配置叢集鏈結。
此欄位的有效值為:
0,這表示配置叢集鏈結的對應 FAT 專案有效,而實作應加以解譯:如果 [可能配置] 欄位包含值 0,或者如果 [可能配置] 欄位包含值 1,且 FirstCluster 字段包含值 0,則此字段的唯一有效值為 0
1,這表示相關聯的配置是一個連續的叢集系列:叢集的對應 FAT 項目無效,實作不得解譯它們:實作可能會使用下列方程式來計算相關聯配置的大小:DataLength / (2SectorsPerClusterShift* 2BytesPerSectorShift) 四捨五入為最接近的整數
如果衍生自此範本的重要主要目錄項目結構會重新定義 GeneralPrimaryFlags 字段,則任何相關聯配置叢集鏈結的對應 FAT 專案都是有效的。
6.3.5 FirstCluster 欄位
FirstCluster 字段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.2 節)。
如果 NoFatChain 位為 1,則 FirstCluster 必須指向叢集堆積中的有效叢集。
衍生自此範本的重要主要目錄項目結構可能會重新定義 FirstCluster 和 DataLength 字段。 衍生自此範本的其他結構,只有在 [可能配置] 字段包含值 0 時,才能重新定義 FirstCluster 和 DataLength 字段。
6.3.6 DataLength 字段
DataLength 字段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.3 節)。
如果 NoFatChain 位為 1,DataLength 不得為零。 如果 FirstCluster 字段為零,則 DataLength 也必須是零。
衍生自此範本的重要主要目錄項目結構可能會重新定義 FirstCluster 和 DataLength 字段。 衍生自此範本的其他結構,只有在 [可能配置] 字段包含值 0 時,才能重新定義 FirstCluster 和 DataLength 字段。
6.4 一般次要目錄Entry 範本
次要目錄專案的集中目的是提供目錄專案集的其他資訊。 解譯泛型次要目錄Entry 範本的能力是必要的。
重大和良性次要目錄項目的定義與次要exFAT修訂編號相互關聯。 支援此規格或後續規格的任何重要或良性次要目錄專案,定義是選擇性的。
所有次要目錄項目結構都衍生自泛型次要 DirectoryEntry 範本(請參閱 表 18),其衍生自 Generic DirectoryEntry 範本(請參閱 第 6.2 節)。
表 18 一般次要目錄Entry 範本
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,而 Section Section 6.4.1 會定義其內容。 |
GeneralSecondaryFlags | 1 | 1 | 此欄位為必要欄位,第 6.4.2 節 定義其內容。 |
CustomDefined | 2 | 18 | 此欄位是必要欄位,且衍生自此範本的結構會定義其內容。 |
FirstCluster | 20 | 4 | 此欄位為必要欄位,區段 6.4.3 定義其內容。 |
DataLength | 24 | 8 | 此欄位為必要欄位,第 6.4.4 節 定義其內容。 |
6.4.1 EntryType 欄位
EntryType 字段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.1 節)
6.4.1.1 TypeCode 字段
TypeCode 字段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.1.1 節)。
6.4.1.2 TypeImportance 字段
TypeImportance 位元段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.1.2 節)。
6.4.1.2.1 重要次要目錄專案
重要的次要目錄專案包含資訊,對於其包含目錄專案集的適當管理至關重要。 雖然支援任何特定的關鍵次要目錄專案是選擇性的,但無法辨識的重要目錄專案會將整個目錄專案集轉譯為無法辨識(超出適用目錄專案範本的定義)。
不過,如果目錄專案集包含至少一個實作無法辨識的重要次要目錄專案,則實作最多應該解譯目錄專案集中目錄專案的範本,而不是與目錄專案集中任何目錄專案相關聯的數據包含 (檔案目錄專案是例外狀況, 請參閱 第 7.4 節)。
6.4.1.2.2 良性次要目錄專案
良性次要目錄專案包含其他資訊,可能有助於管理其包含的目錄專案集。 支援任何特定的良性次要目錄項目是選擇性的。 無法辨識的良性次要目錄專案不會將整個目錄項目設定為無法辨識。
實作可能會忽略它無法辨識的任何良性次要專案。
6.4.1.3 TypeCategory 字段
TypeCategory 字段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.1.3 節)。
在此範本中,此欄位的有效值為 1。
6.4.1.4 inUse 欄位
InUse 位元應符合 Generic DirectoryEntry 樣本中提供的定義(請參閱 第 6.2.1.4 節)。
6.4.2 GeneralSecondaryFlags 字段
GeneralSecondaryFlags 欄位包含旗標(請參閱表 19 表 19 )。
表 19 泛型 GeneralSecondaryFlags 欄位結構
功能變數名稱 | 位移 (位) |
大小 (位) |
批注 |
---|---|---|---|
可能的配置 | 0 | 1 | 此欄位為必要欄位,第 6.4.2.1 節 定義其內容。 |
NoFatChain | 1 | 1 | 此欄位為必要欄位,第 6.4.2.2 節 定義其內容。 |
CustomDefined | 2 | 6 | 此欄位是必要欄位,而且衍生自此範本的結構可能會定義此欄位。 |
6.4.2.1 可能的配置欄位
[可能配置] 字段應具有與泛型主要目錄Entry 範本中同名字段的定義(請參閱 第 6.3.4.1 節)。
6.4.2.2 NoFatChain 字段
NoFatChain 字段應具有與泛型主要目錄Entry 範本中同名字段的定義(請參閱 第 6.3.4.2 節)。
6.4.3 FirstCluster 欄位
FirstCluster 字段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.2 節)。
如果 NoFatChain 位為 1,則 FirstCluster 必須指向叢集堆積中的有效叢集。
6.4.4 DataLength 欄位
DataLength 字段應符合 Generic DirectoryEntry 範本中提供的定義(請參閱 第 6.2.3 節)。
如果 NoFatChain 位為 1,DataLength 不得為零。 如果 FirstCluster 字段為零,則 DataLength 也必須是零。
7 目錄項目定義
exFAT 檔案系統的 1.00 版會定義下列目錄專案:
重大主要複本
設定點陣圖 (第 7.1 節)
案例表 (第 7.2 節)
標籤 (第 7.3 節第 7.3 節)
檔案 (第 7.4 節)
良性主要
磁碟區 GUID (第 7.5 節第 7.5 節)
TexFAT 填補 (第 7.10 節)
重大次要
良性次要
廠商延伸模組 (第 7.8 節第 7.8 節)
廠商配置 (第 7.9 節第 7.9 節)
7.1 設定位圖目錄專案
在 exFAT 檔案系統中,FAT 不會描述叢集的配置狀態;而是配置位圖。 配置位圖存在於叢集堆積中(請參閱 第 7.1.5 節),並在根目錄中有對應的主要目錄專案(請參閱 表 20)。
NumberOfFats 字段會決定根目錄中有效配置位圖目錄項目的數目。 如果 NumberOfFats 字段包含值 1,則配置位圖目錄專案的唯一有效數目是 1。 此外,一個配置位圖目錄專案只有在描述第一個配置位圖時才有效(請參閱 第 7.1.2.1 節)。 如果 NumberOfFats 字段包含值 2,則配置位圖目錄專案的唯一有效數目是 2。 此外,只有一個描述第一個配置位圖,而另一個則描述第二個配置位圖時,兩個配置位圖目錄專案才有效。
表 20 設定位圖目錄Entry 結構
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,第 7.1.1 節 定義其內容。 |
BitmapFlags | 1 | 1 | 此欄位為必要欄位,第 7.1.2 節 定義其內容。 |
保留 | 2 | 18 | 此欄位為必要欄位,並保留其內容。 |
FirstCluster | 20 | 4 | 此欄位為必要欄位,第 7.1.3 節 定義其內容。 |
DataLength | 24 | 8 | 此欄位為必要欄位,第 7.1.4 節 定義其內容。 |
7.1.1 EntryType 欄位
EntryType 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1 節)。
7.1.1.1 TypeCode 字段
TypeCode 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.1 節)。
對於 [配置位圖] 目錄專案,此欄位元的有效值為 1。
7.1.1.2 TypeImportance 字段
TypeImportance 位元段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.2 節)。
針對 [配置位圖目錄] 專案,此欄位元的有效值為 0。
7.1.1.3 TypeCategory 字段
TypeCategory 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.3 節)。
7.1.1.4 InUse 欄位
InUse 欄位應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.4 節)。
7.1.2 BitmapFlags 字段
BitmapFlags 字段包含旗標(請參閱表格 21 )。
表 21 BitmapFlags 字段結構
功能變數名稱 | 位移 (位) |
大小 (位) |
批注 |
---|---|---|---|
BitmapIdentifier | 0 | 1 | 此欄位為必要欄位,第 7.1.2.1 節 定義其內容。 |
保留 | 1 | 7 | 此欄位為必要欄位,並保留其內容。 |
7.1.2.1 BitmapIdentifier 字段
BitmapIdentifier 字段應該指出指定目錄專案所描述的配置位圖。 實作應搭配第一個 FAT 使用第一個配置位圖,並使用第二個配置位圖搭配第二個 FAT。 ActiveFat 字段描述哪些 FAT 和配置位圖為使用中。
此欄位的有效值為:
0,這表示指定的目錄專案描述第一個配置位圖
1,這表示指定的目錄專案描述第二個配置位圖,而且只有在 NumberOfFats 包含值 2 時才可能
7.1.3 FirstCluster 欄位
FirstCluster 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.5 節)。
此欄位包含叢集鏈結第一個叢集的索引,如 FAT 所描述,其裝載配置位陣圖。
7.1.4 DataLength 字段
DataCluster 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.6 節)。
7.1.5 配置位圖
配置位圖會記錄叢集堆積中的叢集配置狀態。 配置位圖中的每個位都會指出其對應的叢集是否可供配置。
配置位圖代表從最低到最高索引的叢集(請參閱 表 22)。 基於歷史原因,第一個叢集具有索引 2。 注意:位圖中的第一個位是第一個字節的最低順序位。
表 22 配置位圖結構
功能變數名稱 | 位移 (位) |
大小 (位) |
批注 |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | 此欄位為必要欄位,而 Section Section 7.1.5.1 會定義其內容。 |
. . . |
. . . |
. . . |
. . . |
BitmapEntry[ClusterCount+1] | ClusterCount - 1 | 1 | 此欄位為必要欄位,第 7.1.5.1 節 定義其內容。 注意:主要和備份開機扇區都包含 [ClusterCount] 字段。 |
保留 | ClusterCount | (DataLength * 8) – ClusterCount | 此欄位是必要欄位,如果有任何內容,則會保留其內容。 注意:主要和備份開機扇區都包含 [ClusterCount] 字段。 |
7.1.5.1 BitmapEntry[2] ...BitmapEntry[ClusterCount+1] 字段
此陣列中的每個 BitmapEntry 欄位都代表叢集堆積中的叢集。 BitmapEntry[2] 代表叢集堆積中的第一個叢集,而 BitmapEntry[ClusterCount+1] 代表叢集堆積中的最後一個叢集。
這些欄位的有效值為:
0,其中將對應的叢集描述為可供配置
1,其中將對應的叢集描述為無法配置(叢集配置可能已經取用對應的叢集,或作用中的 FAT 可能會將對應的叢集描述為不正確的)
7.2 案例數據表目錄專案
Up-case Table 會定義從小寫到大寫字元的轉換。 這很重要,因為使用 Unicode 字元的檔名目錄專案(請參閱第 7.7 節),而且 exFAT 檔案系統不區分大小寫且保留大小寫。 Up-case Table 存在於叢集堆積中(請參閱 第 7.2.5 節),並在根目錄中有對應的重要主要目錄專案(請參閱 表 23)。 Up-case Table 目錄專案的有效數目為 1。
由於 Up-case Table 與檔名之間的關聯性,實作不應修改 Up-case Table,但格式作業的結果除外。
數據表 23 Up-case Table DirectoryEntry 結構
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,第 7.2.1 節 定義其內容。 |
Reserved1 | 1 | 3 | 此欄位為必要欄位,並保留其內容。 |
TableChecksum | 4 | 4 | 此欄位為必要欄位,第 7.2.2 節 定義其內容。 |
Reserved2 | 8 | 12 | 此欄位為必要欄位,並保留其內容。 |
FirstCluster | 20 | 4 | 此欄位為必要欄位,第 7.2.3 節 定義其內容。 |
DataLength | 24 | 8 | 此欄位為必要欄位,第 7.2.4 節 定義其內容。 |
7.2.1 EntryType 欄位
EntryType 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1 節)。
7.2.1.1 TypeCode 字段
TypeCode 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.1 節)。
對於 Up-case Table 目錄專案,此字段的有效值為 2。
7.2.1.2 TypeImportance 字段
TypeImportance 位元段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.2 節)。
對於 Up-case Table 目錄專案,此字段的有效值為 0。
7.2.1.3 TypeCategory 字段
TypeCategory 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.3 節)。
7.2.1.4 InUse 欄位
InUse 欄位應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.4 節)。
7.2.2 TableChecksum 欄位
TableChecksum 字段包含 Up-case Table 的總和檢查碼(FirstCluster 和 DataLength 字段會描述此檢查碼)。 實作在使用 Up-case Table 之前,應該先確認此字段的內容是否有效。
圖 3 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 FirstCluster 欄位
FirstCluster 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.5 節)。
此欄位包含叢集鏈結第一個叢集的索引,如 FAT 所描述,其裝載 Up-case Table。
7.2.4 DataLength 欄位
DataCluster 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.6 節)。
7.2.5 Up-case 數據表
向上寫數據表是一系列的 Unicode 字元對應。 字元對應包含 2 位元組欄位,而上寫數據表中的欄位索引代表要向上大小寫的 Unicode 字元,以及代表上寫 Unicode 字元的 2 位元組位元段。
前 128 個 Unicode 字元具有強制對應(請參閱表 24 )。 前 128 個 Unicode 字元的任何其他字元對應表無效。
只支持強制對應範圍中字元的實作可能會忽略其餘向上大小寫數據表的對應。 這類實作只有在建立或重新命名檔案時,才應使用強制對應範圍的字元(透過檔名目錄專案,請參閱 第 7.7 節)。 將現有檔名向上套用時,這類實作不得從非強制對應範圍向上寫字元,但應讓它們維持在產生的大小寫檔名中(這是部分向上大小寫)。 比較檔名時,這類實作應將與比較中名稱不同的檔名,只將非強制對應範圍的 Unicode 字元視為相等的檔名。 雖然這類檔名可能只是相等的,但這類實作無法確保完整大小寫的檔名不會與比較下的名稱相衝突。
表 24 強制前 128 個案例數據表專案
數據表索引 | + 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 |
(注意:具有非身分識別向上案例對應的專案為粗體)
在格式化磁碟區時,實作可能會使用身分識別對應壓縮來產生壓縮格式的上寫數據表,因為大部分的 Unicode 字元空間沒有大小寫的概念(這表示「小寫」和「大寫」字元相等)。 實作會藉由以 FFFFh 值代表一系列識別對應,後面接著識別對應數目,以壓縮向上案例數據表。
例如,實作可能會代表前 100 個 (64h) 字元對應,其中包含下列八個專案的壓縮大小寫數據表:
FFFFh, 0061h, 0041h, 0042h, 0043h
前兩個專案表示前 97 個字元(從 0000h 到 0060h)具有識別對應。 後續字元 0061h 到 0063h,分別對應至字元 0041h 到 0043h。
格式化磁碟區時提供壓縮大小寫數據表的能力是選擇性的。 不過,必須解譯未壓縮和壓縮的案例數據表。 TableChecksum 字段的值一律符合磁碟區上存在的情況,該磁碟區可能採用壓縮或未壓縮的格式。
7.2.5.1 建議的 Up-case 數據表
格式化磁碟區時,實作應該以壓縮格式記錄建議的案例數據表(請參閱 表 25),其中 TableChecksum 欄位的值是 E619D30Dh。
如果實作定義自己的大小寫數據表,無論是壓縮還是未壓縮,則該數據表應涵蓋完整的 Unicode 字元範圍(從字元碼 0000h 到 FFFFh 包含)。
表格 25 建議使用壓縮格式的案例數據表
原始位移 | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
0080h | 0080h | 0081h | 0082h | 0083h | 0084h | 0085h | 0086h | 0087h |
0088h | 0088h | 0089h | 008Ah | 008Bh | 008Ch | 008Dh | 008Eh | 008Fh |
0090h | 0090h | 0091h | 0092h | 0093h | 0094h | 0095h | 0096h | 0097h |
0098h | 0098h | 0099h | 009Ah | 009Bh | 009Ch | 009Dh | 009Eh | 009Fh |
00A0h | 00A0h | 00A1h | 00A2h | 00A3h | 00A4h | 00A5h | 00A6h | 00A7h |
00A8h | 00A8h | 00A9h | 00AAh | 00ABh | 00ACh | 00ADh | 00AEh | 00AFh |
00B0h | 00B0h | 00B1h | 00B2h | 00B3h | 00B4h | 00B5h | 00B6h | 00B7h |
00B8h | 00B8h | 00B9h | 00BAh | 00BBh | 00BCh | 00BDh | 00BEh | 00BFh |
00C0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00C8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00D0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00D7h |
00D8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 00DFh |
00E0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00E8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00F0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00F7h |
00F8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 0178h |
0100h | 0100h | 0100h | 0102h | 0102h | 0104h | 0104h | 0106h | 0106h |
0108h | 0108h | 0108h | 010Ah | 010Ah | 010Ch | 010Ch | 010Eh | 010Eh |
0110h | 0110h | 0110h | 0112h | 0112h | 0114h | 0114h | 0116h | 0116h |
0118h | 0118h | 0118h | 011Ah | 011Ah | 011Ch | 011Ch | 011Eh | 011Eh |
0120h | 0120h | 0120h | 0122h | 0122h | 0124h | 0124h | 0126h | 0126h |
0128h | 0128h | 0128h | 012Ah | 012Ah | 012Ch | 012Ch | 012Eh | 012Eh |
0130h | 0130h | 0131h | 0132h | 0132h | 0134h | 0134h | 0136h | 0136h |
0138h | 0138h | 0139h | 0139h | 013Bh | 013Bh | 013Dh | 013Dh | 013Fh |
0140h | 013Fh | 0141h | 0141h | 0143h | 0143h | 0145h | 0145h | 0147h |
0148h | 0147h | 0149h | 014Ah | 014Ah | 014Ch | 014Ch | 014Eh | 014Eh |
0150h | 0150h | 0150h | 0152h | 0152h | 0154h | 0154h | 0156h | 0156h |
0158h | 0158h | 0158h | 015Ah | 015Ah | 015Ch | 015Ch | 015Eh | 015Eh |
0160h | 0160h | 0160h | 0162h | 0162h | 0164h | 0164h | 0166h | 0166h |
0168h | 0168h | 0168h | 016Ah | 016Ah | 016Ch | 016Ch | 016Eh | 016Eh |
0170h | 0170h | 0170h | 0172h | 0172h | 0174h | 0174h | 0176h | 0176h |
0178h | 0178h | 0179h | 0179h | 017Bh | 017Bh | 017Dh | 017Dh | 017Fh |
0180h | 0243h | 0181h | 0182h | 0182h | 0184h | 0184h | 0186h | 0187h |
0188h | 0187h | 0189h | 018Ah | 018Bh | 018Bh | 018Dh | 018Eh | 018Fh |
0190h | 0190h | 0191h | 0191h | 0193h | 0194h | 01F6h | 0196h | 0197h |
0198h | 0198h | 0198h | 023Dh | 019Bh | 019Ch | 019Dh | 0220h | 019Fh |
01A0h | 01A0h | 01A0h | 01A2h | 01A2h | 01A4h | 01A4h | 01A6h | 01A7h |
01A8h | 01A7h | 01A9h | 01AAh | 01ABh | 01ACh | 01ACh | 01AEh | 01AFh |
01B0h | 01AFh | 01B1h | 01B2h | 01B3h | 01B3h | 01B5h | 01B5h | 01B7h |
01B8h | 01B8h | 01B8h | 01BAh | 01BBh | 01BCh | 01BCh | 01BEh | 01F7h |
01C0h | 01C0h | 01C1h | 01C2h | 01C3h | 01C4h | 01C5h | 01C4h | 01C7h |
01C8h | 01C8h | 01C7h | 01CAh | 01CBh | 01CAh | 01CDh | 01CDh | 01CFh |
01D0h | 01CFh | 01D1h | 01D1h | 01D3h | 01D3h | 01D5h | 01D5h | 01D7h |
01D8h | 01D7h | 01D9h | 01D9h | 01DBh | 01DBh | 018Eh | 01DEh | 01DEh |
01E0h | 01E0h | 01E0h | 01E2h | 01E2h | 01E4h | 01E4h | 01E6h | 01E6h |
01E8h | 01E8h | 01E8h | 01EAh | 01EAh | 01ECh | 01ECh | 01EEh | 01EEh |
01F0h | 01F0h | 01F1h | 01F2h | 01F1h | 01F4h | 01F4h | 01F6h | 01F7h |
01F8h | 01F8h | 01F8h | 01FAh | 01FAh | 01FCh | 01FCh | 01FEh | 01FEh |
0200h | 0200h | 0200h | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 0214h | 0216h | 0216h |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | 0226h | 0226h |
0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
02B8h | 02B8h | 02B9h | 02BAh | 02BBh | 02BCh | 02BDh | 02BEh | 02BFh |
02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02Ffh |
0300h | 0300h | 0301h | 0302h | 0303h | 0304h | 0305h | 0306h | 0307h |
0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 0312h | 0313h | 0314h | 0315h | 0316h | 0317h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 0332h | 0333h | 0334h | 0335h | 0336h | 0337h |
0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 0346h | 0347h |
0348h | 0348h | 0349h | 034Ah | 034Bh | 034Ch | 034Dh | 034Eh | 034Fh |
0350h | 0350h | 0351h | 0352h | 0353h | 0354h | 0355h | 0356h | 0357h |
0358h | 0358h | 0359h | 035Ah | 035Bh | 035Ch | 035Dh | 035Eh | 035Fh |
0360h | 0360h | 0361h | 0362h | 0363h | 0364h | 0365h | 0366h | 0367h |
0368h | 0368h | 0369h | 036Ah | 036Bh | 036Ch | 036Dh | 036Eh | 036Fh |
0370h | 0370h | 0371h | 0372h | 0373h | 0374h | 0375h | 0376h | 0377h |
0378h | 0378h | 0379h | 037Ah | 03FDh | 03FEh | 03FFh | 037Eh | 037Fh |
0380h | 0380h | 0381h | 0382h | 0383h | 0384h | 0385h | 0386h | 0387h |
0388h | 0388h | 0389h | 038Ah | 038Bh | 038Ch | 038Dh | 038Eh | 038Fh |
0390h | 0390h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
0398h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03A0h | 03A0h | 03A1h | 03A2h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03A8h | 03A8h | 03A9h | 03AAh | 03ABh | 0386h | 0388h | 0389h | 038Ah |
03B0h | 03B0h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
03B8h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03C0h | 03A0h | 03A1h | 03A3h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03C8h | 03A8h | 03A9h | 03AAh | 03ABh | 038Ch | 038Eh | 038Fh | 03CFh |
03D0h | 03D0h | 03D1h | 03D2h | 03D3h | 03D4h | 03D5h | 03D6h | 03D7h |
03D8h | 03D8h | 03D8h | 03DAh | 03DAh | 03DCh | 03DCh | 03DEh | 03DEh |
03E0h | 03E0h | 03E0h | 03E2h | 03E2h | 03E4h | 03E4h | 03E6h | 03E6h |
03E8h | 03E8h | 03E8h | 03EAh | 03EAh | 03ECh | 03ECh | 03EEh | 03EEh |
03F0h | 03F0h | 03F1h | 03F9h | 03F3h | 03F4h | 03F5h | 03F6h | 03F7h |
03F8h | 03F7h | 03F9h | 03FAh | 03FAh | 03FCh | 03FDh | 03FEh | 03FFh |
0400h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0410h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0420h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0428h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0430h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0438h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0440h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0448h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0450h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0458h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0460h | 0460h | 0460h | 0462h | 0462h | 0464h | 0464h | 0466h | 0466h |
0468h | 0468h | 0468h | 046Ah | 046Ah | 046Ch | 046Ch | 046Eh | 046Eh |
0470h | 0470h | 0470h | 0472h | 0472h | 0474h | 0474h | 0476h | 0476h |
0478h | 0478h | 0478h | 047Ah | 047Ah | 047Ch | 047Ch | 047Eh | 047Eh |
0480h | 0480h | 0480h | 0482h | 0483h | 0484h | 0485h | 0486h | 0487h |
0488h | 0488h | 0489h | 048Ah | 048Ah | 048Ch | 048Ch | 048Eh | 048Eh |
0490h | 0490h | 0490h | 0492h | 0492h | 0494h | 0494h | 0496h | 0496h |
0498h | 0498h | 0498h | 049Ah | 049Ah | 049Ch | 049Ch | 049Eh | 049Eh |
04A0h | 04A0h | 04A0h | 04A2h | 04A2h | 04A4h | 04A4h | 04A6h | 04A6h |
04A8h | 04A8h | 04A8h | 04AAh | 04AAh | 04ACh | 04ACh | 04AEh | 04AEh |
04B0h | 04B0h | 04B0h | 04B2h | 04B2h | 04B4h | 04B4h | 04B6h | 04B6h |
04B8h | 04B8h | 04B8h | 04BAh | 04BAh | 04BCh | 04BCh | 04BEh | 04BEh |
04C0h | 04C0h | 04C1h | 04C1h | 04C3h | 04C3h | 04C5h | 04C5h | 04C7h |
04C8h | 04C7h | 04C9h | 04C9h | 04CBh | 04CBh | 04CDh | 04CDh | 04C0h |
04D0h | 04D0h | 04D0h | 04D2h | 04D2h | 04D4h | 04D4h | 04D6h | 04D6h |
04D8h | 04D8h | 04D8h | 04DAh | 04DAh | 04DCh | 04DCh | 04DEh | 04DEh |
04E0h | 04E0h | 04E0h | 04E2h | 04E2h | 04E4h | 04E4h | 04E6h | 04E6h |
04E8h | 04E8h | 04E8h | 04EAh | 04EAh | 04ECh | 04ECh | 04EEh | 04EEh |
04F0h | 04F0h | 04F0h | 04F2h | 04F2h | 04F4h | 04F4h | 04F6h | 04F6h |
04F8h | 04F8h | 04F8h | 04FAh | 04FAh | 04FCh | 04FCh | 04FEh | 04FEh |
0500h | 0500h | 0500h | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h | 0510h | 0510h | 0512h | 0512h | 0514h | 0515h | 0516h | 0517h |
0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 0521h | 0522h | 0523h | 0524h | 0525h | 0526h | 0527h |
0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
0530h | 0530h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0538h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0540h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0548h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0550h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | 0557h |
0558h | 0558h | 0559h | 055Ah | 055Bh | 055Ch | 055Dh | 055Eh | 055Fh |
0560h | 0560h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0568h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0570h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0578h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0580h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | FFFFh |
0588h | 17F6h | 2C63h | 1D7Eh | 1D7Fh | 1D80h | 1D81h | 1D82h | 1D83h |
0590h | 1D84h | 1D85h | 1D86h | 1D87h | 1D88h | 1D89h | 1D8Ah | 1D8Bh |
0598h | 1D8Ch | 1D8Dh | 1D8Eh | 1D8Fh | 1D90h | 1D91h | 1D92h | 1D93h |
05A0h | 1D94h | 1D95h | 1D96h | 1D97h | 1D98h | 1D99h | 1D9Ah | 1D9Bh |
05A8h | 1D9Ch | 1D9Dh | 1D9Eh | 1D9Fh | 1DA0h | 1DA1h | 1DA2h | 1DA3h |
05B0h | 1DA4h | 1DA5h | 1DA6h | 1DA7h | 1DA8h | 1DA9h | 1DAAh | 1DABh |
05B8h | 1DACh | 1DADh | 1DAEh | 1DAFh | 1DB0h | 1DB1h | 1DB2h | 1DB3h |
05C0h | 1DB4h | 1DB5h | 1DB6h | 1DB7h | 1DB8h | 1DB9h | 1DBAh | 1DBBh |
05C8h | 1DBCh | 1DBDh | 1DBEh | 1DBFh | 1DC0h | 1DC1h | 1DC2h | 1DC3h |
05D0h | 1DC4h | 1DC5h | 1DC6h | 1DC7h | 1DC8h | 1DC9h | 1DCAh | 1DCBh |
05D8h | 1DCCh | 1DCDh | 1DCEh | 1DCFh | 1DD0h | 1DD1h | 1DD2h | 1DD3h |
05E0h | 1DD4h | 1DD5h | 1DD6h | 1DD7h | 1DD8h | 1DD9h | 1DDAh | 1DDBh |
05E8h | 1DDCh | 1DDDh | 1DDEh | 1DDFh | 1DE0h | 1DE1h | 1DE2h | 1DE3h |
05F0h | 1DE4h | 1DE5h | 1DE6h | 1DE7h | 1DE8h | 1DE9h | 1DEAh | 1DEBh |
05F8h | 1DECh | 1DEDh | 1DEEh | 1DEFh | 1DF0h | 1DF1h | 1DF2h | 1DF3h |
0600h | 1DF4h | 1DF5h | 1DF6h | 1DF7h | 1DF8h | 1DF9h | 1DFAh | 1DFBh |
0608h | 1DFCh | 1DFDh | 1DFEh | 1DFFh | 1E00h | 1E00h | 1E02h | 1E02h |
0610h | 1E04h | 1E04h | 1E06h | 1E06h | 1E08h | 1E08h | 1E0Ah | 1E0Ah |
0618h | 1E0Ch | 1E0Ch | 1E0Eh | 1E0Eh | 1E10h | 1E10h | 1E12h | 1E12h |
0620h | 1E14h | 1E14h | 1E16h | 1E16h | 1E18h | 1E18h | 1E1Ah | 1E1Ah |
0628h | 1E1Ch | 1E1Ch | 1E1Eh | 1E1Eh | 1E20h | 1E20h | 1E22h | 1E22h |
0630h | 1E24h | 1E24h | 1E26h | 1E26h | 1E28h | 1E28h | 1E2Ah | 1E2Ah |
0638h | 1E2Ch | 1E2Ch | 1E2Eh | 1E2Eh | 1E30h | 1E30h | 1E32h | 1E32h |
0640h | 1E34h | 1E34h | 1E36h | 1E36h | 1E38h | 1E38h | 1E3Ah | 1E3Ah |
0648h | 1E3Ch | 1E3Ch | 1E3Eh | 1E3Eh | 1E40h | 1E40h | 1E42h | 1E42h |
0650h | 1E44h | 1E44h | 1E46h | 1E46h | 1E48h | 1E48h | 1E4Ah | 1E4Ah |
0658h | 1E4Ch | 1E4Ch | 1E4Eh | 1E4Eh | 1E50h | 1E50h | 1E52h | 1E52h |
0660h | 1E54h | 1E54h | 1E56h | 1E56h | 1E58h | 1E58h | 1E5Ah | 1E5Ah |
0668h | 1E5Ch | 1E5Ch | 1E5Eh | 1E5Eh | 1E60h | 1E60h | 1E62h | 1E62h |
0670h | 1E64h | 1E64h | 1E66h | 1E66h | 1E68h | 1E68h | 1E6Ah | 1E6Ah |
0678h | 1E6Ch | 1E6Ch | 1E6Eh | 1E6Eh | 1E70h | 1E70h | 1E72h | 1E72h |
0680h | 1E74h | 1E74h | 1E76h | 1E76h | 1E78h | 1E78h | 1E7Ah | 1E7Ah |
0688h | 1E7Ch | 1E7Ch | 1E7Eh | 1E7Eh | 1E80h | 1E80h | 1E82h | 1E82h |
0690h | 1E84h | 1E84h | 1E86h | 1E86h | 1E88h | 1E88h | 1E8Ah | 1E8Ah |
0698h | 1E8Ch | 1E8Ch | 1E8Eh | 1E8Eh | 1E90h | 1E90h | 1E92h | 1E92h |
06A0h | 1E94h | 1E94h | 1E96h | 1E97h | 1E98h | 1E99h | 1E9Ah | 1E9Bh |
06A8h | 1E9Ch | 1E9Dh | 1E9Eh | 1E9Fh | 1EA0h | 1EA0h | 1EA2h | 1EA2h |
06B0h | 1EA4h | 1EA4h | 1EA6h | 1EA6h | 1EA8h | 1EA8h | 1EAAh | 1EAAh |
06B8h | 1EACh | 1EACh | 1EAEh | 1EAEh | 1EB0h | 1EB0h | 1EB2h | 1EB2h |
06C0h | 1EB4h | 1EB4h | 1EB6h | 1EB6h | 1EB8h | 1EB8h | 1EBAh | 1EBAh |
06C8h | 1EBCh | 1EBCh | 1EBEh | 1EBEh | 1EC0h | 1EC0h | 1EC2h | 1EC2h |
06D0h | 1EC4h | 1EC4h | 1EC6h | 1EC6h | 1EC8h | 1EC8h | 1ECAh | 1ECAh |
06D8h | 1ECCh | 1ECCh | 1ECEh | 1ECEh | 1ED0h | 1ED0h | 1ED2h | 1ED2h |
06E0h | 1ED4h | 1ED4h | 1ED6h | 1ED6h | 1ED8h | 1ED8h | 1EDAh | 1EDAh |
06E8h | 1EDCh | 1EDCh | 1EDEh | 1EDEh | 1EE0h | 1EE0h | 1EE2h | 1EE2h |
06F0h | 1EE4h | 1EE4h | 1EE6h | 1EE6h | 1EE8h | 1EE8h | 1EEAh | 1EEAh |
06F8h | 1EECh | 1EECh | 1EEEh | 1EEEh | 1EF0h | 1EF0h | 1EF2h | 1EF2h |
0700h | 1EF4h | 1EF4h | 1EF6h | 1EF6h | 1EF8h | 1EF8h | 1EFAh | 1EFBh |
0708h | 1EFCh | 1EFDh | 1EFEh | 1EFFh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0710h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0718h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0720h | 1F1Ch | 1F1Dh | 1F16h | 1F17h | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0728h | 1F1Ch | 1F1Dh | 1F1Eh | 1F1Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0730h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0738h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0740h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0748h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0750h | 1F4Ch | 1F4Dh | 1F46h | 1F47h | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0758h | 1F4Ch | 1F4Dh | 1F4Eh | 1F4Fh | 1F50h | 1F59h | 1F52h | 1F5Bh |
0760h | 1F54h | 1F5Dh | 1F56h | 1F5Fh | 1F58h | 1F59h | 1F5Ah | 1F5Bh |
0768h | 1F5Ch | 1F5Dh | 1F5Eh | 1F5Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0770h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0778h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1FBAh | 1FBBh | 1FC8h | 1FC9h |
0780h | 1FCAh | 1FCBh | 1FDAh | 1FDBh | 1FF8h | 1FF9h | 1FEAh | 1FEBh |
0788h | 1FFAh | 1FFBh | 1F7Eh | 1F7Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0790h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0798h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A0h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A8h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B0h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B8h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FB8h | 1FB9h | 1FB2h | 1FBCh |
07C0h | 1FB4h | 1FB5h | 1FB6h | 1FB7h | 1FB8h | 1FB9h | 1FBAh | 1FBBh |
07C8h | 1FBCh | 1FBDh | 1FBEh | 1FBFh | 1FC0h | 1FC1h | 1FC2h | 1FC3h |
07D0h | 1FC4h | 1FC5h | 1FC6h | 1FC7h | 1FC8h | 1FC9h | 1FCAh | 1FCBh |
07D8h | 1FC3h | 1FCDh | 1FCEh | 1FCFh | 1FD8h | 1FD9h | 1FD2h | 1FD3h |
07E0h | 1FD4h | 1FD5h | 1FD6h | 1FD7h | 1FD8h | 1FD9h | 1FDAh | 1FDBh |
07E8h | 1FDCh | 1FDDh | 1FDEh | 1FDFh | 1FE8h | 1FE9h | 1FE2h | 1FE3h |
07F0h | 1FE4h | 1FECh | 1FE6h | 1FE7h | 1FE8h | 1FE9h | 1FEAh | 1FEBh |
07F8h | 1FECh | 1FEDh | 1FEEh | 1FEFh | 1FF0h | 1FF1h | 1FF2h | 1FF3h |
0800h | 1FF4h | 1FF5h | 1FF6h | 1FF7h | 1FF8h | 1FF9h | 1FFAh | 1FFBh |
0808h | 1FF3h | 1FFDh | 1FFEh | 1FFFh | 2000h | 2001h | 2002h | 2003h |
0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
0818h | 200Ch | 200Dh | 200Eh | 200Fh | 2010h | 2011h | 2012h | 2013h |
0820h | 2014h | 2015h | 2016h | 2017h | 2018h | 2019h | 201Ah | 201Bh |
0828h | 201Ch | 201Dh | 201Eh | 201Fh | 2020h | 2021h | 2022h | 2023h |
0830h | 2024h | 2025h | 2026h | 2027h | 2028h | 2029h | 202Ah | 202Bh |
0838h | 202Ch | 202Dh | 202Eh | 202Fh | 2030h | 2031h | 2032h | 2033h |
0840h | 2034h | 2035h | 2036h | 2037h | 2038h | 2039h | 203Ah | 203Bh |
0848h | 203Ch | 203Dh | 203Eh | 203Fh | 2040h | 2041h | 2042h | 2043h |
0850h | 2044h | 2045h | 2046h | 2047h | 2048h | 2049h | 204Ah | 204Bh |
0858h | 204Ch | 204Dh | 204Eh | 204Fh | 2050h | 2051h | 2052h | 2053h |
0860h | 2054h | 2055h | 2056h | 2057h | 2058h | 2059h | 205Ah | 205Bh |
0868h | 205Ch | 205Dh | 205Eh | 205Fh | 2060h | 2061h | 2062h | 2063h |
0870h | 2064h | 2065h | 2066h | 2067h | 2068h | 2069h | 206Ah | 206Bh |
0878h | 206Ch | 206Dh | 206Eh | 206Fh | 2070h | 2071h | 2072h | 2073h |
0880h | 2074h | 2075h | 2076h | 2077h | 2078h | 2079h | 207Ah | 207Bh |
0888h | 207Ch | 207Dh | 207Eh | 207Fh | 2080h | 2081h | 2082h | 2083h |
0890h | 2084h | 2085h | 2086h | 2087h | 2088h | 2089h | 208Ah | 208Bh |
0898h | 208Ch | 208Dh | 208Eh | 208Fh | 2090h | 2091h | 2092h | 2093h |
08A0h | 2094h | 2095h | 2096h | 2097h | 2098h | 2099h | 209Ah | 209Bh |
08A8h | 209Ch | 209Dh | 209Eh | 209Fh | 20A0h | 20A1h | 20A2h | 20A3h |
08B0h | 20A4h | 20A5h | 20A6h | 20A7h | 20A8h | 20A9h | 20AAh | 20ABh |
08B8h | 20ACh | 20ADh | 20AEh | 20AFh | 20B0h | 20B1h | 20B2h | 20B3h |
08C0h | 20B4h | 20B5h | 20B6h | 20B7h | 20B8h | 20B9h | 20BAh | 20BBh |
08C8h | 20BCh | 20BDh | 20BEh | 20BFh | 20C0h | 20C1h | 20C2h | 20C3h |
08D0h | 20C4h | 20C5h | 20C6h | 20C7h | 20C8h | 20C9h | 20CAh | 20CBh |
08D8h | 20CCh | 20CDh | 20CEh | 20CFh | 20D0h | 20D1h | 20D2h | 20D3h |
08E0h | 20D4h | 20D5h | 20D6h | 20D7h | 20D8h | 20D9h | 20DAh | 20DBh |
08E8h | 20DCh | 20DDh | 20DEh | 20DFh | 20E0h | 20E1h | 20E2h | 20E3h |
08F0h | 20E4h | 20E5h | 20E6h | 20E7h | 20E8h | 20E9h | 20EAh | 20EBh |
08F8h | 20ECh | 20EDh | 20EEh | 20EFh | 20F0h | 20F1h | 20F2h | 20F3h |
0900h | 20F4h | 20F5h | 20F6h | 20F7h | 20F8h | 20F9h | 20FAh | 20FBh |
0908h | 20FCh | 20FDh | 20FEh | 20FFh | 2100h | 2101h | 2102h | 2103h |
0910h | 2104h | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 2113h |
0920h | 2114h | 2115h | 2116h | 2117h | 2118h | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 2120h | 2121h | 2122h | 2123h |
0930h | 2124h | 2125h | 2126h | 2127h | 2128h | 2129h | 212Ah | 212Bh |
0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131h | 2132h | 2133h |
0940h | 2134h | 2135h | 2136h | 2137h | 2138h | 2139h | 213Ah | 213Bh |
0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
0950h | 2144h | 2145h | 2146h | 2147h | 2148h | 2149h | 214Ah | 214Bh |
0958h | 214Ch | 214Dh | 2132h | 214Fh | 2150h | 2151h | 2152h | 2153h |
0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
0968h | 215Ch | 215Dh | 215Eh | 215Fh | 2160h | 2161h | 2162h | 2163h |
0970h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160h | 2161h | 2162h | 2163h |
0980h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 24BBh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 0746h | 2C00h |
09B0h | 2C01h | 2C02h | 2C03h | 2C04h | 2C05h | 2C06h | 2C07h | 2C08h |
09B8h | 2C09h | 2C0Ah | 2C0Bh | 2C0Ch | 2C0Dh | 2C0Eh | 2C0Fh | 2C10h |
09C0h | 2C11h | 2C12h | 2C13h | 2C14h | 2C15h | 2C16h | 2C17h | 2C18h |
09C8h | 2C19h | 2C1Ah | 2C1Bh | 2C1Ch | 2C1Dh | 2C1Eh | 2C1Fh | 2C20h |
09D0h | 2C21h | 2C22h | 2C23h | 2C24h | 2C25h | 2C26h | 2C27h | 2C28h |
09D8h | 2C29h | 2C2Ah | 2C2Bh | 2C2Ch | 2C2Dh | 2C2Eh | 2C5Fh | 2C60h |
09E0h | 2C60h | 2C62h | 2C63h | 2C64h | 2C65h | 2C66h | 2C67h | 2C67h |
09E8h | 2C69h | 2C69h | 2C6Bh | 2C6Bh | 2C6Dh | 2C6Eh | 2C6Fh | 2C70h |
09F0h | 2C71h | 2C72h | 2C73h | 2C74h | 2C75h | 2C75h | 2C77h | 2C78h |
09F8h | 2C79h | 2C7Ah | 2C7Bh | 2C7Ch | 2C7Dh | 2C7Eh | 2C7Fh | 2C80h |
0A00h | 2C80h | 2C82h | 2C82h | 2C84h | 2C84h | 2C86h | 2C86h | 2C88h |
0A08h | 2C88h | 2C8Ah | 2C8Ah | 2C8Ch | 2C8Ch | 2C8Eh | 2C8Eh | 2C90h |
0A10h | 2C90h | 2C92h | 2C92h | 2C94h | 2C94h | 2C96h | 2C96h | 2C98h |
0A18h | 2C98h | 2C9Ah | 2C9Ah | 2C9Ch | 2C9Ch | 2C9Eh | 2C9Eh | 2CA0h |
0A20h | 2CA0h | 2CA2h | 2CA2h | 2CA4h | 2CA4h | 2CA6h | 2CA6h | 2CA8h |
0A28h | 2CA8h | 2CAAh | 2CAAh | 2CACh | 2CACh | 2CAEh | 2CAEh | 2CB0h |
0A30h | 2CB0h | 2CB2h | 2CB2h | 2CB4h | 2CB4h | 2CB6h | 2CB6h | 2CB8h |
0A38h | 2CB8h | 2CBAh | 2CBAh | 2CBCh | 2CBCh | 2CBEh | 2CBEh | 2CC0h |
0A40h | 2CC0h | 2CC2h | 2CC2h | 2CC4h | 2CC4h | 2CC6h | 2CC6h | 2CC8h |
0A48h | 2CC8h | 2CCAh | 2CCAh | 2CCCh | 2CCCh | 2CCEh | 2CCEh | 2CD0h |
0A50h | 2CD0h | 2CD2h | 2CD2h | 2CD4h | 2CD4h | 2CD6h | 2CD6h | 2CD8h |
0A58h | 2CD8h | 2CDAh | 2CDAh | 2CDCh | 2CDCh | 2CDEh | 2CDEh | 2CE0h |
0A60h | 2CE0h | 2CE2h | 2CE2h | 2CE4h | 2CE5h | 2CE6h | 2CE7h | 2CE8h |
0A68h | 2CE9h | 2CEAh | 2CEBh | 2CECh | 2CEDh | 2CEEh | 2CEFh | 2CF0h |
0A70h | 2CF1h | 2CF2h | 2CF3h | 2CF4h | 2CF5h | 2CF6h | 2CF7h | 2CF8h |
0A78h | 2CF9h | 2CFAh | 2CFBh | 2CFCh | 2CFDh | 2CFEh | 2CFFh | 10A0h |
0A80h | 10A1h | 10A2h | 10A3h | 10A4h | 10A5h | 10A6h | 10A7h | 10A8h |
0A88h | 10A9h | 10AAh | 10ABh | 10ACh | 10ADh | 10AEh | 10AFh | 10B0h |
0A90h | 10B1h | 10B2h | 10B3h | 10B4h | 10B5h | 10B6h | 10B7h | 10B8h |
0A98h | 10B9h | 10BAh | 10BBh | 10BCh | 10BDh | 10BEh | 10BFh | 10C0h |
0AA0h | 10C1h | 10C2h | 10C3h | 10C4h | 10C5h | FFFFh | D21Bh | FF21h |
0AA8h | FF22h | FF23h | FF24h | FF25h | FF26h | FF27h | FF28h | FF29h |
0AB0h | FF2Ah | FF2Bh | FF2Ch | FF2Dh | FF2Eh | FF2Fh | FF30h | FF31h |
0AB8h | FF32h | FF33h | FF34h | FF35h | FF36h | FF37h | FF38h | FF39h |
0AC0h | FF3Ah | FF5Bh | FF5Ch | FF5Dh | FF5Eh | FF5Fh | FF60h | FF61h |
0AC8h | FF62h | FF63h | FF64h | FF65h | FF66h | FF67h | FF68h | FF69h |
0AD0h | FF6Ah | FF6Bh | FF6Ch | FF6Dh | FF6Eh | FF6Fh | FF70h | FF71h |
0AD8h | FF72h | FF73h | FF74h | FF75h | FF76h | FF77h | FF78h | FF79h |
0AE0h | FF7Ah | FF7Bh | FF7Ch | FF7Dh | FF7Eh | FF7Fh | FF80h | FF81h |
0AE8h | FF82h | FF83h | FF84h | FF85h | FF86h | FF87h | FF88h | FF89h |
0AF0h | FF8Ah | FF8Bh | FF8Ch | FF8Dh | FF8Eh | FF8Fh | FF90h | FF91h |
0AF8h | FF92h | FF93h | FF94h | FF95h | FF96h | FF97h | FF98h | FF99h |
0B00h | FF9Ah | FF9Bh | FF9Ch | FF9Dh | FF9Eh | FF9Fh | FFA0h | FFA1h |
0B08h | FFA2h | FFA3h | FFA4h | FFA5h | FFA6h | FFA7h | FFA8h | FFA9h |
0B10h | FFAAh | FFABh | FFACh | FFADh | FFAEh | FFAFh | FFB0h | FFB1h |
0B18h | FFB2h | FFB3h | FFB4h | FFB5h | FFB6h | FFB7h | FFB8h | FFB9h |
0B20h | FFBAh | FFBBh | FFBCh | FFBDh | FFBEh | FFBFh | FFC0h | FFC1h |
0B28h | FFC2h | FFC3h | FFC4h | FFC5h | FFC6h | FFC7h | FFC8h | FFC9h |
0B30h | FFCAh | FFCBh | FFCCh | FFCDh | FFCEh | FFCFh | FFD0h | FFD1h |
0B38h | FFD2h | FFD3h | FFD4h | FFD5h | FFD6h | FFD7h | FFD8h | FFD9h |
0B40h | FFDAh | FFDBh | FFDCh | FFDDh | FFDEh | FFDFh | FFE0h | FFE1h |
0B48h | FFE2h | FFE3h | FFE4h | FFE5h | FFE6h | FFE7h | FFE8h | FFE9h |
0B50h | FFEAh | FFEBh | FFECh | FFEDh | FFEEh | FFEFh | FFF0h | FFF1h |
0B58h | FFF2h | FFF3h | FFF4h | FFF5h | FFF6h | FFF7h | FFF8h | FFF9h |
0B60h | FFFAh | FFFBh | FFFCh | FFFDh | FFFEh | FFFFh |
7.3 磁碟區標籤目錄專案
磁碟區標籤是 Unicode 字串,可讓使用者區分其儲存磁碟區。 在 exFAT 檔案系統中,磁碟區標籤會以根目錄中的重要主要目錄專案的形式存在(請參閱 表 26)。 磁碟區標籤目錄專案的有效數目範圍從 0 到 1。
表格 26 磁碟區標籤目錄目錄
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,第 7.3.1 節 定義其內容。 |
CharacterCount | 1 | 1 | 此欄位為必要欄位,區段 7.3.2 定義其內容。 |
VolumeLabel | 2 | 22 | 此欄位為必要欄位,第 7.3.3 節 定義其內容。 |
保留 | 24 | 8 | 此欄位為必要欄位,並保留其內容。 |
7.3.1 EntryType 欄位
EntryType 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1 節)。
7.3.1.1 TypeCode 字段
TypeCode 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.1 節)。
對於 [磁碟區卷標] 目錄專案,此字段的有效值為 3。
7.3.1.2 TypeImportance 字段
TypeImportance 位元段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.2 節)。
對於 [磁碟區卷標] 目錄專案,此字段的有效值為 0。
7.3.1.3 TypeCategory 字段
TypeCategory 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.3 節)。
7.3.1.4 InUse 欄位
InUse 欄位應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.4 節)。
7.3.2 CharacterCount 字段
CharacterCount 字段應包含 VolumeLabel 字段所包含的 Unicode 字串長度。
此欄位的有效值範圍應該是:
至少 0,這表示 Unicode 字串長度為 0 個字元(相當於沒有磁碟區卷標)
最多 11,這表示 Unicode 字串長度為 11 個字元
7.3.3 VolumeLabel 字段
VolumeLabel 字段應包含 Unicode 字串,這是磁碟區的用戶易記名稱。 VolumeLabel 字段與檔名目錄專案的 FileName 字段具有相同的無效字元集(請參閱 第 7.7.3 節)。
7.4 檔案目錄專案
檔案目錄專案描述檔案和目錄。 它們是重要的主要目錄專案,而且任何目錄可能包含零個或多個檔案目錄專案(請參閱 表 27)。 若要讓檔案目錄專案有效,只有一個 Stream Extension 目錄專案和至少一個檔名目錄項目必須緊接在 [檔案目錄] 項目之後(請參閱分別 第 7.6 節 和 第 7.7 節。
表 27 檔案目錄Entry
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,第 7.4.1 節 定義其內容。 |
SecondaryCount | 1 | 1 | 此欄位為必要欄位,第 7.4.2 節 定義其內容。 |
SetChecksum | 2 | 2 | 此欄位為必要欄位,第 7.4.3 節 定義其內容。 |
FileAttributes | 4 | 2 | 此欄位為必要欄位,區段 7.4.4 定義其內容。 |
Reserved1 | 6 | 2 | 此欄位為必要欄位,並保留其內容。 |
CreateTimestamp | 8 | 4 | 此欄位為必要欄位,第 7.4.5 節 定義其內容。 |
LastModifiedTimestamp | 12 | 4 | 此欄位為必要欄位,第 7.4.6 節 定義其內容。 |
LastAccessedTimestamp | 16 | 4 | 此欄位為必要欄位,第 7.4.7 節 定義其內容。 |
Create10msIncrement | 20 | 1 | 此欄位為必要欄位,第 7.4.5 節 定義其內容。 |
LastModified10msIncrement | 21 | 1 | 此欄位為必要欄位,第 7.4.6 節 定義其內容。 |
CreateUtcOffset | 22 | 1 | 此欄位為必要欄位,第 7.4.5 節 定義其內容。 |
LastModifiedUtcOffset | 23 | 1 | 此欄位為必要欄位,第 7.4.6 節 定義其內容。 |
LastAccessedUtcOffset | 24 | 1 | 此欄位為必要欄位,第 7.4.7 節 定義其內容。 |
Reserved2 | 25 | 7 | 此欄位為必要欄位,並保留其內容。 |
7.4.1 EntryType 欄位
EntryType 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1 節)。
7.4.1.1 TypeCode 字段
TypeCode 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.1 節)。
對於 [檔案目錄] 專案,此字段的有效值為 5。
7.4.1.2 TypeImportance 字段
TypeImportance 位元段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.2 節)。
對於 [檔案目錄] 專案,此字段的有效值為 0。
7.4.1.3 TypeCategory 字段
TypeCategory 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.3 節)。
7.4.1.4 InUse 欄位
InUse 欄位應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.4 節)。
7.4.2 SecondaryCount 字段
SecondaryCount 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.2 節)。
7.4.3 SetChecksum 欄位
SetChecksum 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.3 節)。
7.4.4 FileAttributes 字段
FileAttributes 字段包含旗標(請參閱表 28 )。
表 28 FileAttributes 字段結構
功能變數名稱 | 位移 (位) |
大小 (位) |
批注 |
---|---|---|---|
ReadOnly | 0 | 1 | 此欄位為必要欄位,且符合 MS-DOS 定義。 |
隱藏 | 1 | 1 | 此欄位為必要欄位,且符合 MS-DOS 定義。 |
系統 | 2 | 1 | 此欄位為必要欄位,且符合 MS-DOS 定義。 |
Reserved1 | 3 | 1 | 此欄位為必要欄位,並保留其內容。 |
目錄 | 4 | 1 | 此欄位為必要欄位,且符合 MS-DOS 定義。 |
檔案 | 5 | 1 | 此欄位為必要欄位,且符合 MS-DOS 定義。 |
Reserved2 | 6 | 10 | 此欄位為必要欄位,並保留其內容。 |
7.4.5 CreateTimestamp、Create10msIncrement 和 CreateUtcOffset 字段
結合,CreateTimestamp 和 CreateTime10msIncrement 字段應該描述建立指定檔案/目錄的本機日期和時間。 CreateUtcOffset 字段描述當地日期和時間與 UTC 的位移。 實作會在建立指定的目錄專案集時設定這些欄位。
這些欄位應符合 Timestamp、10msIncrement 和 UtcOffset 字段的定義(請參閱 第 7.4.8 節、第 7.4.9 節,以及分別 第 7.4.10 節)。
7.4.6 LastModifiedTimestamp、LastModified10msIncrement 和 LastModifiedUtcOffset 字段
結合,LastModifiedTimestamp 和 LastModifiedTime10msIncrement 字段應該描述上次修改與指定 Stream Extension 目錄專案相關聯之任何叢集內容的本機日期和時間。 LastModifiedUtcOffset 字段描述當地日期和時間與 UTC 的位移。 實作應更新下列欄位:
修改與指定之 Stream Extension 目錄項目相關聯的任何叢集內容之後(除了在 ValidDataLength 字段描述以外的內容除外)
變更 ValidDataLength 或 DataLength 字段的值時
這些欄位應符合 Timestamp、10msIncrement 和 UtcOffset 字段的定義(請參閱 第 7.4.8 節、第 7.4.9 節,以及分別 第 7.4.10 節)。
7.4.7 LastAccessedTimestamp 和 LastAccessedUtcOffset 字段
LastAccessedTimestamp 字段應描述上次存取與指定 Stream Extension 目錄專案相關聯之任何叢集內容的本機日期和時間。 LastAccessedUtcOffset 字段描述當地日期和時間與 UTC 的位移。 實作應更新下列欄位:
修改與指定之 Stream Extension 目錄項目相關聯的任何叢集內容之後(除了 ValidDataLength 以外的內容除外)
變更 ValidDataLength 或 DataLength 字段的值時
實作在讀取與指定 Stream Extension 目錄專案相關聯的任何叢集內容之後,應該更新這些欄位。
這些欄位應符合 Timestamp 和 UtcOffset 字段的定義(請參閱分別 第 7.4.8 節 和 第 7.4.10 節)。
7.4.8 時間戳欄位
時間戳欄位描述本機日期和時間,歸結為兩秒的解析度(請參閱 表 29)。
表 29 時間戳字段結構
功能變數名稱 | 位移 (位) |
大小 (位) |
批注 |
---|---|---|---|
DoubleSeconds | 0 | 5 | 此欄位為必要欄位,第 7.4.8.1 節 定義其內容。 |
分鐘 | 5 | 6 | 此欄位為必要欄位,第 7.4.8.2 節 定義其內容。 |
小時 | 11 | 5 | 此欄位為必要欄位,第 7.4.8.3 節 定義其內容。 |
日 | 16 | 5 | 此欄位為必要欄位,第 7.4.8.4 節 定義其內容。 |
月 | 21 | 4 | 此欄位為必要欄位,第 7.4.8.5 節 定義其內容。 |
年 | 25 | 7 | 此欄位為必要欄位,第 7.4.8.6 節 定義其內容。 |
7.4.8.1 DoubleSeconds 字段
DoubleSeconds 欄位應該以兩秒的倍數描述 Timestamp 欄位的秒部分。
此欄位的有效值範圍應該是:
0,代表0秒
29,代表 58 秒
7.4.8.2 分鐘欄位
[分鐘] 欄位應描述 [時間戳] 字段的分鐘部分。
此欄位的有效值範圍應該是:
0,代表 0 分鐘
59,代表 59 分鐘
7.4.8.3 小時字段
[小時] 欄位應描述 [時間戳] 字段的小時部分。
此欄位的有效值範圍應該是:
0,代表 00:00 小時
23,代表 23:00 小時
7.4.8.4 天欄位
[日] 欄位應描述 [時間戳] 字段的日期部分。
此欄位的有效值範圍應該是:
1,這是指定月份的第一天
指定月份的最後一天(指定月份定義有效天數)
7.4.8.5 月字段
[月份] 欄位應描述 [時間戳] 字段的月份部分。
此欄位的有效值範圍應該是:
至少 1,代表 1 月
最多12個代表12月
7.4.8.6 年欄位
[年份] 字段應描述 [時間戳] 字段的年份部分,相對於 1980 年。 此欄位代表值為 0 的 1980 年,而 2107 年則值為 127。
此欄位的所有可能值都是有效的。
7.4.9 10msIncrement 字段
10msIncrement 欄位應該以十毫秒的倍數,為對應的時間戳欄位提供額外的時間解析。
這些欄位的有效值範圍應該是:
至少 0,代表 0 毫秒
最多 199,代表 1990 毫秒
7.4.10 UtcOffset 字段
UtcOffset 字段(請參閱 表 30)應描述 UTC 到當地日期和時間的位移,其對應的 Timestamp 和 10msIncrement 字段描述。 從UTC到當地日期和時間的位移包括時區和其他日期時間調整的影響,例如日光節約和地區夏季時間變更。
表格 30 UtcOffset 字段結構
功能變數名稱 | 位移 (位) |
大小 (位) |
批注 |
---|---|---|---|
OffsetFromUtc | 0 | 7 | 此欄位為必要欄位,第 7.4.10.1 節定義其內容。 |
OffsetValid | 7 | 1 | 此欄位為必要欄位,區段 7.4.10.2 定義其內容。 |
7.4.10.1 OffsetFromUtc 字段
OffsetFromUtc 字段應描述當地日期和時間的 UTC 位移,而相關的 Timestamp 和 10msIncrement 字段包含。 此欄位會以 15 分鐘間隔描述 UTC 的位移(請參閱表 31)。
Table 31 OffsetFromUtc 字段值 的意義
值 | 帶正負號的十進位對等 | 描述 |
---|---|---|
3Fh | 63 | 當地日期和時間為 UTC + 15:45 |
3Eh | 62 | 當地日期和時間為 UTC + 15:30 |
. . . |
. . . |
. . . |
01h | 1 | 當地日期和時間為 UTC + 00:15 |
00h | 0 | 當地日期和時間為UTC |
7Fh | -1 | 當地日期和時間為 UTC – 00:15 |
. . . |
. . . |
. . . |
41 小時 | -63 | 當地日期和時間為 UTC – 15:45 |
40 小時 | -64 | 當地日期和時間為 UTC – 16:00 |
如上表所示,此欄位的所有可能值都是有效的。 不過,實作應該只在下列情況下記錄此欄位的值 00h:
本機日期和時間實際上與UTC相同,在此情況下,OffsetValid欄位的值應為1
目前還不清楚本機日期和時間,在此情況下,OffsetValid 字段的值應該是 1,實作會將 UTC 視為當地日期和時間
不知道UTC,在此情況下,OffsetValid 字段的值應為0
如果 UTC 的當地日期和時間位移不是 15 分鐘間隔的倍數,則實作應該會在 OffsetFromUtc 字段中記錄 00h,並將 UTC 視為當地日期和時間。
7.4.10.2 OffsetValid 字段
OffsetValid 字段應該描述 OffsetFromUtc 字段的內容是否有效,如下所示:
0,這表示 OffsetFromUtc 欄位的內容無效
且應為 00h
1,這表示 OffsetFromUtc 欄位的內容有效
當UTC無法計算 OffsetFromUtc 欄位的值時,實作應該只會將此字段設定為0。 如果此欄位包含值 0,則實作會將 Timestamp 和 10msIncrement 字段視為具有與目前本機日期和時間相同的 UTC 位移。
7.5 磁碟區 GUID 目錄專案
磁碟區 GUID 目錄專案包含 GUID,可讓實作以唯一且以程式設計方式區分磁碟區。 磁碟區 GUID 以根目錄中的良性主要目錄專案的形式存在(請參閱 表 32)。 磁碟區 GUID 目錄專案的有效數目範圍從 0 到 1。
表格 32 磁碟區 GUID DirectoryEntry
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,第 7.5.1 節 定義其內容。 |
SecondaryCount | 1 | 1 | 此欄位為必要欄位,第 7.5.2 節 定義其內容。 |
SetChecksum | 2 | 2 | 此欄位為必要欄位,第 7.5.3 節 定義其內容。 |
GeneralPrimaryFlags | 4 | 2 | 此欄位為必要欄位,第 7.5.4 節 定義其內容。 |
VolumeGuid | 6 | 16 | 此欄位為必要欄位,第 7.5.5 節 定義其內容。 |
保留 | 22 | 10 | 此欄位為必要欄位,並保留其內容。 |
7.5.1 EntryType 欄位
EntryType 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1 節)。
7.5.1.1 TypeCode 字段
TypeCode 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.1 節)。
對於磁碟區 GUID 目錄專案,此欄位的有效值為 0。
7.5.1.2 TypeImportance 字段
TypeImportance 位元段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.2 節)。
對於磁碟區 GUID 目錄專案,此欄位的有效值為 1。
7.5.1.3 TypeCategory 字段
TypeCategory 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.3 節)。
7.5.1.4 InUse 欄位
InUse 欄位應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.1.4 節)。
7.5.2 SecondaryCount 字段
SecondaryCount 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.2 節)。
對於磁碟區 GUID 目錄專案,此欄位的有效值為 0。
7.5.3 SetChecksum 欄位
SetChecksum 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.3 節)。
7.5.4 GeneralPrimaryFlags 字段
GeneralPrimaryFlags 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.4 節),並定義要保留的自定義定義欄位內容。
7.5.4.1 可能的配置欄位
[可能配置] 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.4.1 節)。
對於磁碟區 GUID 目錄專案,此欄位的有效值為 0。
7.5.4.2 NoFatChain 字段
NoFatChain 字段應符合泛型主要目錄Entry 範本中提供的定義(請參閱 第 6.3.4.2 節)。
7.5.5 VolumeGuid 欄位
VolumeGuid 字段應包含可唯一識別指定磁碟區的 GUID。
此欄位的所有可能值都是有效的,但 null GUID 除外,這是 {00000000-0000-0000-0000-000000000000}。
7.6 數據流擴充目錄專案
Stream Extension 目錄專案是檔案目錄專案集中的重要次要目錄專案(請參閱 表 33)。 檔案目錄專案集中的有效 Stream Extension 目錄項目數目為 1。 此外,只有當此目錄專案緊接在 [檔案] 目錄項目之後時,此目錄專案才有效。
表 33 數據流擴充目錄Entry
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,第 7.6.1 節 定義其內容。 |
GeneralSecondaryFlags | 1 | 1 | 此欄位為必要欄位,第 7.6.2 節 定義其內容。 |
Reserved1 | 2 | 1 | 此欄位為必要欄位,並保留其內容。 |
NameLength | 3 | 1 | 此欄位為必要欄位,第 7.6.3 節 定義其內容。 |
NameHash | 4 | 2 | 此欄位為必要欄位,第 7.6.4 節 定義其內容。 |
Reserved2 | 6 | 2 | 此欄位為必要欄位,並保留其內容。 |
ValidDataLength | 8 | 8 | 此欄位為必要欄位,第 7.6.5 節 定義其內容。 |
Reserved3 | 16 | 4 | 此欄位為必要欄位,並保留其內容。 |
FirstCluster | 20 | 4 | 此欄位為必要欄位,第 7.6.6 節 定義其內容。 |
DataLength | 24 | 8 | 此欄位為必要欄位,第 7.6.7 節 定義其內容。 |
7.6.1 EntryType 欄位
EntryType 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1 節)。
7.6.1.1 TypeCode 字段
TypeCode 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.1 節)。
對於 Stream Extension 目錄專案,此字段的有效值為 0。
7.6.1.2 TypeImportance 字段
TypeImportance 位元段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.2 節)。
對於 Stream Extension 目錄專案,此字段的有效值為 0。
7.6.1.3 TypeCategory 字段
TypeCategory 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.3 節)。
7.6.1.4 InUse 欄位
InUse 欄位應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.4 節)。
7.6.2 GeneralSecondaryFlags 字段
GeneralSecondaryFlags 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2 節),並定義要保留的自定義定義欄位內容。
7.6.2.1 可能的配置欄位
[可能的配置] 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2.1 節)。
對於 Stream Extension 目錄專案,此字段的有效值為 1。
7.6.2.2 NoFatChain 字段
NoFatChain 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2.2 節)。
7.6.3 NameLength 欄位
NameLength 字段應包含後續檔名目錄專案的 Unicode 字串長度(請參閱 第 7.7 節) 共同包含。
此欄位的有效值範圍應該是:
至少 1,這是最短可能的檔名
最多 255 個,這是最長的檔名
NameLength 字段的值也會影響檔名目錄項目的數目(請參閱 第 7.7 節)。
7.6.4 NameHash 欄位
NameHash 位元元組應包含 2 位元組哈希(請參閱 圖 4) 的上寫檔名。 這可讓實作在依名稱搜尋檔案時執行快速比較。 重要的是,NameHash 會提供不相符的確認。 實作應確認所有 NameHash 相符專案與向上大小寫檔名的比較。
圖 4 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 ValidDataLength 字段
ValidDataLength 字段應該描述寫入數據流用戶數據的距離。 實作會在將數據進一步寫入數據流時更新此欄位。 在儲存媒體上,未定義有效數據長度與數據流數據長度之間的數據。 實作應該傳回超出有效數據長度之讀取作業的零。
如果對應的 [檔案目錄] 專案描述目錄,則此欄位的唯一有效值等於 DataLength 字段的值。 否則,此欄位的有效值範圍應該是:
至少 0,這表示未將任何用戶數據寫出至數據流
最多 DataLength,這表示用戶數據已寫出至數據流的整個長度
7.6.6 FirstCluster 欄位
FirstCluster 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.3 節)。
此欄位應包含裝載用戶數據之數據流第一個叢集的索引。
7.6.7 DataLength 欄位
DataLength 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.4 節)。
如果對應的 [檔案目錄] 專案描述目錄,則此欄位的有效值是關聯配置的完整大小,以位元組為單位,可能是 0。 此外,對於目錄,此欄位的最大值為 256MB。
7.7 檔名目錄專案
檔名目錄專案是檔案目錄專案集中的重要次要目錄專案(請參閱 表 34)。 檔案目錄專案集中的有效檔名目錄項目數目是 NameLength / 15,四捨五入為最接近的整數。 此外,只有在檔名目錄專案緊接串流延伸模組目錄項目連續數列時才有效。 檔名目錄項目會結合以形成 [檔案目錄] 專案集的檔名。
指定目錄專案的所有子系都應該有唯一的檔名目錄專案集。 也就是說,在任何一個目錄中的上層大小寫之後,沒有任何重複的檔案或目錄名稱。
表格 34 檔名 DirectoryEntry
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,第 7.7.1 節 定義其內容。 |
GeneralSecondaryFlags | 1 | 1 | 此欄位為必要欄位,第 7.7.2 節 定義其內容。 |
檔名 | 2 | 30 | 此欄位為必要欄位,第 7.7.3 節 定義其內容。 |
7.7.1 EntryType 欄位
EntryType 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1 節)。
7.7.1.1 TypeCode 字段
TypeCode 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.1 節)。
對於 [檔名] 目錄專案,此字段的有效值為 1。
7.7.1.2 TypeImportance 字段
TypeImportance 位元段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.2 節)。
對於 [檔名] 目錄專案,此字段的有效值為 0。
7.7.1.3 TypeCategory 字段
TypeCategory 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.3 節)。
7.7.1.4 InUse 欄位
InUse 欄位應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.4 節)。
7.7.2 GeneralSecondaryFlags 字段
GeneralSecondaryFlags 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2 節),並定義要保留的自定義定義欄位內容。
7.7.2.1 可能的配置欄位
[可能的配置] 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2.1 節)。
對於 Stream Extension 目錄專案,此字段的有效值為 0。
7.7.2.2 NoFatChain 字段
NoFatChain 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2.2 節)。
7.7.3 FileName 欄位
FileName 字段應包含 Unicode 字串,這是檔名的一部分。 在 [檔名] 目錄專案集內的順序中,FileName 欄位會串連以形成 [檔案目錄專案集] 的檔名。 假設 FileName 欄位的長度為 15 個字元,以及檔名目錄項目數目上限 17,最終串連檔名的最大長度為 255。
串連的檔名與其他 FAT 型文件系統具有相同的不合法字元集(請參閱 表 35)。 實作應該將 FileName 欄位的未使用字元設定為值 0000h。
表格 35 無效的 FileName 字元
字元碼 | 描述 | 字元碼 | 描述 | 字元碼 | 描述 |
---|---|---|---|---|---|
0000h | 控制程序代碼 | 0001h | 控制程序代碼 | 0002h | 控制程序代碼 |
0003h | 控制程序代碼 | 0004h | 控制程序代碼 | 0005h | 控制程序代碼 |
0006h | 控制程序代碼 | 0007h | 控制程序代碼 | 0008h | 控制程序代碼 |
0009h | 控制程序代碼 | 000Ah | 控制程序代碼 | 000Bh | 控制程序代碼 |
000Ch | 控制程序代碼 | 000Dh | 控制程序代碼 | 000Eh | 控制程序代碼 |
000Fh | 控制程序代碼 | 0010h | 控制程序代碼 | 0011h | 控制程序代碼 |
0012h | 控制程序代碼 | 0013h | 控制程序代碼 | 0014h | 控制程序代碼 |
0015h | 控制程序代碼 | 0016h | 控制程序代碼 | 0017h | 控制程序代碼 |
0018h | 控制程序代碼 | 0019h | 控制程序代碼 | 001Ah | 控制程序代碼 |
001Bh | 控制程序代碼 | 001Ch | 控制程序代碼 | 001Dh | 控制程序代碼 |
001Eh | 控制程序代碼 | 001Fh | 控制程序代碼 | 0022h | 引號 |
002Ah | 星號 | 002Fh | 正斜線 | 003Ah | 結腸 |
003Ch | 小於符號 | 003Eh | 大於符號 | 003Fh | 問號 |
005Ch | 反斜線 | 007Ch | 垂直線 |
檔名 “.” 和 “..” 分別具有 “this directory” 和 “containing directory” 的特殊意義。 實作不應在 FileName 欄位中記錄其中一個保留的檔名。 不過,實作可能會在目錄清單中產生這兩個檔名,以參考所列出的目錄和包含目錄。
實作可能會想要將檔案和目錄名稱限制為只有 ASCII 字元集。 如果是,則應該限制其字元使用範圍,以在前128個Unicode專案中使用有效字元。 它們仍然必須在磁碟區上的 Unicode 中儲存檔案和目錄名稱,並在與用戶互動時轉譯為/從 ASCII/Unicode 轉譯。
7.8 廠商延伸模組目錄專案
Vendor Extension 目錄專案是檔案目錄專案集中的良性次要目錄專案(請參閱 表 36)。 檔案目錄專案集可能包含任意數目的 Vendor Extension 目錄專案,最多限制次要目錄項目,減少其他次要目錄專案的數目。 此外,只有在廠商延伸模組目錄專案不在必要的 Stream Extension 和 File Name 目錄專案之前,才會有效。
廠商擴充目錄專案可讓廠商透過 VendorGuid 欄位,在個別檔案目錄專案集中擁有唯一、廠商特定的目錄專案(請參閱 表 36。 唯一目錄專案可有效地讓廠商擴充exFAT檔案系統。 廠商可以定義 VendorDefined 字段的內容(請參閱 表 36)。 廠商實作可能會維護 VendorDefined 欄位的內容,並提供廠商特定的功能。
無法辨識廠商擴充目錄專案 GUID 的實作,應將目錄專案視為與任何其他無法辨識的良性次要目錄專案相同(請參閱 第 8.2 節)。
表格 36 廠商擴充目錄Entry
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,第 7.8.1 節 定義其內容。 |
GeneralSecondaryFlags | 1 | 1 | 此欄位為必要欄位,第 7.8.2 節 定義其內容。 |
VendorGuid | 2 | 16 | 此欄位為必要欄位,第 7.8.3 節 定義其內容。 |
VendorDefined | 18 | 14 | 此欄位為必要欄位,且廠商可能會定義其內容。 |
7.8.1 EntryType 欄位
EntryType 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1 節)。
7.8.1.1 TypeCode 字段
TypeCode 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.1 節)。
針對 [廠商擴充功能] 目錄專案,此字段的有效值為 0。
7.8.1.2 TypeImportance 字段
TypeImportance 位元段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.2 節)。
針對 [廠商擴充功能] 目錄專案,此字段的有效值為 1。
7.8.1.3 TypeCategory 字段
TypeCategory 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.3 節)。
7.8.1.4 InUse 欄位
InUse 欄位應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.4 節)。
7.8.2 GeneralSecondaryFlags 字段
GeneralSecondaryFlags 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2 節),並定義要保留的自定義定義欄位內容。
7.8.2.1 可能的配置欄位
[可能的配置] 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2.1 節)。
針對 [廠商擴充功能] 目錄專案,此字段的有效值為 0。
7.8.2.2 NoFatChain 字段
NoFatChain 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2.2 節)。
7.8.3 VendorGuid 欄位
VendorGuid 字段應包含可唯一識別指定廠商延伸模組的 GUID。
此欄位的所有可能值都是有效的,但 null GUID 除外,這是 {00000000-0000-0000-0000-000000000000}。 不過,廠商應該使用 GUID 產生工具,例如 GuidGen.exe,在定義擴充功能時選取 GUID。
此欄位的值會決定 VendorDefined 欄位的廠商特定結構。
7.9 廠商配置目錄專案
廠商配置目錄專案是檔案目錄專案集中的良性次要目錄專案(請參閱 表 37)。 檔案目錄專案集可能包含任意數目的廠商配置目錄專案,最多限制次要目錄項目,減少其他次要目錄項目的數目。 此外,只有在廠商配置目錄專案不在必要的數據流延伸模組和檔名目錄專案之前,才會有效。
廠商配置目錄專案可讓廠商透過 VendorGuid 欄位,在個別檔案目錄專案集中擁有唯一、廠商特定的目錄專案(請參閱 表 37)。 唯一目錄專案可有效地讓廠商擴充exFAT檔案系統。 如果有任何存在,廠商可能會定義相關聯叢集的內容。 廠商實作可能會維護相關聯叢集的內容,如果有的話,而且可能會提供廠商特定的功能。
無法辨識廠商配置目錄專案的 GUID 實作,應將目錄專案視為與任何其他無法辨識的良性次要目錄專案相同(請參閱 第 8.2 節)。
表 37 廠商設定目錄Entry
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
EntryType | 0 | 1 | 此欄位為必要欄位,第 7.9.1 節 定義其內容。 |
GeneralSecondaryFlags | 1 | 1 | 此欄位為必要欄位,第 7.9.2 節 定義其內容。 |
VendorGuid | 2 | 16 | 此欄位為必要欄位,第 7.9.3 節 定義其內容。 |
VendorDefined | 18 | 2 | 此欄位為必要欄位,且廠商可能會定義其內容。 |
FirstCluster | 20 | 4 | 此欄位為必要欄位,第 7.9.4 節 定義其內容。 |
DataLength | 24 | 8 | 此欄位為必要欄位,第 7.9.5 節 定義其內容。 |
7.9.1 EntryType 欄位
EntryType 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1 節)。
7.9.1.1 TypeCode 字段
TypeCode 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.1 節)。
針對 [廠商配置] 目錄專案,此字段的有效值為 1。
7.9.1.2 TypeImportance 字段
TypeImportance 位元段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.2 節)。
針對 [廠商配置] 目錄專案,此字段的有效值為 1。
7.9.1.3 TypeCategory 字段
TypeCategory 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.3 節)。
7.9.1.4 InUse 欄位
InUse 欄位應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.1.4 節)。
7.9.2 GeneralSecondaryFlags 字段
GeneralSecondaryFlags 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2 節),並定義要保留的自定義定義欄位內容。
7.9.2.1 可能的配置欄位
[可能的配置] 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2.1 節)。
針對 [廠商配置] 目錄專案,此字段的有效值為 1。
7.9.2.2 NoFatChain 字段
NoFatChain 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.2.2 節)。
7.9.3 VendorGuid 欄位
VendorGuid 字段應包含可唯一識別指定廠商配置的 GUID。
此欄位的所有可能值都是有效的,但 null GUID 除外,這是 {00000000-0000-0000-0000-000000000000}。 不過,廠商應該使用 GUID 產生工具,例如 GuidGen.exe,在定義擴充功能時選取 GUID。
這個欄位的值會判斷相關聯叢集內容的廠商特定結構,如果有的話。
7.9.4 FirstCluster 欄位
FirstCluster 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.3 節)。
7.9.5 DataLength 欄位
DataLength 字段應符合泛型次要目錄Entry 範本中提供的定義(請參閱 第 6.4.4 節)。
7.10 TexFAT 填補目錄專案
此規格 exFAT Revision 1.00 檔案系統基本規格不會定義 TexFAT Padding 目錄專案。 不過,其類型代碼為 1,且其類型重要性為 1。 此規格的實作應將 TexFAT Padding 目錄專案視為與任何其他無法辨識的良性主要目錄專案相同,實作不得移動 TexFAT Padding 目錄專案。
8 實作注意事項
8.1 建議的寫入順序
實作應確保磁碟區能夠盡可能復原電源故障和其他不可避免的失敗。 建立新的目錄專案或修改叢集配置時,實作通常應該遵循下列撰寫順序:
將 VolumeDirty 字段的值設定為 1
視需要更新作用中的 FAT
更新使用中的配置位圖
視需要建立或更新目錄專案
如果第一個步驟之前的值是 0,請將 VolumeDirty 欄位的值清除為 0
刪除目錄項目或釋放叢集配置時,實作應遵循下列寫入順序:
將 VolumeDirty 字段的值設定為 1
視需要刪除或更新目錄專案
視需要更新作用中的 FAT
更新使用中的配置位圖
如果第一個步驟之前的值是 0,請將 VolumeDirty 欄位的值清除為 0
8.2 無法辨識目錄專案的含意
未來相同主要修訂編號、1 和次要修訂編號高於 0 的 exFAT 規格,可能會定義新的良性主要、重要次要和良性次要目錄專案。 只有較高主要修訂編號的exFAT規格可以定義新的重要主要目錄專案。 此規格的實作,exFAT Revision 1.00 檔系統基本規格,應該能夠掛接和存取任何主要修訂編號 1 和任何次要修訂編號的任何 exFAT 磁碟區。 這會顯示實作可能會遇到無法辨識的目錄項目的情況。 下列描述這些案例的影響:
根目錄中無法辨識的重要主要目錄專案會使磁碟區無效。 除了檔案目錄專案之外,任何非根目錄目錄中的任何重要主要目錄專案都呈現無效的裝載目錄。
實作不得修改無法辨識的良性主要目錄專案或其相關聯的叢集配置。 不過,刪除目錄時,只有在刪除目錄時,實作才會刪除無法辨識的良性主要目錄專案,並釋放所有相關聯的叢集配置。如果有的話。
實作不得修改無法辨識的重要次要目錄專案或其相關聯的叢集配置。 目錄專案集中有一或多個無法辨識的重要次要目錄專案,會轉譯無法辨識整個目錄專案集。 刪除包含一或多個無法辨識之次要目錄專案的目錄專案集時,實作會釋放與無法辨識的重要次要目錄專案相關聯的所有叢集配置。 此外,如果目錄專案集描述目錄,實作可能會:
周遊至目錄
列舉它所包含的目錄專案
刪除自主目錄專案
將自主目錄專案移至不同的目錄
不過,實作不得:
修改自主目錄專案,但刪除除外,如所述
建立新的自主目錄專案
開啟自主目錄專案,但周遊和列舉除外,如所述
實作不得修改無法辨識的良性次要目錄專案或其相關聯的叢集配置。 實作應該忽略無法辨識的良性次要目錄專案。 刪除目錄專案集時,實作會釋放與無法辨識的良性次要目錄專案相關聯的所有叢集配置。
9 檔案系統限制
9.1 扇區大小限制
BytesPerSectorShift 位元段會定義下層扇區大小限制(評估為 下限:512 個字節;上限:4,096 個字節)。
9.2 叢集大小限制
SectorsPerClusterShift 字段定義下限和上限叢集大小限制(下限:1 個扇區;上限:25 -- BytesPerSectorShift 扇區,評估為 32MB)。
9.3 叢集堆積大小限制
叢集堆積至少應包含足夠的空間來裝載下列基本文件系統結構:根目錄、所有配置位圖和 Up-case Table。
較低的叢集堆積大小限制是位於叢集堆積中之每個基本文件系統結構大小下限的函式。 即使指定最小的可能叢集 (512 個字節),每個基本文件系統結構都不需要超過一個叢集。 因此,下限為:2 個 + NumberOfFats 叢集,根據 NumberOfFats 字段的值,評估為 3 或 4 個叢集。
[叢集堆積大小上限] 是叢集數目上限的簡單函式,ClusterCount 字段會定義 (上限:232- 11 個叢集)。 不論叢集大小為何,這類叢集堆積有足夠的空間可至少裝載基本文件系統結構。
9.4 磁碟區大小限制
VolumeLength 字段會定義大小上限(下限:220/ 2BytesPerSectorShift扇區,評估為 1MB: 上限:2 個64 個- 1 個扇區,鑒於最大的扇區大小,評估為大約 64ZB)。 不過,此規格建議在叢集堆積中不超過 224 個- 2 個叢集(請參閱 第 3.1.9 節)。 因此,建議的磁碟區上限為:ClusterHeapOffset + (224- 2) * 2SectorsPerClusterShift。 假設最大可能的叢集大小為 32MB,且假設 ClusterHeapOffset 是 96MB(主要和備份開機區域有足夠的空間,且只有第一個 FAT),建議的磁碟區上限評估為大約 512TB。
9.5 目錄大小限制
Stream Extension 目錄專案的 DataLength 字段會定義下限和上限目錄大小限制(下限:0 個字節;上限:256MB)。 這表示目錄最多可以裝載 8,388,608 個目錄專案(每個目錄專案耗用 32 個字節)。 假設檔案目錄專案集最小,有三個目錄專案,目錄最多可以裝載 2,796,202 個檔案。
10 附錄
10.1 全域唯一標識碼 (GUID)
GUID 是通用唯一標識碼的Microsoft實作。 GUID 是一個 128 位值,其中包含一組 8 個十六進位數位, 後面接著三組 4 個十六進位數位,後面接著一組 12 個十六進位數位,例如 {6B29FC40-CA47-1067-B31D-00DD010662DA}(請參閱 表 38)。
表 38 GUID 結構
功能變數名稱 | 位移 (位元組) |
大小 (位元組) |
批注 |
---|---|---|---|
Data1 | 0 | 4 | 此欄位為必要欄位,且包含來自範例中第一個 GUID 群組的四個字節(6B29FC40h)。 |
Data2 | 4 | 2 | 此欄位為必要欄位,且包含來自範例中第二個 GUID 群組的兩個字節(CA47h)。 |
Data3 | 6 | 2 | 此欄位為必要欄位,且包含來自 GUID 第三個群組的兩個字節(從範例為 1067h)。 |
Data4[0] | 8 | 1 | 此欄位為必要欄位,且包含來自 GUID 第四個群組中最重要的位元組(來自範例的 B3h)。 |
Data4[1] | 9 | 1 | 此欄位為必要欄位,且包含來自 GUID 第四個群組的最小有效位元組(來自範例的 1Dh)。 |
Data4[2] | 10 | 1 | 此欄位為必要欄位,包含來自 GUID 第五個群組的第一個字節(從範例中為 00h)。 |
Data4[3] | 11 | 1 | 此欄位為必要欄位,且包含來自範例中第五個 GUID 群組的第二個字節(DDh)。 |
Data4[4] | 12 | 1 | 此欄位為必要欄位,且包含來自 GUID 第五個群組的第三個字節(從範例中為 01h)。 |
Data4[5] | 13 | 1 | 此欄位為必要欄位,且包含來自 GUID 第五個群組的第四個字節(從範例中為 06h)。 |
Data4[6] | 14 | 1 | 此欄位為必要欄位,且包含來自 GUID 第五個群組的第五個字節(從範例中為 62 小時)。 |
Data4[7] | 15 | 1 | 此欄位為必要欄位,且包含來自範例之 GUID 第五個群組的第六個字節(DAh)。 |
10.2 分割區數據表
為了確保在一組廣泛的使用案例中 exFAT 磁碟區的互作性,實作應該針對 MBR 分割記憶體和數據分割 GUID 使用分割類型 07h {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} 進行 GPT 分割記憶體。
11 檔變更歷程記錄
表 39 說明發行、更正、新增、移除及釐清本文件的歷史。
表格 39 檔變更歷程記錄
日期 | 變更 的 描述 |
---|---|
08-Jan-2008 | 基本規格的第一個版本,包括: 第1節簡介 第2節, 第3節:主要和備份開機區域 第 4 節:檔案配置數據表區域 第 5 節:數據區 第 6 節目錄結構 第 7 節:目錄項目定義 第 8 節:實作注意事項 第 9 節檔案系統限制 附錄第 10 節 |
08-Jun-2008 | 基本規格的第二個版本,其中包含下列變更: 新增第11節, 在 7.8 和 7.9 節中新增廠商延伸模組和廠商配置目錄專案 在區段 7.2.5 和 7.2.5.1 中新增建議的案例數據表 第 7.4 節中新增 UtcOffset 字段,並在第 1.3 節中新增 UTC 縮略字 更正表格 19 中 [自定義定義] 欄位的大小 更正第 7.6.3 節中 NameLength 值的有效範圍 第 7.4 節中時間戳和 10msIncrement 欄位的更正和釐清 釐清第 3.3 節中的 Null 參數結構 釐清 6.3.4.2 節中 NoFatChain 字段的值意義 釐清 6.2.3 節中 DataLength 字段的值意義 第 3.1.13.2 節的 VolumeDirty 位元段釐清,並建議在第 8.1 節中撰寫順序 第 3.1.13.3 節中 MediaFailure 欄位的釐清 |
01-Oct-2008 | 基本規格的第三個版本,其中包含下列變更: 將 SHOULD、SHOULD 和 MAY 新增至現場說明 表 2 第 1.3 節中新增 UTC 定義 已修改的第 1.5 節,以確保與 TexFAT 規格檔一致。 釐清只有Microsoft可以定義第6.2節中目錄專案配置的限制 已新增釐清如果 DataLength 為零,且 NoFatChain 設定為 Section 6.3.5 和 Section 6.4.3,則 FirstCluster Field 應為零 釐清第 7.4 節中有效檔案目錄專案的需求 已將唯一檔案和目錄名稱的需求新增至 Section 7.7 已將 ASCII 的實作注意事項新增至第 7.7.3 節結尾 |
01-Jan-2009 | 基本規格的第四版,其中包含下列變更: 已移除 Windows CE 存取控制項目的參考 已將厘清新增至第 7.2.5.1 節,以明確要求完整案例數據表 |
02-Sep-2009 | 基本規格的第五個版本,其中包含下列變更: 檔案格式變更以允許更好的 PDF 轉換 |
2010年2月24日 | 第六版基本規格,其中包含下列變更: 修正不正確的語句:「如果 DataLength 為零,且已設定 NoFatChain,則 FirstCluster 字段應為零」,第 6.3.5 節和第 6.4.3 節為「如果 NoFatChain 位為 1,則 FirstCluster 必須指向叢集堆積中的有效叢集」,以釐清如果已設定 NoFatChain 位,則必須有有效的配置。 已新增「如果 NoFatChain 位為 1,DataLength 不得為零。 如果 FirstCluster 字段為零,則 DataLength 也必須是零“至 Section 6.3.6 和 Section 6.4.4,以釐清 NoFatChain 位設定時必須有有效的配置。 已將著作權聲明更新為 2010 年 |
26-Aug-2019 | 基本規格的第七版,其中包含下列變更: 已更新與規格相關的法律條款,包括: 拿掉Microsoft機密通知 拿掉Microsoft公司技術檔許可協定一節 已將著作權聲明更新為 2019 年 |