exFAT ファイル システムの仕様
1 Introduction (はじめに)
exFAT ファイル システムは、ファイル システムの FAT ファミリの FAT32 の後継システムです。 この仕様では、exFAT ファイル システムについて説明し、exFAT ファイル システムを実装するために必要なすべての情報を提供します。
1.1 設計目標
exFAT ファイル システムには、3 つの中心的な設計目標があります (以下の一覧を参照)。
FAT ベースのファイル システムのシンプルさを維持します。
FAT ベースのファイル システムの 2 つの強みは、相対的なシンプルさと実装の容易さです。 前任者の精神の中で、実装者はexFATを比較的シンプルで簡単に実装する必要があります。
非常に大きなファイルとストレージ デバイスを有効にします。
exFAT ファイル システムでは、64 ビットを使用してファイル サイズが記述されるため、非常に大きなファイルに依存するアプリケーションが可能になります。 exFAT ファイル システムでは、32 MB のクラスターも使用でき、非常に大きなストレージ デバイスを効果的に実現できます。
将来のイノベーションのための拡張性を組み込みます。
exFAT ファイル システムは、その設計に拡張性を組み込み、ファイル システムがストレージのイノベーションと使用状況の変化に対応できるようにします。
1.2 特定の用語
この仕様のコンテキストでは、特定の用語 ( 表 1 を参照) は、exFAT ファイル システムの設計と実装に固有の意味を持ちます。
表 1 非常に具体的な意味を持つ用語の定義
用語 | 定義 |
---|---|
Shall | この仕様では、"shall" という用語を使用して、必須の動作を記述します。 |
推奨 | この仕様では、"should" という用語を使用して、強く推奨される動作を記述しますが、必須ではありません。 |
May | この仕様では、"may" という用語を使用して、省略可能な動作を記述します。 |
Mandatory | この用語は、実装が変更し、この仕様で説明されているように解釈するフィールドまたは構造体を記述します。 |
オプション | この用語は、実装でサポートされるフィールドまたは構造体を表します。 実装で特定の省略可能なフィールドまたは構造体がサポートされている場合は、この仕様で説明されているように、フィールドまたは構造体を変更し、解釈する必要があります。 |
未定義。 | この用語は、実装が必要に応じて変更する可能性があるフィールドまたは構造体の内容 (つまり、周囲のフィールドまたは構造体を設定する場合はゼロにクリア) を記述し、特定の意味を保持するように解釈しません。 |
予約されています。 | この用語では、実装するフィールドまたは構造体の内容について説明します。
|
1.3 一般的な頭字語の全文
この仕様では、パーソナル コンピューター業界で一般的に使用される頭字語を使用します ( 表 2 を参照)。
表 2 一般的な頭字語の全文
頭字語 | [フルテキスト] |
---|---|
ASCII | 米国標準コード情報交換 |
BIOS | 基本的な入力出力システム |
CPU | 中央処理装置 |
exFAT | 拡張可能なファイル割り当てテーブル |
FAT | ファイルの割り当てテーブル |
FAT12 | ファイル割り当てテーブル、12 ビット クラスター インデックス |
FAT16 | ファイル割り当てテーブル、16 ビット クラスター インデックス |
FAT32 | ファイル割り当てテーブル、32 ビット クラスター インデックス |
GPT | GUID パーティション テーブル |
GUID | グローバル一意識別子 ( セクション 10.1 を参照) |
INT | 割り込み |
MBR | マスター ブート レコード |
texFAT | トランザクション セーフな exFAT |
UTC | 協定世界時 |
1.4 既定のフィールドと構造体の修飾子
この仕様のフィールドと構造体には、仕様に特に注意がない限り、次の修飾子があります (以下の一覧を参照)。
符号なし
10 進表記を使用して値を記述します。特に特に記載されていません。この仕様では、修正後の文字 "h" を使用して 16 進数を示し、GUID を中かっこで囲みます
リトル エンディアン形式
文字列に null 終端文字は必要ありません
1.5 Windows CEと TexFAT
TexFAT は、基本ファイル システムの上にトランザクション セーフな操作セマンティクスを追加する exFAT の拡張機能です。 TexFAT は、Windows CEによって使用されます。 TexFAT では、トランザクションで使用するために 2 つの FAT と割り当てビットマップを使用する必要があります。 また、パディング記述子やセキュリティ記述子など、いくつかの追加の構造体も定義します。
2 ボリューム構造
ボリュームとは、ユーザー データを格納および取得するために必要なすべてのファイル システム構造とデータ領域のセットです。 すべての exFAT ボリュームには、4 つのリージョンが含まれています ( 表 3 を参照)。
表 3 ボリューム構造
サブリージョン名 | Offset (セクター) |
[サイズ] (セクター) |
コメント |
---|---|---|---|
メイン ブートリージョン | |||
メイン ブート セクター | 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 フィールドが含まれています。 |
2 番目の FAT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | このサブリージョンは必須であり、 セクション 4.1 ではその内容が定義されます (存在する場合)。 注: Main ブート セクターとバックアップ ブート セクターには、どちらも FatOffset、FatLength、および NumberOfFats フィールドが含まれています。 NumberOfFats フィールドは、値 1 と 2 のみを保持できます。 |
データ領域 | |||
クラスター ヒープの配置 | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | このサブリージョンは必須であり、その内容 (存在する場合) は未定義です。 注: Main ブート セクターとバックアップ ブート セクターには、どちらも FatOffset、FatLength、NumberOfFats、ClusterHeapOffset フィールドが含まれています。 NumberOfFats フィールドの有効な値は 1 と 2 です。 |
クラスター ヒープ | ClusterHeapOffset | ClusterCount * 2SectorsPerClusterShift | このサブリージョンは必須であり、 セクション 5.1 ではその内容が定義されています。 注: Main ブート セクターとバックアップ ブート セクターには、どちらも ClusterHeapOffset、ClusterCount、および SectorsPerClusterShift フィールドが含まれています。 |
余分な領域 | ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift) | このサブリージョンは必須であり、その内容 (存在する場合) は未定義です。 注: メイン ブート セクターとバックアップ ブート セクターには、どちらも ClusterHeapOffset、ClusterCount、SectorsPerClusterShift、VolumeLength フィールドが含まれています。 |
3 メインブートリージョンとバックアップブートリージョン
Main Boot リージョンには、次を実行するための実装を有効にするために必要なすべてのブートストラップ命令、情報の識別、およびファイル システム パラメーターが用意されています。
exFAT ボリュームからコンピューター システムをブート ストラップします。
ボリューム上のファイル システムを exFAT として識別します。
exFAT ファイル システム構造の場所を検出します。
バックアップ ブート リージョンは、メイン ブート リージョンのバックアップです。 これは、メイン ブート 領域が不整合な状態にある場合の exFAT ボリュームの回復を支援します。 ブートストラップの手順の更新など、まれな状況を除き、実装ではバックアップ ブート リージョンの内容を変更しないでください。
3.1 メインおよびバックアップブートセクターサブリージョン
メイン ブート セクターには、exFAT ボリュームからのブート ストラップ用のコードと、ボリューム構造を記述する基本的な exFAT パラメーターが含 まれています (表 4 を参照)。 BIOS、MBR、またはその他のブートストラップエージェントは、このセクターを検査し、そこに含まれるブートストラップ命令を読み込んで実行することができます。
バックアップ ブート セクターはメイン ブート セクターのバックアップであり、同じ構造です ( 表 4 を参照)。 バックアップ ブート セクターは、復旧操作を支援する場合があります。ただし、実装では、VolumeFlags フィールドと PercentInUse フィールドの内容が古いものとして扱われます。
メイン ブート セクターまたはバックアップ ブート セクターのコンテンツを使用する前に、実装では、それぞれのブート チェックサムを検証し、すべてのフィールドが有効な値の範囲内であることを確認することで、その内容を確認する必要があります。
初期フォーマット操作ではメイン ブート セクターとバックアップ ブート セクターの両方の内容が初期化されますが、実装では、必要に応じてこれらのセクターを更新する (また、それぞれのブート チェックサムも更新する) 場合があります。 ただし、実装では、それぞれのブート チェックサムを更新せずに VolumeFlags フィールドまたは PercentInUse フィールドを更新できます (チェックサムではこれら 2 つのフィールドは特に除外されます)。
表 4 メインとバックアップのブート セクターの構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 | このフィールドは必須であり、その内容は予約されています。 |
ブートコード | 120 | 390 | このフィールドは必須であり、 セクション 3.1.19 ではその内容を定義します。 |
BootSignature | 510 | 2 | このフィールドは必須であり、 セクション 3.1.20 ではその内容を定義します。 |
ExcessSpace | 512 | 2BytesPerSectorShift – 512 | このフィールドは必須であり、その内容 (存在する場合) は未定義です。 注: メインブートセクターとバックアップブートセクターの両方に BytesPerSectorShift フィールドが含まれています。 |
3.1.1 JumpBoot フィールド
JumpBoot フィールドには、パーソナル コンピューターで一般的な CPU のジャンプ命令が含まれている必要があります。これを実行すると、ブート コード フィールドでブートストラップ命令を実行するために CPU が "ジャンプ" されます。
このフィールドの有効な値は、EBh 76h 90h です (下位バイトから高位バイトの順)。
3.1.2 FileSystemName フィールド
FileSystemName フィールドには、ボリューム上のファイル システムの名前が含まれている必要があります。
このフィールドの有効な値は、ASCII 文字の "EXFAT" で、末尾に 3 つの空白が含まれます。
3.1.3 MustBeZero フィールド
MustBeZero フィールドは、パックされた BIOS パラメーター ブロックが FAT12/16/32 ボリュームで消費するバイト範囲に直接対応する必要があります。
このフィールドの有効な値は 0 です。これは、FAT12/16/32 実装が誤って exFAT ボリュームをマウントするのを防ぐのに役立ちます。
3.1.4 PartitionOffset フィールド
PartitionOffset フィールドは、指定された exFAT ボリュームをホストするパーティションのメディア相対セクター オフセットを記述する必要があります。 このフィールドは、パーソナル コンピューターで拡張 INT 13h を使用してボリュームからのブートストラップを支援します。
このフィールドに指定できる値はすべて有効です。ただし、値 0 は実装がこのフィールドを無視する必要があることを示します。
3.1.5 VolumeLength フィールド
VolumeLength フィールドは、セクター内の指定された exFAT ボリュームのサイズを記述する必要があります。
このフィールドの有効な値の範囲は次のようになります。
最小ボリュームが 1 MB 以下であることを保証する少なくとも2 20/ 2BytesPerSectorShift
最大 264 - 1、このフィールドが記述できる最大値。
ただし、余分な領域のサブ領域のサイズが 0 の場合、このフィールドの最大値は ClusterHeapOffset + (232 - 11) * 2SectorsPerClusterShift です。
3.1.6 FatOffset フィールド
FatOffset フィールドは、最初の FAT のボリューム相対セクター オフセットを記述する必要があります。 このフィールドを使用すると、最初の FAT を基になるストレージ メディアの特性に合わせて実装できます。
このフィールドの有効な値の範囲は次のようになります。
メイン ブートリージョンとバックアップ ブート リージョンが消費するセクターを占める少なくとも 24 個
ClusterHeapOffset - (FatLength * NumberOfFats) は、クラスター ヒープが消費するセクターを考慮します。
3.1.7 FatLength フィールド
FatLength フィールドは、各 FAT テーブルの長さをセクター単位で記述する必要があります (ボリュームには最大 2 つの FAT が含まれる場合があります)。
このフィールドの有効な値の範囲は次のようになります。
少なくとも (ClusterCount + 2) *2 2/2BytesPerSectorShiftが最も近い整数に切り上げられ、各 FAT にクラスター ヒープ内のすべてのクラスターを記述するための十分な領域が確保されます
最大で (ClusterHeapOffset - FatOffset) / NumberOfFats は最も近い整数に切り捨て、クラスター ヒープの前に FAT が存在することを保証します
このフィールドは、第2の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 フィールドを使用)。 この仕様では、クラスター ヒープ内の 2 つ以上の 24 ~ 2 個のクラスターを推奨しています。 ただし、実装では、クラスター ヒープ内の最大 2 つの32 ~ 11 個のクラスターを持つボリュームを処理できる必要があります。
3.1.10 FirstClusterOfRootDirectory フィールド
FirstClusterOfRootDirectory フィールドには、ルート ディレクトリの最初のクラスターのクラスター インデックスが含まれている必要があります。 実装では、ルート ディレクトリの最初のクラスターを、割り当てビットマップとアップケース テーブルが使用するクラスターの後の最初の非不良クラスターに配置するようにあらゆる努力を行う必要があります。
このフィールドの有効な値の範囲は次のようになります。
少なくとも 2、クラスター ヒープ内の最初のクラスターのインデックス
最大 ClusterCount + 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 を参照)。
それぞれの Main Boot または Backup Boot リージョンのチェックサムを計算する場合、実装にはこのフィールドは含まれません。 バックアップ ブート セクターを参照する場合、実装では、このフィールドを古いフィールドとして扱う必要があります。
表 5 VolumeFlags フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
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 は、2 番目の FAT と 2 番目の割り当てビットマップがアクティブであり、NumberOfFats フィールドに値 2 が含まれている場合にのみ可能であることを意味します。
実装では、非アクティブな FAT と割り当てビットマップは古いと見なす必要があります。 アクティブな FAT ビットマップと割り当てビットマップを切り替えるのは、TexFAT 対応の実装のみです ( セクション 7.1 を参照)。
3.1.13.2 VolumeDirty フィールド
VolumeDirty フィールドでは、ボリュームがダーティかどうかを次のように記述する必要があります。
0 は、ボリュームが一貫性のある状態である可能性を意味します。
1 は、ボリュームが一貫性のない状態である可能性を意味します
実装では、解決されないファイル システム メタデータの不整合が発生した場合に、このフィールドの値を 1 に設定する必要があります。 ボリュームのマウント時にこのフィールドの値が 1 の場合、ファイル システムメタデータの不整合を解決する実装のみが、このフィールドの値を 0 にクリアできます。 このような実装では、ファイル システムが一貫した状態であることを確認した後にのみ、このフィールドの値を 0 にクリアする必要があります。
ボリュームのマウント時にこのフィールドの値が 0 の場合、実装では、ファイル システム メタデータを更新する前にこのフィールドを 1 に設定し、その後、 セクション 8.1 で説明されている推奨される書き込み順序と同様に、このフィールドを 0 にクリアする必要があります。
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。クラスター サイズは 32 MB に評価されます
3.1.16 NumberOfFats フィールド
NumberOfFats フィールドには、ボリュームに含まれる FAT と割り当てビットマップの数を記述する必要があります。
このフィールドの有効な値の範囲は次のようになります。
1:ボリュームに最初の FAT と最初の割り当てビットマップのみが含まれていることを示します
2 は、ボリュームに最初の FAT、2 番目の FAT、最初の割り当てビットマップ、および第 2 の割り当てビットマップが含まれていることを示します。この値は TexFAT ボリュームでのみ有効です
3.1.17 DriveSelect フィールド
DriveSelect フィールドには、拡張 INT 13h ドライブ番号が含まれている必要があります。これは、パーソナル コンピューターで拡張 INT 13h を使用して、このボリュームからのブートストラップを支援します。
このフィールドに使用できる値はすべて有効です。 以前の FAT ベースのファイル システムの同様のフィールドには、多くの場合、値 80h が含まれていました。
3.1.18 PercentInUse フィールド
PercentInUse フィールドには、割り当てられているクラスター ヒープ内のクラスターの割合を記述する必要があります。
このフィールドの有効な値の範囲は次のようになります。
0 から 100 の範囲 (クラスター ヒープ内の割り当てられたクラスターの割合) は、最も近い整数に切り捨てられます
クラスター ヒープ内の割り当てられたクラスターの割合を示す FFh が正確に使用できない
実装では、クラスター ヒープ内のクラスターの割り当ての変更を反映するように、このフィールドの値を変更するか、FFh に変更する必要があります。
それぞれの Main Boot または Backup Boot リージョンのチェックサムを計算する場合、実装にはこのフィールドは含まれません。 バックアップ ブート セクターを参照する場合、実装では、このフィールドを古いフィールドとして扱う必要があります。
3.1.19 BootCode フィールド
BootCode フィールドには、ブートストラップ命令が含まれている必要があります。 実装では、コンピューター システムのブート ストラップに必要な CPU 命令をこのフィールドに設定できます。 ブートストラップ命令を提供しない実装では、フォーマット操作の一環として、このフィールドの各バイトを F4h (パーソナル コンピューターで一般的な CPU の停止命令) に初期化する必要があります。
3.1.20 BootSignature フィールド
BootSignature フィールドは、特定のセクターの意図がブート セクターであるかどうかを記述する必要があります。
このフィールドの有効な値は AA55h です。 このフィールドの他の値は、それぞれのブート セクターを無効にします。 実装では、それぞれのブート セクター内の他のフィールドに応じて、前にこのフィールドの内容を確認する必要があります。
メインおよびバックアップの拡張ブートセクターサブリージョン
メイン拡張ブート セクターの各セクターは同じ構造を持ちます。ただし、各セクターは個別のブート・ストラップ命令を保持できます (表 6 を参照)。 メイン ブート セクターのブートストラップ命令、代替 BIOS 実装、埋め込みシステムのファームウェアなどのブートストラップ エージェントは、これらのセクターを読み込み、含まれている命令を実行することがあります。
バックアップ拡張ブート セクターは、メイン拡張ブート セクターのバックアップであり、同じ構造です ( 表 6 を参照)。
Main または Backup Extended Boot Sector の命令を実行する前に、実装では、各セクターの ExtendedBootSignature フィールドに所定の値が含まれていることを確認して、その内容を確認する必要があります。
初期フォーマット操作では、Main と Backup の両方の拡張ブート セクターの内容が初期化されますが、実装では、必要に応じてこれらのセクターを更新 (およびそれぞれのブート チェックサムも更新する必要があります) 可能性があります。
表 6 拡張ブート セクター構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | このフィールドは必須であり、 セクション 3.2.1 ではその内容が定義されます。 注: Main ブート セクターとバックアップ ブート セクターの両方に BytesPerSectorShift フィールドが含まれています。 |
ExtendedBootSignature | 2BytesPerSectorShift – 4 | 4 | このフィールドは必須であり、 セクション3.2.2 はその内容を定義します。 注: Main ブート セクターとバックアップ ブート セクターの両方に BytesPerSectorShift フィールドが含まれています。 |
3.2.1 ExtendedBootCode フィールド
ExtendedBootCode フィールドには、ブート・ストラップ命令が含まれている必要があります。 実装では、コンピューター システムのブート ストラップに必要な CPU 命令をこのフィールドに設定できます。 ブートストラップ命令を提供しない実装では、フォーマット操作の一環として、このフィールドの各バイトを 00h に初期化する必要があります。
3.2.2 ExtendedBootSignature フィールド
ExtendedBootSignature フィールドは、特定のセクターの意図が拡張ブート セクターであるかどうかを記述する必要があります。
このフィールドの有効な値は AA550000h です。 このフィールドのその他の値は、それぞれのメイン ブート セクターまたはバックアップ拡張ブート セクターを無効にします。 実装では、それぞれの拡張ブート セクター内の他のフィールドに応じて、前にこのフィールドの内容を確認する必要があります。
主要およびバックアップのOEMパラメータサブリージョン
メイン OEM パラメーター サブリージョンには、製造元固有の情報を含む可能性がある 10 個のパラメーター構造が含まれています ( 表 7 を参照)。 10 個の各パラメーター構造は、ジェネリック パラメーター テンプレートから派生します ( セクション 3.3.2 を参照)。 製造元は、ジェネリック パラメーター テンプレートから独自のカスタム パラメーター構造を派生させる場合があります。 この仕様自体では、Null パラメーター ( セクション 3.3.3 を参照) と Flash パラメーター ( セクション 3.3.4 を参照) の 2 つのパラメーター構造が定義されています。
バックアップ OEM パラメーターは、メイン OEM パラメーターのバックアップであり、同じ構造を持ちます ( 表 7 を参照)。
Main または Backup OEM パラメーターの内容を使用する前に、実装はそれぞれのブート チェックサムを検証して、その内容を検証する必要があります。
製造元は、Main および Backup OEM パラメーターに独自のカスタム パラメーター構造 (存在する場合) とその他のパラメーター構造を設定する必要があります。 後続のフォーマット操作では、メインおよびバックアップ OEM パラメーターの内容を保持する必要があります。
実装では、必要に応じて Main および Backup OEM パラメーターを更新できます (また、それぞれのブート チェックサムも更新する必要があります)。
表 7 OEM パラメーターの構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
Parameters[0] | 0 | 48 | このフィールドは必須であり、 セクション3.3.1 はその内容を定義します。 |
. . . |
. . . |
. . . |
. . . |
Parameters[9] | 432 | 48 | このフィールドは必須であり、 セクション 3.3.1 では その内容を定義します。 |
予約済み | 480 | 2BytesPerSectorShift – 480 | このフィールドは必須であり、その内容は予約されています。 注: メインブートセクターとバックアップブートセクターの両方に BytesPerSectorShift フィールドが含まれています。 |
3.3.1 Parameters[0] ...Parameters[9]
この配列の各 Parameters フィールドには、ジェネリック パラメーター テンプレートから派生するパラメーター構造が含まれています ( セクション 3.3.2 を参照)。 使用されていない Parameters フィールドは、Null Parameters 構造体を含むものとして記述する必要があります ( セクション 3.3.3 を参照)。
3.3.2 ジェネリック パラメーター テンプレート
ジェネリック パラメーター テンプレートは、パラメーター構造の基本定義を提供します ( 表 8 を参照)。 すべてのパラメーター構造は、このテンプレートから派生します。 この汎用パラメーター テンプレートのサポートは必須です。
表 8 ジェネリック パラメーター テンプレート
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
ParametersGuid | 0 | 16 | このフィールドは必須であり、 セクション 3.3.2.1 ではその内容を定義します。 |
CustomDefined | 16 | 32 | このフィールドは必須であり、このテンプレートから派生する構造体は、その内容を定義します。 |
3.3.2.1 ParametersGuid フィールド
ParametersGuid フィールドは、指定されたパラメーター構造の残りの部分のレイアウトを決定する GUID を記述する必要があります。
このフィールドに指定できる値はすべて有効です。ただし、製造元は、GuidGen.exeなどの GUID 生成ツールを使用して、このテンプレートからカスタム パラメーター構造を派生させるときに GUID を選択する必要があります。
3.3.3 Null パラメーター
Null Parameters 構造体は、ジェネリック パラメーター テンプレート ( セクション 3.3.2 を参照) から派生し、未使用の Parameters フィールドを記述する必要があります ( 表 9 を参照)。 OEM パラメーター構造を作成または更新する場合、実装では、使用されていないパラメーター フィールドに Null パラメーター構造体を設定する必要があります。 また、OEM パラメーター構造を作成または更新する場合、実装では、配列の末尾に Null パラメーター構造を統合する必要があります。これにより、他のすべての Parameters 構造体は OEM Parameters 構造体の先頭に残ります。
Null パラメーター構造体のサポートは必須です。
表 9 Null パラメーター構造体
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 Parameter 構造体は、汎用パラメーター テンプレート ( セクション 3.3.2 を参照) から派生し、フラッシュ メディアのパラメーターを含みます ( 表 10 を参照)。 フラッシュ ベースのストレージ デバイスの製造元は、パラメーター フィールド (好ましくは Parameters[0] フィールド) にこのパラメーター構造を設定できます。 実装では、Flash Parameters 構造体の情報を使用して、読み取り/書き込み中のアクセス操作を最適化し、メディアのフォーマットを制限するファイル システム構造のアラインメントを行う場合があります。
Flash Parameters 構造体のサポートは省略可能です。
表 10 フラッシュ パラメータの構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 パラメーター フィールドで使用できるすべての値が有効です。 ただし、値 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 SpareSectors フィールド
SpareSectors フィールドは、フラッシュ メディアが内部のスペーリング操作で使用できるセクターの数を記述する必要があります。
3.3.4.5 RandomAccessTime フィールド
RandomAccessTime フィールドは、フラッシュ メディアの平均ランダム アクセス時間をナノ秒単位で記述する必要があります。
3.3.4.6 ProgrammingTime フィールド
ProgrammingTime フィールドでは、フラッシュ メディアの平均プログラミング時間をナノ秒単位で記述する必要があります。
3.3.4.7 ReadCycle フィールド
ReadCycle フィールドでは、フラッシュ メディアの平均読み取りサイクル時間をナノ秒単位で記述する必要があります。
3.3.4.8 WriteCycle フィールド
WriteCycle フィールドでは、平均書き込みサイクル時間をナノ秒単位で記述する必要があります。
3.4 メインおよびバックアップブートチェックサムサブリージョン
メイン ブート チェックサムとバックアップ ブート チェックサムにはそれぞれ、それぞれのブート リージョン内の他のすべてのサブリージョンのコンテンツの 4 バイト チェックサムの繰り返しパターンが含まれています。 チェックサム計算には、それぞれのブート セクターに VolumeFlags フィールドと PercentInUse フィールドは含まれません ( 図 1 を参照)。 4 バイト チェックサムの繰り返しパターンは、サブリージョンの先頭から末尾まで、それぞれのブート チェックサム サブリージョンを満たします。
Main または Backup Boot リージョンのいずれかの他のサブリージョンのコンテンツを使用する前に、実装では、それぞれのブート チェックサムを検証して、その内容を確認する必要があります。
初期フォーマット操作では、メイン ブート チェックサムとバックアップ ブート チェックサムの両方に繰り返しチェックサム パターンが設定されますが、実装では、それぞれのブート リージョン内の他のセクターの内容が変更されると、これらのセクターを更新する必要があります。
図 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) 領域には、1 つは最初の FAT サブ領域に、もう 1 つは第 2 FAT サブリージョンの最大 2 つの FAT が含まれる場合があります。 NumberOfFats フィールドには、このリージョンに含まれる FAT の数が記述されています。 NumberOfFats フィールドの有効な値は 1 と 2 です。 したがって、最初の FAT サブ領域には常に FAT が含まれます。 NumberOfFats フィールドが 2 の場合、2 番目の FAT サブ領域にも FAT が含まれます。
VolumeFlags フィールドの ActiveFat フィールドには、アクティブな FAT が記述されています。 メイン ブート セクターの VolumeFlags フィールドのみが最新です。 実装では、アクティブでない FAT を古い FAT として扱う必要があります。 非アクティブな FAT の使用と、FAT 間の切り替えは実装固有です。
4.1 第 1 および第 2 の FAT サブリージョン
FAT では、クラスター ヒープ内のクラスター チェーンについて説明する必要があります ( 表 11 を参照)。 クラスター チェーンは、ファイル、ディレクトリ、およびその他のファイル システム構造の内容を記録するための領域を提供する一連のクラスターです。 FAT は、クラスター チェーンをクラスター インデックスの一覧として表します。 最初の 2 つのエントリを除き、FAT 内のすべてのエントリは 1 つのクラスターを表します。
表 11 ファイル割り当てテーブルの構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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] フィールドは、最初のバイト (最下位バイト) のメディアの種類を記述し、残りの 3 バイトに FFh を含む必要があります。
メディアの種類 (最初のバイト) は F8h にする必要があります。
4.1.2 FatEntry[1] フィールド
FatEntry[1] フィールドは、履歴の優先順位によってのみ存在し、関心のあるものは何も記述しません。
このフィールドの有効な値は FFFFFFFFh です。 実装では、このフィールドを所定の値に初期化するものとし、このフィールドを任意の目的で使用しないでください。 実装では、このフィールドを解釈しないでください。また、周囲のフィールドを変更する操作全体でその内容を保持する必要があります。
4.1.3 FatEntry[2] ...FatEntry[ClusterCount+1] フィールド
この配列内の各 FatEntry フィールドは、クラスター ヒープ内のクラスターを表す必要があります。 FatEntry[2] はクラスター ヒープ内の最初のクラスターを表し、[ClusterCount+1] はクラスター ヒープ内の最後のクラスターを表します。
これらのフィールドの有効な値の範囲は次のようになります。
2 と ClusterCount + 1 の間(包括的に、指定されたクラスター チェーン内の次の FatEntry を指します)。指定された FatEntry は、指定されたクラスター チェーン内の FatEntry の前に存在する FatEntry を指すものではありません。
指定された FatEntry の対応するクラスターを "bad" としてマークする FFFFFFF7h とまったく同じ
正確に FFFFFFFFh。指定された FatEntry の対応するクラスターをクラスター チェーンの最後のクラスターとしてマークします。これは、特定のクラスター チェーンの最後の FatEntry の唯一の有効な値です
5 データ領域
データ領域にはクラスター ヒープが含まれており、ファイル システムの構造、ディレクトリ、ファイルの管理領域を提供します。
5.1 クラスター ヒープ サブリージョン
クラスター ヒープの構造は非常に単純です ( 表 12 を参照)。SectorsPerClusterShift フィールドが定義するように、連続する各セクターでは 1 つのクラスターが記述されます。 重要なのは、クラスター ヒープの最初のクラスターにはインデックス 2 があり、FatEntry[2] のインデックスに直接対応します。
exFAT ボリュームでは、割り当てビットマップ ( セクション 7.1.5 を参照) は、すべてのクラスターの割り当て状態のレコードを保持します。 これは、FAT がクラスター ヒープ内のすべてのクラスターの割り当て状態の記録を保持していた exFAT の先行タスク (FAT12、FAT16、FAT32) とは大きく異なります。
表 12 クラスター ヒープ構造
フィールド名 | Offset (セクター) |
[サイズ] (セクター) |
コメント |
---|---|---|---|
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 Cluster[2] ...Cluster[ClusterCount+1] フィールド
この配列の各クラスター フィールドは連続した一連のセクターであり、そのサイズは SectorsPerClusterShift フィールドによって定義されます。
6 ディレクトリ構造
exFAT ファイル システムでは、ディレクトリ ツリーアプローチを使用して、クラスター ヒープに存在するファイル システムの構造とファイルを管理します。 ディレクトリには、ディレクトリ ツリー内の親と子の間に一対多のリレーションシップがあります。
FirstClusterOfRootDirectory フィールドが参照するディレクトリは、ディレクトリ ツリーのルートです。 他のすべてのディレクトリは、1 つのリンクされた方法でルート ディレクトリから派生します。
各ディレクトリは、一連のディレクトリ エントリで構成されます ( 表 13 を参照)。
1 つ以上のディレクトリ エントリが、ファイル システム構造、サブディレクトリ、ファイルなど、関心のあるものを記述するディレクトリ エントリ セットに結合されます。
表 13 ディレクトリ構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 フィールドは、汎用 DirectoryEntry テンプレートから派生します ( セクション 6.2 を参照)。
6.2 汎用 DirectoryEntry テンプレート
汎用 DirectoryEntry テンプレートは、ディレクトリ エントリの基本定義を提供します ( 表 14 を参照)。 すべてのディレクトリ エントリ構造はこのテンプレートから派生し、Microsoft が定義したディレクトリ エントリ構造のみが有効です (exFAT には、 セクション 7.8 および セクション 7.9 で定義されている場合を除き、製造元が定義したディレクトリ エントリ構造のプロビジョニングはありません)。 汎用 DirectoryEntry テンプレートを解釈する機能は必須です。
表 14 汎用 DirectoryEntry テンプレート
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 6.2.1 ではその内容を定義します。 |
CustomDefined | 1 | 19 | このフィールドは必須であり、このテンプレートから派生する構造体は、その内容を定義できます。 |
FirstCluster | 20 | 4 | このフィールドは必須であり、 セクション 6.2.2 ではその内容を定義します。 |
DataLength | 24 | 8 | このフィールドは必須であり、 セクション 6.2.3 ではその内容を定義します。 |
6.2.1 EntryType フィールド
EntryType フィールドには、フィールドの値が定義する 3 つの使用法モードがあります (下記の一覧を参照)。
00h。ディレクトリの末尾マーカーであり、次の条件が適用されます。
指定された DirectoryEntry 内の他のすべてのフィールドは、実際には予約されています
指定されたディレクトリ内の後続のすべてのディレクトリ エントリも、ディレクトリの末尾マーカーです
ディレクトリの末尾マーカーは、ディレクトリ エントリ セットの外部でのみ有効です
実装では、必要に応じてディレクトリの末尾マーカーが上書きされる可能性があります
01h から 7Fh までの範囲で、未使用のディレクトリエントリ マーカーであり、次の条件が適用されます。
指定された DirectoryEntry 内の他のすべてのフィールドは、実際には未定義です
未使用のディレクトリ エントリは、ディレクトリ エントリ セットの外部でのみ有効です
実装では、必要に応じて未使用のディレクトリ エントリが上書きされる可能性があります
この値の範囲は、値 0 を含む InUse フィールド ( セクション 6.2.1.4 を参照) に対応します
81h から FFh までの範囲で、通常のディレクトリ エントリであり、次の条件が適用されます。
EntryType フィールドの内容 ( 表 15 を参照) によって、DirectoryEntry 構造体の残りの部分のレイアウトが決まります
この値の範囲と、この値の範囲のみが、ディレクトリ エントリ セット内で有効です
この値の範囲は、値 1 を含む InUse フィールド ( セクション 6.2.1.4 を参照) に直接対応します
InUse フィールドの変更 ( セクション 6.2.1.4 を参照) によってディレクトリの末尾マーカーが誤って発生するのを防ぐために、値 80h は無効です。
表 15 汎用 EntryType フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
TypeCode | 0 | 5 | このフィールドは必須であり、 セクション 6.2.1.1 ではその内容を定義します。 |
TypeImportance | 5 | 1 | このフィールドは必須であり、 セクション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 と セクション 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 を参照)
1 は、指定されたディレクトリ エントリがセカンダリであることを意味します ( セクション 6.4 を参照)
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 汎用プライマリ DirectoryEntry テンプレート
ディレクトリー項目セット内の最初のディレクトリー項目は、1 次ディレクトリー項目でなければなりません。 ディレクトリ エントリ セット内の後続のすべてのディレクトリ エントリ (存在する場合) は、セカンダリ ディレクトリ エントリである必要があります ( セクション 6.4 を参照)。
汎用プライマリ DirectoryEntry テンプレートを解釈する機能は必須です。
すべてのプライマリ ディレクトリ エントリ構造は、Generic Primary DirectoryEntry テンプレート ( 表 16 を参照) から派生します。これは Generic DirectoryEntry テンプレートから派生します ( セクション 6.2 を参照)。
表 16 汎用プライマリ DirectoryEntry テンプレート
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 フィールドは、汎用 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 汎用 GeneralPrimaryFlags フィールド構造体
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
AllocationPossible | 0 | 1 | このフィールドは必須であり、 セクション 6.3.4.1 ではその内容を定義します。 |
NoFatChain | 1 | 1 | このフィールドは必須であり、 セクション 6.3.4.2 ではその内容を定義します。 |
CustomDefined | 2 | 14 | このフィールドは必須であり、このテンプレートから派生する構造でこのフィールドを定義できます。 |
6.3.4.1 AllocationPossible フィールド
AllocationPossible フィールドは、指定されたディレクトリ エントリに対してクラスター ヒープ内の割り当てが可能かどうかを示す必要があります。
このフィールドの有効な値は次のようになります。
0 は、クラスターの関連付けられた割り当てが不可能であり、FirstCluster フィールドと DataLength フィールドが実際には未定義であることを意味します (このテンプレートから派生した構造体はこれらのフィールドを再定義する可能性があります)。
1 は、クラスターの関連付けられた割り当てが可能であり、FirstCluster フィールドと DataLength フィールドが定義されているとおりであることを意味します。
6.3.4.2 NoFatChain フィールド
NoFatChain フィールドは、アクティブな FAT が特定の割り当てのクラスター チェーンを記述しているかどうかを示す必要があります。
このフィールドの有効な値は次のようになります。
0 は、割り当てのクラスター チェーンに対応する FAT エントリが有効であり、実装がそれらを解釈することを意味します。AllocationPossible フィールドに値 0 が含まれている場合、または AllocationPossible フィールドに値 1 が含まれており、FirstCluster フィールドに値 0 が含まれている場合、このフィールドの有効な値は 0 のみです。
1 は、関連付けられた割り当てが 1 つの連続した一連のクラスターであることを意味します。クラスターの対応する FAT エントリは無効であり、実装ではそれらを解釈しません。実装では、関連する割り当てのサイズを計算するために次の式を使用できます。DataLength / (2SectorsPerClusterShift* 2BytesPerSectorShift) は、最も近い整数に切り上げられます
このテンプレートから派生した重要なプライマリ ディレクトリ エントリ構造が GeneralPrimaryFlags フィールドを再定義する場合、関連付けられている割り当てのクラスター チェーンに対応する FAT エントリが有効になります。
6.3.5 FirstCluster フィールド
FirstCluster フィールドは、汎用 DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.2.2 を参照)。
NoFatChain ビットが 1 の場合、FirstCluster はクラスター ヒープ内の有効なクラスターを指す必要があります。
このテンプレートから派生する重要なプライマリ ディレクトリ エントリ構造は、FirstCluster フィールドと DataLength フィールドを再定義できます。 このテンプレートから派生する他の構造体では、AllocationPossible フィールドに値 0 が含まれている場合にのみ、FirstCluster フィールドと DataLength フィールドを再定義できます。
6.3.6 DataLength フィールド
DataLength フィールドは、汎用 DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.2.3 を参照)。
NoFatChain ビットが 1 の場合、DataLength は 0 にすることはできません。 FirstCluster フィールドが 0 の場合、DataLength も 0 である必要があります。
このテンプレートから派生する重要なプライマリ ディレクトリ エントリ構造は、FirstCluster フィールドと DataLength フィールドを再定義できます。 このテンプレートから派生する他の構造体では、AllocationPossible フィールドに値 0 が含まれている場合にのみ、FirstCluster フィールドと DataLength フィールドを再定義できます。
6.4 汎用セカンダリ ディレクトリエントリ テンプレート
セカンダリ ディレクトリ エントリの中心的な目的は、ディレクトリ エントリ セットに関する追加情報を提供することです。 汎用セカンダリ DirectoryEntry テンプレートを解釈する機能は必須です。
重要なセカンダリ ディレクトリ エントリと無害なセカンダリ ディレクトリ エントリの両方の定義は、マイナー exFAT リビジョン番号に関連付けられます。 この仕様または後続の仕様で定義されている、重要または無害なセカンダリ ディレクトリ エントリのサポートは省略可能です。
すべてのセカンダリ ディレクトリ エントリ構造は、汎用セカンダリ DirectoryEntry テンプレート ( 表 18 を参照) から派生します。これは、汎用 DirectoryEntry テンプレートから派生します ( セクション 6.2 を参照)。
表 18 汎用セカンダリ DirectoryEntry テンプレート
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 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 フィールドは、汎用 DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.2.1 を参照)
6.4.1.1 TypeCode フィールド
TypeCode フィールドは、汎用 DirectoryEntry テンプレートで指定された定義に準拠している必要があります ( セクション 6.2.1.1 を参照)。
6.4.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用 DirectoryEntry テンプレートで指定された定義に準拠している必要があります ( セクション 6.2.1.2 を参照)。
6.4.1.2.1 重要なセカンダリ ディレクトリ エントリ
重要なセカンダリ ディレクトリ エントリには、含まれるディレクトリ エントリ セットの適切な管理に不可欠な情報が含まれています。 特定の重要なセカンダリ ディレクトリ エントリのサポートは省略可能ですが、認識されないクリティカル ディレクトリ エントリでは、ディレクトリ エントリ セット全体が認識されない (該当するディレクトリ エントリ テンプレートの定義を超えて) レンダリングされます。
ただし、ディレクトリ エントリ セットに、実装で認識されない重要なセカンダリ ディレクトリ エントリが少なくとも 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 ジェネリック GeneralSecondaryFlags フィールド構造体
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
AllocationPossible | 0 | 1 | このフィールドは必須であり、 セクション6.4.2.1 はその内容を定義します。 |
NoFatChain | 1 | 1 | このフィールドは必須であり、 セクション6.4.2.2 はその内容を定義します。 |
CustomDefined | 2 | 6 | このフィールドは必須であり、このテンプレートから派生する構造体はこのフィールドを定義できます。 |
6.4.2.1 AllocationPossible フィールド
AllocationPossible フィールドは、Generic Primary DirectoryEntry テンプレート内の同じ名前のフィールドと同じ定義を持つ必要があります ( セクション 6.3.4.1 を参照)。
6.4.2.2 NoFatChain フィールド
NoFatChain フィールドは、Generic Primary DirectoryEntry テンプレート内の同じ名前のフィールドと同じ定義を持つものとします ( セクション 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 は 0 にすることはできません。 FirstCluster フィールドが 0 の場合、DataLength も 0 である必要があります。
7 ディレクトリ エントリの定義
exFAT ファイル システムのリビジョン 1.00 では、次のディレクトリ エントリが定義されています。
重要なプライマリ
良性プライマリ
ボリューム GUID (セクション 7.5)
TexFAT パディング (セクション 7.10)
重要なセカンダリ
良性セカンダリ
7.1 割り当てビットマップディレクトリエントリ
exFAT ファイル システムでは、FAT ではクラスターの割り当て状態は記述されません。ではなく、割り当てビットマップが行います。 割り当てビットマップはクラスター ヒープに存在し ( セクション 7.1.5 を参照)、ルート ディレクトリに対応する重要なプライマリ ディレクトリ エントリがあります ( 表 20 を参照)。
NumberOfFats フィールドは、ルート ディレクトリ内の有効な割り当てビットマップ ディレクトリ エントリの数を決定します。 NumberOfFats フィールドに値 1 が含まれている場合、割り当てビットマップ ディレクトリ エントリの有効な数は 1 のみです。 さらに、1 つの割り当てビットマップ ディレクトリ エントリは、最初の割り当てビットマップを記述している場合にのみ有効です ( セクション 7.1.2.1 を参照)。 NumberOfFats フィールドに値 2 が含まれている場合、割り当てビットマップ ディレクトリ エントリの有効な数は 2 のみです。 また、2 つの割り当てビットマップ ディレクトリ エントリは、一方が最初の割り当てビットマップを記述し、もう一方が第 2 の割り当てビットマップを記述する場合にのみ有効です。
表 20 ビットマップディレクトリエントリ構造の割り当て
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1 を参照)。
7.1.1.1 TypeCode フィールド
TypeCode フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.1 を参照)。
割り当てビットマップ ディレクトリ エントリの場合、このフィールドの有効な値は 1 です。
7.1.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.2 を参照)。
割り当てビットマップ ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.1.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.3 を参照)。
7.1.1.4 InUse フィールド
InUse フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.4 を参照)。
7.1.2 BitmapFlags フィールド
BitmapFlags フィールドにはフラグが含まれています ( 表 21 を参照)。
表 21 BitmapFlags フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
BitmapIdentifier | 0 | 1 | このフィールドは必須であり、 セクション 7.1.2.1 ではその内容が定義されています。 |
予約済み | 1 | 7 | このフィールドは必須であり、その内容は予約されています。 |
7.1.2.1 BitmapIdentifier フィールド
BitmapIdentifier フィールドは、指定されたディレクトリ エントリが記述する割り当てビットマップを示す必要があります。 実装では、最初の割り当てビットマップを最初の FAT と組み合わせて使用し、2 番目の FAT と組み合わせて 2 番目の割り当てビットマップを使用する必要があります。 ActiveFat フィールドには、アクティブな FAT と割り当てビットマップが記述されています。
このフィールドの有効な値は次のようになります。
0 は、指定されたディレクトリ エントリが最初の割り当てビットマップを記述します。
1 は、指定されたディレクトリ エントリが 2 番目の割り当てビットマップを記述し、NumberOfFats に値 2 が含まれている場合にのみ可能であることを意味します。
7.1.3 FirstCluster フィールド
FirstCluster フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.5 を参照)。
このフィールドには、割り当てビットマップをホストする FAT が説明するように、クラスター チェーンの最初のクラスターのインデックスが含まれています。
7.1.4 DataLength フィールド
DataCluster フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.6 を参照)。
7.1.5 割り当てビットマップ
割り当てビットマップは、クラスター ヒープ内のクラスターの割り当て状態を記録します。 割り当てビットマップ内の各ビットは、対応するクラスターが割り当てに使用できるかどうかを示します。
割り当てビットマップは、最下位から最上位のインデックスまでのクラスターを表します ( 表 22 を参照)。 履歴上の理由から、最初のクラスターにはインデックス 2 があります。 注: ビットマップの最初のビットは、最初のバイトの最下位ビットです。
表 22 ビットマップの割り当て構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | このフィールドは必須であり、 セクション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] はクラスター ヒープ内の最初のクラスターを表し、[ClusterCount+1] はクラスター ヒープ内の最後のクラスターを表します。
これらのフィールドの有効な値は次のようになります。
割り当て可能な対応するクラスターを表す 0
1:対応するクラスターを割り当てに使用できないと記述します (クラスター割り当てで対応するクラスターが既に使用されているか、アクティブな FAT が対応するクラスターを不適切と記述している可能性があります)
7.2 アップケーステーブルディレクトリエントリ
Up-case Table では、小文字から大文字への変換が定義されています。 これは、Unicode 文字を使用するファイル名ディレクトリ エントリ (セクション 7.7 を参照) と exFAT ファイル システムで大文字と小文字が区別されず、大文字と小文字が保持されるために重要です。 Up-case テーブルはクラスター ヒープに存在し ( セクション 7.2.5 を参照)、ルート ディレクトリに対応する重要なプライマリ ディレクトリ エントリがあります ( 表 23 を参照)。 Up-case Table ディレクトリ エントリの有効な数は 1 です。
Up-case テーブルとファイル名の関係により、実装では、書式操作の結果を除き、アップケース テーブルを変更しないでください。
表 23 Up-case Table DirectoryEntry 構造体
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1 を参照)。
7.2.1.1 TypeCode フィールド
TypeCode フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.1 を参照)。
Up-case Table ディレクトリ エントリの場合、このフィールドの有効な値は 2 です。
7.2.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.2 を参照)。
Up-case Table ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.2.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.3 を参照)。
7.2.1.4 InUse フィールド
InUse フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.4 を参照)。
7.2.2 TableChecksum フィールド
TableChecksum フィールドには、Up-case テーブルのチェックサムが含まれています (FirstCluster フィールドと DataLength フィールドで説明されています)。 実装では、アップケース テーブルを使用する前に、このフィールドの内容が有効であることを確認する必要があります。
図 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 フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.5 を参照)。
このフィールドには、UP-case テーブルをホストする FAT が説明するように、クラスター チェーンの最初のクラスターのインデックスが含まれています。
7.2.4 DataLength フィールド
DataCluster フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.6 を参照)。
7.2.5 アップケーステーブル
アップケース テーブルは、一連の Unicode 文字マッピングです。 文字マッピングは 2 バイトのフィールドで構成され、アップケース テーブルのフィールドのインデックスは、アップケースの Unicode 文字を表し、2 バイトのフィールドはアップケース Unicode 文字を表します。
最初の 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 |
(注: ID 以外の大文字と小文字のマッピングを持つエントリは太字で表示されます)
Unicode 文字空間の大部分には大文字と小文字の概念がないため、ボリュームを書式設定すると、実装によって、ID マッピング圧縮を使用して圧縮形式のアップケース テーブルが生成される場合があります (つまり、"小文字" と "大文字" の文字は同等です)。 実装では、一連の ID マッピングを FFFFh 値に続けて ID マッピングの数と共に表すことによって、アップケース テーブルを圧縮します。
たとえば、実装は、最初の 100 (64h) 文字マッピングを表し、圧縮されたアップケース テーブルの次の 8 つのエントリを表します。
FFFFh, 0061h, 0041h, 0042h, 0043h
最初の 2 つのエントリは、最初の 97 (61h) 文字 (0000h から 0060h) に ID マッピングがあることを示します。 後続の文字 (0061h ~ 0063h) は、それぞれ 0041h ~ 0043h の文字にマップされます。
ボリュームの書式設定時に、圧縮された大文字と小文字を区別するテーブルを提供する機能は省略可能です。 ただし、圧縮されていないテーブルと圧縮されたアップケース テーブルの両方を解釈する機能は必須です。 TableChecksum フィールドの値は、ボリューム上にアップケース テーブルが存在する方法に常に準拠します。これは、圧縮形式または非圧縮形式のいずれかになります。
7.2.5.1 推奨されるアップケーステーブル
ボリュームをフォーマットする場合、実装では、推奨されるアップケース テーブルを圧縮形式で記録する必要があります ( 表 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 ボリューム ラベル DirectoryEntry 構造体
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1 を参照)。
7.3.1.1 TypeCode フィールド
TypeCode フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.1 を参照)。
ボリューム ラベル ディレクトリ エントリの場合、このフィールドの有効な値は 3 です。
7.3.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.2 を参照)。
ボリューム ラベル ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.3.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.3 を参照)。
7.3.1.4 InUse フィールド
InUse フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 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 ファイル ディレクトリエントリ
ファイル ディレクトリ エントリは、ファイルとディレクトリを記述します。 これらは重要なプライマリ ディレクトリ エントリであり、任意のディレクトリに 0 個以上のファイル ディレクトリ エントリを含めることができます ( 表 27 を参照)。 ファイル ディレクトリ エントリを有効にするには、1 つの Stream Extension ディレクトリ エントリと少なくとも 1 つのファイル名ディレクトリ エントリが、ファイル ディレクトリ エントリの直後に続く必要があります ( それぞれセクション 7.6 と セクション 7.7 を参照)。
表 27 File DirectoryEntry
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 a> はその内容を定義します。 |
LastModifiedTimestamp | 12 | 4 | このフィールドは必須であり、 セクション7.4.6 はその内容を定義します。 |
LastAccessedTimestamp | 16 | 4 | このフィールドは必須であり、 セクション7.4.7 はその内容を定義します。 |
Create10msIncrement | 20 | 1 | このフィールドは必須であり、 セクション7.4.5 a> はその内容を定義します。 |
LastModified10msIncrement | 21 | 1 | このフィールドは必須であり、 セクション7.4.6 はその内容を定義します。 |
CreateUtcOffset | 22 | 1 | このフィールドは必須であり、 セクション7.4.5 a> はその内容を定義します。 |
LastModifiedUtcOffset | 23 | 1 | このフィールドは必須であり、 セクション7.4.6 はその内容を定義します。 |
LastAccessedUtcOffset | 24 | 1 | このフィールドは必須であり、 セクション7.4.7 はその内容を定義します。 |
Reserved2 | 25 | 7 | このフィールドは必須であり、その内容は予約されています。 |
7.4.1 EntryType フィールド
EntryType フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1 を参照)。
7.4.1.1 TypeCode フィールド
TypeCode フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.1 を参照)。
ファイル ディレクトリ エントリの場合、このフィールドの有効な値は 5 です。
7.4.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.2 を参照)。
ファイル ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.4.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.3 を参照)。
7.4.1.4 InUse フィールド
InUse フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.4 を参照)。
7.4.2 SecondaryCount フィールド
SecondaryCount フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供されている定義に準拠する必要があります ( セクション 6.3.2 を参照)。
7.4.3 SetChecksum フィールド
SetChecksum フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.3 を参照)。
7.4.4 FileAttributes フィールド
FileAttributes フィールドにはフラグが含まれています ( 表 28 を参照)。
表 28 FileAttributes フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
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 タイムスタンプフィールド
タイムスタンプ フィールドでは、ローカルの日付と時刻の両方が 2 秒の解像度まで記述されます ( 表 29 を参照)。
表 29 タイムスタンプ フィールドの構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
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 はその内容を定義します。 |
Month | 21 | 4 | このフィールドは必須であり、 セクション7.4.8.5 はその内容を定義します。 |
年 | 25 | 7 | このフィールドは必須であり、 セクション7.4.8.6 はその内容を定義します。 |
7.4.8.1 DoubleSeconds フィールド
DoubleSeconds フィールドは、Timestamp フィールドの秒部分を 2 秒の倍数で記述する必要があります。
このフィールドの有効な値の範囲は次のようになります。
0 秒を表す 0
58 秒を表す 29
7.4.8.2 分フィールド
[分] フィールドには、Timestamp フィールドの分部分を記述する必要があります。
このフィールドの有効な値の範囲は次のようになります。
0(0 分を表す)
59(59 分を表す)
7.4.8.3 時間フィールド
[時間] フィールドには、Timestamp フィールドの時間部分を記述する必要があります。
このフィールドの有効な値の範囲は次のようになります。
0(00:00 時間を表す)
23(23:00 時間を表す)
7.4.8.4 日フィールド
[日] フィールドには、タイムスタンプ フィールドの日付部分を記述する必要があります。
このフィールドの有効な値の範囲は次のようになります。
1。指定された月の最初の日です。
指定された月の最後の日 (指定された月は有効な日数を定義します)
7.4.8.5 Month フィールド
[月] フィールドには、Timestamp フィールドの月の部分を記述する必要があります。
このフィールドの有効な値の範囲は次のようになります。
少なくとも 1。1 月を表します。
12 月を表す最大 12
7.4.8.6 年フィールド
[年] フィールドは、1980 年を基準にしてタイムスタンプ フィールドの年部分を記述する必要があります。 このフィールドは、値 0 の年 1980、値 127 の年 2107 を表します。
このフィールドに使用できる値はすべて有効です。
7.4.9 10msIncrement フィールド
10msIncrement フィールドは、対応するタイムスタンプ フィールドに 10 ミリ秒の倍数で追加の時間解決を提供する必要があります。
これらのフィールドの有効な値の範囲は次のようになります。
少なくとも 0(0 ミリ秒を表す)
1990 ミリ秒を表す最大 199
7.4.10 UtcOffset フィールド
UtcOffset フィールド ( 表 30 を参照) では、UTC からローカルの日付と時刻へのオフセットを、対応するタイムスタンプフィールドと 10msIncrement フィールドで記述する必要があります。 UTC からローカルの日付と時刻へのオフセットには、タイム ゾーンの影響や、夏時間や地域の夏時間の変更など、その他の日時の調整が含まれます。
表 30 UtcOffset フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
OffsetFromUtc | 0 | 7 | このフィールドは必須であり、 セクション 7.4.10.1はその内容を定義します。 |
OffsetValid | 7 | 1 | このフィールドは必須であり、 セクション 7.4.10.2 ではその内容が定義されています。 |
7.4.10.1 OffsetFromUtc フィールド
OffsetFromUtc フィールドは、関連する Timestamp フィールドと 10msIncrement フィールドに含まれるローカル日時の UTC からのオフセットを記述しなければなりません。 このフィールドは、UTC からのオフセットを 15 分間隔で表します (表 31 を参照)。
表 31 OffsetFromUtc フィールドの値の意味
Value | 符号付き 10 進数等価 | 説明 |
---|---|---|
3Fh | 63 | ローカル日時は UTC + 15:45 です |
3Eh | 62 | ローカル日時は UTC + 15:30 です |
. . . |
. . . |
. . . |
01h | 1 | ローカル日時は UTC + 00:15 です |
00h | 0 | ローカルの日付と時刻は UTC です |
7Fh | -1 | ローカルの日付と時刻は UTC – 00:15 です |
. . . |
. . . |
. . . |
41h | -63 | ローカルの日付と時刻は UTC – 15:45 です |
40h | -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 フィールドの内容が有効であることを意味します。
実装では、OFFSETFromUtc フィールドの値を計算するために UTC が使用できない場合にのみ、このフィールドを値 0 に設定する必要があります。 このフィールドに値 0 が含まれている場合、実装は Timestamp フィールドと 10msIncrement フィールドを、現在のローカル日時と同じ UTC オフセットを持つものとして扱う必要があります。
7.5 ボリューム GUID ディレクトリエントリ
ボリューム GUID ディレクトリ エントリには、実装がボリュームを一意かつプログラムで区別できるようにする GUID が含まれています。 ボリューム GUID は、ルート ディレクトリに無害なプライマリ ディレクトリ エントリとして存在します ( 表 32 を参照)。 ボリューム GUID ディレクトリ エントリの有効な数は、0 から 1 の範囲です。
表 32 ボリューム GUID DirectoryEntry
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1 を参照)。
7.5.1.1 TypeCode フィールド
TypeCode フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.1 を参照)。
ボリューム GUID ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.5.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.2 を参照)。
ボリューム GUID ディレクトリ エントリの場合、このフィールドの有効な値は 1 です。
7.5.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.3 を参照)。
7.5.1.4 InUse フィールド
InUse フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.1.4 を参照)。
7.5.2 SecondaryCount フィールド
SecondaryCount フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供されている定義に準拠する必要があります ( セクション 6.3.2 を参照)。
ボリューム GUID ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.5.3 SetChecksum フィールド
SetChecksum フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.3 を参照)。
7.5.4 GeneralPrimaryFlags フィールド
GeneralPrimaryFlags フィールドは、汎用プライマリ DirectoryEntry テンプレート ( セクション 6.3.4 を参照) で提供される定義に準拠し、予約する CustomDefined フィールドの内容を定義します。
7.5.4.1 AllocationPossible フィールド
AllocationPossible フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.4.1 を参照)。
ボリューム GUID ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.5.4.2 NoFatChain フィールド
NoFatChain フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠するものとします ( セクション 6.3.4.2 を参照)。
7.5.5 VolumeGuid フィールド
VolumeGuid フィールドには、指定されたボリュームを一意に識別する GUID が含まれている必要があります。
このフィールドに使用できる値はすべて有効です。null GUID を除きます。これは有効です {00000000-0000-0000-0000-000000000000}。
7.6 Stream Extension Directory エントリ
Stream Extension ディレクトリ エントリは、ファイル ディレクトリ エントリ セットの重要なセカンダリ ディレクトリ エントリです ( 表 33 を参照)。 ファイル ディレクトリ エントリ セット内の Stream Extension ディレクトリ エントリの有効な数は 1 です。 さらに、このディレクトリ エントリは、ファイル ディレクトリ エントリの直後にある場合にのみ有効です。
表 33 Stream Extension DirectoryEntry
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 ではその内容が定義されています。 |
予約済み 3 | 16 | 4 | このフィールドは必須であり、その内容は予約されています。 |
FirstCluster | 20 | 4 | このフィールドは必須であり、 セクション 7.6.6 では その内容を定義します。 |
DataLength | 24 | 8 | このフィールドは必須であり、 セクション 7.6.7 ではその内容が定義されています。 |
7.6.1 EntryType フィールド
EntryType フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1 を参照)。
7.6.1.1 TypeCode フィールド
TypeCode フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1.1 を参照)。
Stream Extension ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.6.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1.2 を参照)。
Stream Extension ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.6.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定されている定義に準拠する必要があります ( セクション 6.4.1.3 を参照)。
7.6.1.4 InUse フィールド
InUse フィールドは、汎用セカンダリ DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.4 を参照)。
7.6.2 GeneralSecondaryFlags フィールド
GeneralSecondaryFlags フィールドは、汎用セカンダリ DirectoryEntry テンプレート ( セクション 6.4.2 を参照) で提供される定義に準拠し、予約する CustomDefined フィールドの内容を定義します。
7.6.2.1 AllocationPossible フィールド
AllocationPossible フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠している必要があります ( セクション 6.4.2.1 を参照)。
Stream Extension ディレクトリ エントリの場合、このフィールドの有効な値は 1 です。
7.6.2.2 NoFatChain フィールド
NoFatChain フィールドは、汎用セカンダリ DirectoryEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.4.2.2 を参照)。
7.6.3 NameLength フィールド
NameLength フィールドには、後続のファイル名ディレクトリエントリ ( セクション 7.7 を参照) にまとめて含まれる Unicode 文字列の長さが含まれている必要があります。
このフィールドの有効な値の範囲は次のようになります。
少なくとも 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 フィールドは、ユーザー データが書き込まれたデータ ストリームにどれだけの距離を記述する必要があります。 実装では、データストリームにデータをさらに書き込むにつれて、このフィールドを更新する必要があります。 ストレージ メディアでは、有効なデータ長とデータ ストリームのデータ長の間のデータは未定義です。 実装では、有効なデータ長を超える読み取り操作に対してゼロを返す必要があります。
対応する File ディレクトリ エントリでディレクトリが記述されている場合、このフィールドの有効な値は DataLength フィールドの値と同じです。 それ以外の場合、このフィールドの有効な値の範囲は次のようになります。
少なくとも 0。つまり、ユーザー データがデータ ストリームに書き込まれなかった
最大で DataLength。つまり、ユーザー データはデータ ストリームの長さ全体に書き込まれています
7.6.6 FirstCluster フィールド
FirstCluster フィールドは、汎用セカンダリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.3 を参照)。
このフィールドには、ユーザー データをホストするデータ ストリームの最初のクラスターのインデックスが含まれている必要があります。
7.6.7 DataLength フィールド
DataLength フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠している必要があります ( セクション 6.4.4 を参照)。
対応する File ディレクトリ エントリでディレクトリが記述されている場合、このフィールドの有効な値は、関連付けられている割り当てのサイズ全体 (バイト単位) です(0)。 さらに、ディレクトリの場合、このフィールドの最大値は 256 MB です。
7.7 ファイル名ディレクトリエントリ
ファイル名ディレクトリ エントリは、ファイル ディレクトリ エントリ セットの重要なセカンダリ ディレクトリ エントリです ( 表 34 を参照)。 ファイル ディレクトリ エントリ セット内のファイル名ディレクトリ エントリの有効な数は NameLength / 15 で、最も近い整数に切り上げられます。 さらに、ファイル名ディレクトリ エントリは、連続するシリーズとして Stream Extension ディレクトリ エントリの直後にある場合にのみ有効です。 ファイル名ディレクトリ エントリは、ファイル ディレクトリ エントリ セットのファイル名を形成するために結合されます。
指定されたディレクトリ エントリのすべての子は、一意のファイル名ディレクトリ エントリ セットを持つ必要があります。 つまり、1 つのディレクトリ内で大文字と小文字を区別した後、重複するファイル名やディレクトリ名を指定することはできません。
表 34 ファイル名 DirectoryEntry
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 7.7.1 ではその内容を定義します。 |
GeneralSecondaryFlags | 1 | 1 | このフィールドは必須であり、 セクション 7.7.2 ではその内容を定義します。 |
FileName | 2 | 30 | このフィールドは必須であり、 セクション 7.7.3 ではその内容を定義します。 |
7.7.1 EntryType フィールド
EntryType フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1 を参照)。
7.7.1.1 TypeCode フィールド
TypeCode フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1.1 を参照)。
ファイル名ディレクトリ エントリの場合、このフィールドの有効な値は 1 です。
7.7.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1.2 を参照)。
ファイル名ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.7.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定されている定義に準拠する必要があります ( セクション 6.4.1.3 を参照)。
7.7.1.4 InUse フィールド
InUse フィールドは、汎用セカンダリ DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.4 を参照)。
7.7.2 GeneralSecondaryFlags フィールド
GeneralSecondaryFlags フィールドは、汎用セカンダリ DirectoryEntry テンプレート ( セクション 6.4.2 を参照) で提供される定義に準拠し、予約する CustomDefined フィールドの内容を定義します。
7.7.2.1 AllocationPossible フィールド
AllocationPossible フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠している必要があります ( セクション 6.4.2.1 を参照)。
Stream Extension ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.7.2.2 NoFatChain フィールド
NoFatChain フィールドは、汎用セカンダリ DirectoryEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.4.2.2 を参照)。
7.7.3 FileName フィールド
FileName フィールドには、ファイル名の一部である Unicode 文字列を含める必要があります。 File Directory エントリ セットにファイル名ディレクトリ エントリが存在する順序で、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 | Asterisk | 002Fh | スラッシュ | 003Ah | コロン |
003Ch | より小記号 | 003Eh | より大記号 | 003Fh | 疑問符 |
005Ch | バック スラッシュ | 007Ch | 縦棒 |
ファイル名 "." と ".." には、それぞれ "this directory" と "containing directory" という特別な意味があります。 実装では、これらの予約済みファイル名のいずれかを FileName フィールドに記録しないでください。 ただし、これらの 2 つのファイル名は、一覧表示されているディレクトリと含まれているディレクトリを参照するために、実装によってディレクトリ一覧に生成される場合があります。
実装では、ファイル名とディレクトリ名を ASCII 文字セットのみに制限することが必要な場合があります。 その場合、文字の使用を最初の 128 Unicode エントリの有効な文字の範囲に制限する必要があります。 ファイル名とディレクトリ名は、ボリューム上の Unicode に保存し、ユーザーとやり取りするときに ASCII/Unicode との間で変換する必要があります。
7.8 ベンダー拡張ディレクトリエントリ
ベンダー拡張ディレクトリ エントリは、ファイル ディレクトリ エントリ セットの問題のないセカンダリ ディレクトリ エントリです ( 表 36 を参照)。 ファイル ディレクトリ エントリ セットには、任意の数のベンダー拡張ディレクトリ エントリを含め、セカンダリ ディレクトリ エントリの制限まで、他のセカンダリ ディレクトリ エントリの数を減らします。 さらに、ベンダー拡張ディレクトリ エントリは、必要なストリーム拡張機能とファイル名のディレクトリ エントリの前に存在しない場合にのみ有効です。
ベンダー拡張ディレクトリ エントリを使用すると、ベンダーは VendorGuid フィールドを介して個々のファイル ディレクトリ エントリ セットに一意のベンダー固有のディレクトリ エントリを持つことができます ( 表 36 を参照)。 一意のディレクトリ エントリを使用すると、ベンダーは exFAT ファイル システムを効果的に拡張できます。 仕入先は、VendorDefined フィールドの内容を定義できます ( 表 36 を参照)。 ベンダー実装では、VendorDefined フィールドの内容を維持し、ベンダー固有の機能を提供する場合があります。
ベンダー拡張ディレクトリ エントリの GUID を認識しない実装では、ディレクトリ エントリは、認識されない他の問題のないセカンダリ ディレクトリ エントリと同じように扱う必要があります ( セクション 8.2 を参照)。
表 36 ベンダー拡張機能 DirectoryEntry
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1 を参照)。
7.8.1.1 TypeCode フィールド
TypeCode フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1.1 を参照)。
仕入先拡張ディレクトリエントリの場合、このフィールドの有効な値は 0 です。
7.8.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1.2 を参照)。
仕入先拡張ディレクトリエントリの場合、このフィールドの有効な値は 1 です。
7.8.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定されている定義に準拠する必要があります ( セクション 6.4.1.3 を参照)。
7.8.1.4 InUse フィールド
InUse フィールドは、汎用セカンダリ DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.4 を参照)。
7.8.2 GeneralSecondaryFlags フィールド
GeneralSecondaryFlags フィールドは、汎用セカンダリ DirectoryEntry テンプレート ( セクション 6.4.2 を参照) で提供される定義に準拠し、予約する CustomDefined フィールドの内容を定義します。
7.8.2.1 AllocationPossible フィールド
AllocationPossible フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠している必要があります ( セクション 6.4.2.1 を参照)。
仕入先拡張ディレクトリエントリの場合、このフィールドの有効な値は 0 です。
7.8.2.2 NoFatChain フィールド
NoFatChain フィールドは、汎用セカンダリ DirectoryEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 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 ベンダー割り当て DirectoryEntry
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
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 フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1 を参照)。
7.9.1.1 TypeCode フィールド
TypeCode フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1.1 を参照)。
仕入先割当ディレクトリエントリの場合、このフィールドの有効な値は 1 です。
7.9.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠する必要があります ( セクション 6.4.1.2 を参照)。
仕入先割当ディレクトリエントリの場合、このフィールドの有効な値は 1 です。
7.9.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定されている定義に準拠する必要があります ( セクション 6.4.1.3 を参照)。
7.9.1.4 InUse フィールド
InUse フィールドは、汎用セカンダリ DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.4 を参照)。
7.9.2 GeneralSecondaryFlags フィールド
GeneralSecondaryFlags フィールドは、汎用セカンダリ DirectoryEntry テンプレート ( セクション 6.4.2 を参照) で提供される定義に準拠し、予約する CustomDefined フィールドの内容を定義します。
7.9.2.1 AllocationPossible フィールド
AllocationPossible フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠している必要があります ( セクション 6.4.2.1 を参照)。
仕入先割当ディレクトリエントリの場合、このフィールドの有効な値は 1 です。
7.9.2.2 NoFatChain フィールド
NoFatChain フィールドは、汎用セカンダリ DirectoryEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 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 フィールドは、汎用セカンダリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.3 を参照)。
7.9.5 DataLength フィールド
DataLength フィールドは、汎用セカンダリ DirectoryEntry テンプレートで指定された定義に準拠している必要があります ( セクション 6.4.4 を参照)。
7.10 TexFAT パディング ディレクトリ エントリ
この仕様である exFAT リビジョン 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 リビジョン 1.00 ファイル システム基本仕様の実装では、メジャー リビジョン番号 1 の exFAT ボリュームとマイナー リビジョン番号をマウントしてアクセスできる必要があります。 これは、実装で認識されないディレクトリ エントリが発生する可能性があるシナリオを示します。 これらのシナリオの影響を次に示します。
ルート ディレクトリに認識されない重要なプライマリ ディレクトリ エントリが存在すると、ボリュームが無効になります。 ルート以外のディレクトリにファイル ディレクトリ エントリを除く重要なプライマリ ディレクトリ エントリが存在すると、ホスティング ディレクトリが無効になります。
実装では、認識できない無害なプライマリ ディレクトリ エントリや、関連するクラスター割り当てを変更しないでください。 ただし、ディレクトリを削除するとき、およびディレクトリを削除する場合にのみ、実装では認識されない問題のないプライマリ ディレクトリ エントリが削除され、関連するすべてのクラスター割り当てが解放されます (存在する場合)。
実装では、認識できない重要なセカンダリ ディレクトリ エントリや、関連するクラスター割り当てを変更することはできません。 ディレクトリ エントリ セットに認識されない重要なセカンダリ ディレクトリ エントリが 1 つ以上存在すると、ディレクトリ エントリ セット全体が認識されません。 認識できない重要なセカンダリ ディレクトリ エントリが 1 つ以上含まれるディレクトリ エントリ セットを削除する場合、認識できない重要なセカンダリ ディレクトリ エントリに関連付けられているクラスター割り当て (存在する場合) はすべて実装によって解放されます。 さらに、ディレクトリ エントリ セットでディレクトリが記述されている場合、実装では次の場合があります。
ディレクトリに移動する
含まれているディレクトリ エントリを列挙する
包含ディレクトリ エントリを削除する
包含ディレクトリ エントリを別のディレクトリに移動する
ただし、実装では次の処理は行われません。
含まれているディレクトリ エントリを変更する (削除を除く)
新しい包含ディレクトリ エントリを作成する
記載されているように、走査と列挙を除く、包含ディレクトリ エントリを開きます
実装では、認識できない無害なセカンダリ ディレクトリ エントリや、関連するクラスター割り当てを変更しないでください。 実装では、認識されない無害なセカンダリ ディレクトリ エントリを無視する必要があります。 ディレクトリ エントリ セットを削除すると、認識できない問題のあるセカンダリ ディレクトリ エントリに関連付けられているすべてのクラスター割り当てが実装によって解放されます (存在する場合)。
9 ファイル システムの制限
9.1 セクターサイズの制限
BytesPerSectorShift フィールドは、セクター サイズの下限と上限を定義します (下限 は 512 バイト、上限は 4,096 バイトと評価されます)。
9.2 クラスター サイズの制限
SectorsPerClusterShift フィールドは、クラスター サイズの下限と上限を定義します (下限: 1 セクター、上限: 25 -- BytesPerSectorShift セクター。これは 32 MB に評価されます)。
9.3 クラスター ヒープ サイズの制限
クラスター ヒープには、ルート ディレクトリ、すべての割り当てビットマップ、およびアップケース テーブルという基本的なファイル システム構造をホストするのに十分な領域が少なくとも含まれている必要があります。
クラスター ヒープ サイズの下限は、クラスター ヒープに存在する各基本的なファイル システム構造のサイズ制限の下限の関数です。 可能な限り最小のクラスター (512 バイト) を指定した場合でも、基本的なファイル システム構造のそれぞれに必要なクラスターは 1 つ以上ありません。 したがって、 下限は 2 + NumberOfFats クラスターであり、NumberOfFats フィールドの値に応じて 3 つまたは 4 つのクラスターに評価されます。
クラスター ヒープ サイズの上限は、ClusterCount フィールドが定義するクラスターの最大数の単純な関数です (上限: 232 - 11 クラスター)。 クラスター のサイズに関係なく、このようなクラスター ヒープには、少なくとも基本的なファイル システム構造をホストするのに十分な領域があります。
9.4 ボリュームサイズの制限
VolumeLength フィールドは、下限と上限のボリューム サイズ制限 (下限: 2 20/ 2BytesPerSectorShiftセクターを定義します。これは 1 MB に評価されます)。上限: 264- 1 セクター。最大のセクター サイズを考えると、約 64ZB と評価されます)。 ただし、この仕様では、クラスター ヒープ内の2 つ以上の 24 ~ 2 個のクラスターを推奨します ( セクション 3.1.9 を参照)。 したがって、ボリュームの推奨上限は、ClusterHeapOffset + (224 - 2) * 2SectorsPerClusterShift です。 可能な最大のクラスター サイズである 32 MB を指定し、ClusterHeapOffset が 96 MB (メイン ブートリージョンとバックアップ ブート リージョンと最初の FAT にのみ十分な領域) であると仮定すると、ボリュームの推奨上限は約 512 TB に評価されます。
9.5 ディレクトリ サイズの制限
Stream Extension ディレクトリ エントリの DataLength フィールドは、ディレクトリ サイズの下限と上限 (下限: 0 バイト、上限: 256 MB) を定義します。 つまり、ディレクトリは最大 8,388,608 個のディレクトリ エントリをホストできます (各ディレクトリ エントリは 32 バイトを消費します)。 可能な限り最小のファイル ディレクトリ エントリ セット、3 つのディレクトリ エントリを考えると、ディレクトリは最大 2,796,202 個のファイルをホストできます。
10 付録
10.1 グローバル一意識別子 (GUID)
GUID は、ユニバーサル一意識別子の Microsoft 実装です。 GUID は 128 ビットの値で、8 桁の 1 つの 16 進数のグループの後に、それぞれ 4 桁の 16 進数の 3 つのグループが続き、その後に 12 桁の 16 進数のグループが続きます (例: {6B29FC40-CA47-1067-B31D-00DD010662DA})。 (表 38 を参照)。
表 38 GUID 構造体
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
Data1 | 0 | 4 | このフィールドは必須であり、GUID の最初のグループ (例の 6B29FC40h) の 4 バイトが含まれています。 |
Data2 | 4 | 2 | このフィールドは必須であり、GUID の 2 番目のグループ (例の CA47h) の 2 バイトが含まれています。 |
Data3 | 6 | 2 | このフィールドは必須であり、GUID の 3 番目のグループ (例の 1067h) の 2 バイトが含まれています。 |
Data4[0] | 8 | 1 | このフィールドは必須であり、GUID の 4 番目のグループの最上位バイト (例の B3h) が含まれています。 |
Data4[1] | 9 | 1 | このフィールドは必須であり、GUID の 4 番目のグループ (例の 1Dh) の最下位バイトが含まれています。 |
Data4[2] | 10 | 1 | このフィールドは必須であり、GUID の 5 番目のグループの最初のバイト (例では 00h) が含まれています。 |
Data4[3] | 11 | 1 | このフィールドは必須であり、GUID の 5 番目のグループ (例の DDh) の 2 番目のバイトが含まれています。 |
Data4[4] | 12 | 1 | このフィールドは必須であり、GUID の 5 番目のグループの 3 番目のバイト (例の 01h) が含まれています。 |
Data4[5] | 13 | 1 | このフィールドは必須であり、GUID の 5 番目のグループの 4 番目のバイト (例では 06h) が含まれています。 |
Data4[6] | 14 | 1 | このフィールドは必須であり、GUID の 5 番目のグループの 5 番目のバイト (例の 62h) が含まれています。 |
Data4[7] | 15 | 1 | このフィールドは必須であり、GUID の 5 番目のグループ (例の DAh) の 6 番目のバイトが含まれています。 |
10.2 パーティション テーブル
広範な使用シナリオで exFAT ボリュームの相互運用性を確保するには、実装では、MBR パーティション分割ストレージとパーティション GUID {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} でパーティションの種類 07h を GPT パーティション分割ストレージに使用する必要があります。
11 ドキュメントの変更履歴
表 39 では、このドキュメントのリリース、修正、追加、削除、および明確化の履歴について説明します。
表 39 ドキュメントの変更履歴
Date | 変更の説明 |
---|---|
2008 年 1 月 8 日 | 基本仕様の最初のリリース。次のものが含まれます。
|
2008 年 6 月 8 日 | 基本仕様の第 2 リリース。次の変更が含まれます。
|
2008 年 10 月 1 日 | 基本仕様の第 3 リリース。これには次の変更が含まれます。
|
2009 年 1 月 1 日 | 基本仕様の第 4 リリース。これには次の変更が含まれます。
|
2009 年 9 月 2 日 | 基本仕様の第 5 リリース。これには次の変更が含まれます。
|
2010 年 2 月 24 日 | 基本仕様の 6 番目のリリース。これには次の変更が含まれます。
|
2019 年 8 月 26 日 | 基本仕様の 7 番目のリリース。これには次の変更が含まれます。
|