exFAT 文件系统规范 - Win32 apps

exFAT 文件系统规范 - Win32 apps

表 4 主和备份启动扇区结构

字段名称

偏移量

(字节)

大小

(字节)

注释

JumpBoot

0

3

此字段是必需的,第 3.1.1 节 定义其内容。

文件系统名称

3

8

此字段是必需的,第 3.1.2 节 定义其内容。

MustBeZero

11

53

此字段是必需的,第 3.1.3 节 定义其内容。

PartitionOffset

64

8

此字段是必需的,第 3.1.4 节 定义其内容。

体积长度

72

8

此字段是必需的,第 3.1.5 节 定义其内容。

FatOffset

80

4

此字段是必需的,第 3.1.6 节 定义其内容。

FatLength

84

4

此字段是必需的,第 3.1.7 节 定义其内容。

集群堆偏移

88

4

此字段是必需的,第 3.1.8 节 定义其内容。

ClusterCount

92

4

此字段是必需的,第 3.1.9 节 定义其内容。

FirstClusterOfRootDirectory

96

4

此字段是必需的,第 3.1.10 节 定义其内容。

VolumeSerialNumber (卷序列号)

100

4

此字段是必需的,第 3.1.11 节 定义其内容。

文件系统修订

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 节 定义其内容。

使用百分比

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 会“跳转”以在 BootCode 字段中执行启动带式指令。

此字段的有效值为(按低序字节到高阶字节的顺序)EBh 76h 90h。

3.1.2 FileSystemName 字段

FileSystemName 字段应包含卷上的文件系统的名称。

此字段的有效值为 ASCII 字符“EXFAT”,其中包括三个尾随空格。

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 卷的大小。

此字段的有效值范围应为:

至少 220/ 2BytesPerSectorShift,这可确保最小卷不超过 1MB

最多 264- 1,此字段可以描述的最大值。

但是,如果多余的空间子区域的大小为 0,则此字段的最大值为 ClusterHeapOffset + (232- 11) *2SectorsPerClusterShift。

3.1.6 FatOffset 字段

FatOffset 字段应描述第一个 FAT 的相对于卷的扇区偏移量。 此字段使实现能够将第一个 FAT 与基础存储介质的特征保持一致。

此字段的有效值范围应为:

至少 24 个,这占主启动和备份启动区域消耗的扇区

大多数 ClusterHeapOffset - (FatLength * NumberOfFats),它占群集堆消耗的扇区

3.1.7 FatLength 字段

FatLength 字段应描述每个 FAT 表的扇区长度(该卷最多可以包含两个 FAT)。

此字段的有效值范围应为:

至少 (ClusterCount + 2) * 22/ 2BytesPerSectorShift向上舍入到最接近的整数,这可确保每个 FAT 有足够的空间来描述群集堆中的所有群集

最多 (ClusterHeapOffset - FatOffset) / NumberOfFats 向下舍入到最接近的整数,这可确保群集堆之前存在 FAT

此字段可能包含超出其下限的值(如上所述),以使第二个 FAT(如果存在)也与基础存储介质的特征保持一致。 超出 FAT 本身需要的内容(如果有)是未定义的。

3.1.8 ClusterHeapOffset 字段

ClusterHeapOffset 字段应描述群集堆的卷相对扇区偏移量。 此字段使实现能够将群集堆与基础存储介质的特征保持一致。

此字段的有效值范围应为:

至少 FatOffset + FatLength * NumberOfFats,以考虑上述所有区域消耗的扇区

最多 232- 1 或 VolumeLength - (ClusterCount * 2SectorsPerClusterShift),无论计算少

3.1.9 ClusterCount 字段

ClusterCount 字段应描述群集堆包含的群集数。

此字段的有效值应小于以下各项:

(VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShift向下舍入到最接近的整数,这正是分类堆的开头和卷末尾之间的分类数

232- 11,这是 FAT 可以描述的最大群集数

ClusterCount 字段的值确定 FAT 的最小大小。 为避免非常大的 FAT,实现可以通过增加群集大小(通过 SectorsPerClusterShift 字段)来控制群集堆中的群集数。 此规范建议在群集堆中不超过 224 个- 2 个群集。 但是,实现应能够处理群集堆中最多 2 个32 个- 11 个群集的卷。

3.1.10 FirstClusterOfRootDirectory 字段

FirstClusterOfRootDirectory 字段应包含根目录的第一个群集的群集索引。 根目录应始终使用活动 FAT 中的群集链进行描述,就像根目录用目录条目描述时,其 GeneralPrimaryFlags 字段的 NoFatChain 标志是零一样(请参阅第 6.3.4.2 节)。 根目录的数据长度应始终通过加载群集链来确定。 实现应在分配位图和上例表使用群集后,将根目录的第一个群集放在第一个非坏群集中。

此字段的有效值范围应为:

至少 2,群集堆中第一个群集的索引

群集堆中最后一个群集的索引最多为 ClusterCount + 1

3.1.11 VolumeSerialNumber 字段

VolumeSerialNumber 字段应包含唯一的序列号。 这有助于实现区分不同的 exFAT 卷。 实现应结合 exFAT 卷的格式设置日期和时间来生成序列号。 合并日期和时间形成序列号的机制特定于实现。

此字段的所有可能值都有效。

3.1.12 文件系统修订字段 (FileSystemRevision Field)

FileSystemRevision 字段应描述给定卷上 exFAT 结构的主要和次要修订号。

高阶字节是主要修订号,低序字节是次要修订号。 例如,如果高阶字节包含值 01h,如果低序字节包含值 05h,则 FileSystemRevision 字段描述修订号 1.05。 同样,如果高阶字节包含值 0Ah,如果低序字节包含值 0Fh,则 FileSystemRevision 字段描述修订号 10.15。

此字段的有效值范围应为:

对于低序字节,至少为 0,对于高阶字节,至少为 1

对于低序字节,最多为 99,对于高阶字节,为 99

此规范描述的 exFAT 的修订号为 1.00。 此规范的实现应装载任何具有主要修订号 1 的 exFAT 卷,并且不得将任何 exFAT 卷装载到任何其他主要修订号。 实现应遵循次要修订号,不得执行作或创建给定次要修订号相应规范中未描述的任何文件系统结构。

3.1.13 VolumeFlags 字段

VolumeFlags 字段应包含指示 exFAT 卷上各种文件系统结构状态的标志(请参阅 表 5)。

在计算其各自的主启动或备份启动区域校验和时,实现不应包含此字段。 引用备份启动扇区时,实现应将此字段视为过时。

表 5 VolumeFlags 字段结构

字段名称

偏移量

(位)

大小

(位)

注释

ActiveFat

0

1

此字段是必需的,第 3.1.13.1 节 定义其内容。

VolumeDirty

1

1

此字段是必需的,第 3.1.13.2 节 定义其内容。

MediaFailure

2

1

此字段是必需的,第 3.1.13.3 节 定义其内容。

ClearToZero

3

1

此字段是必需的,第 3.1.13.4 节 定义其内容。

保留

4

12

此字段是必需的,并且保留其内容。

3.1.13.1 ActiveFat 字段

ActiveFat 字段应描述哪些 FAT 和分配位图处于活动状态(并且应使用实现),如下所示:

0,这意味着第一个 FAT 和第一个分配位图处于活动状态

1,这意味着第二个 FAT 和第二个分配位图处于活动状态,并且仅当 NumberOfFats 字段包含值 2 时,才可能

实现应将非活动 FAT 和分配位图视为过时。 只有 TexFAT 感知实现才能切换活动 FAT 和分配位图(请参阅 第 7.1 节)。

3.1.13.2 VolumeDirty 字段

VolumeDirty 字段应描述卷是否脏,如下所示:

0,这意味着卷可能处于一致状态

1,这意味着卷可能处于不一致状态

在遇到不一致的文件系统元数据不一致时,实现应将此字段的值设置为 1。 如果装载卷时,此字段的值为 1,则只有解析文件系统元数据不一致性的实现才能将此字段的值清除为 0。 此类实现只有在确保文件系统处于一致状态后才能将此字段的值清除为 0。

如果装载卷时,此字段的值为 0,则实现应在更新文件系统元数据之前将此字段设置为 1,然后将此字段清除为 0,类似于 第 8.1 节 1中所述的建议写入顺序。

3.1.13.3 媒体故障字段

MediaFailure 字段应描述实现是否已发现媒体故障,如下所示:

0,这意味着宿主媒体未报告故障,或者 FAT 中已记录任何已知故障为“错误”群集

1,这意味着宿主媒体报告了失败(即读取或写入作失败)

实现应在以下情况下将此字段设置为 1:

托管媒体无法尝试访问卷中的任何区域

实现已用尽访问重试算法(如果有)

如果装载卷时,此字段的值为 1,则扫描整个卷的媒体故障的实现,并将所有故障记录为 FAT 中的“坏”群集(否则解析媒体故障)可能会将此字段的值清除为 0。

3.1.13.4 ClearToZero 字段

ClearToZero 字段在此规范中没有意义。

此字段的有效值为:

0,没有任何特定含义

1,这意味着实现应在修改任何文件系统结构、目录或文件之前将此字段清除为 0

3.1.14 BytesPerSectorShift 字段

BytesPerSectorShift 字段应描述每个扇区表示为日志2(N),其中 N 是每个扇区字节数。 例如,对于每个扇区 512 字节,此字段的值为 9。

此字段的有效值范围应为:

至少 9 个(扇区大小为 512 字节),这是 exFAT 卷的最小扇区

最多 12 个(扇区大小为 4096 字节),这是个人计算机中常见的 CPU 内存页大小

3.1.15 SectorsPerClusterShift 字段

SectorsPerClusterShift 字段应描述每个群集表示为日志2(N)的扇区,其中 N 是每个群集的扇区数。 例如,对于每个群集 8 个扇区,此字段的值为 3。

此字段的有效值范围应为:

至少 0 个(每个群集 1 个扇区),这是可能的最小群集

最多 25 - BytesPerSectorShift,其计算结果为 32MB 的群集大小

3.1.16 NumberOfFats 字段

NumberOfFats 字段应描述卷包含的 FAT 数和分配位图数。

此字段的有效值范围应为:

1,它指示卷仅包含第一个 FAT 和第一个分配位图

2,它指示卷包含第一个 FAT、第二个 FAT、第一个分配位图和第二个分配位图;此值仅适用于 TexFAT 卷

3.1.17 DriveSelect 字段

DriveSelect 字段应包含扩展的 INT 13h 驱动器号,这有助于在个人计算机上使用扩展的 INT 13h 从此卷启动绑带。

此字段的所有可能值都有效。 以前基于 FAT 的文件系统中的类似字段经常包含值 80h。

3.1.18 PercentInUse 字段

PercentInUse 字段应描述分配的群集堆中的群集百分比。

此字段的有效值范围应为:

在 0 到 100 之间(包括 0 到 100 之间)(即群集堆中分配的群集的百分比)向下舍入到最接近的整数

完全 FFh,指示群集堆中已分配群集的百分比不可用

实现应更改此字段的值,以反映群集堆中群集分配的更改,或将其更改为 FFh。

在计算其各自的主启动或备份启动区域校验和时,实现不应包含此字段。 引用备份启动扇区时,实现应将此字段视为过时。

3.1.19 BootCode 字段

BootCode 字段应包含引导带指令。 实现可以使用启动带式计算机系统所需的 CPU 指令填充此字段。 不提供启动带指令的实现应将此字段中的每个字节初始化为 F4h(个人计算机中常见的 CPU 的停止指令),作为其格式作的一部分。

3.1.20 BootSignature 字段

BootSignature 字段应描述给定扇区的意图是否为启动扇区。

此字段的有效值为 AA55h。 此字段中的任何其他值使其各自的启动扇区失效。 实现应先验证此字段的内容,然后取决于其各自的启动扇区中的其他任何字段。

3.2 主和备份扩展启动扇区子区域

主扩展启动扇区的每个扇区具有相同的结构;但是,每个扇区可以保存不同的引导带式指令(请参阅表 6)。 启动带代理(如主启动扇区中的启动带式指令、备用 BIOS 实现或嵌入式系统的固件)可能会加载这些扇区并执行它们所包含的指令。

备份扩展启动扇区是主扩展启动扇区备份,具有相同的结构(请参阅表 6 )。

在执行主或备份扩展启动扇区的说明之前,实现应通过确保每个扇区的 ExtendedBootSignature 字段包含其规定的值来验证其内容。

虽然初始格式作将初始化 Main 和 Backup 扩展启动扇区的内容,但实现可以根据需要更新这些扇区(并且还应根据需要更新各自的启动校验和)。

表 6 扩展启动扇区结构

字段名称

偏移量

(字节)

大小

(字节)

注释

ExtendedBootCode

0

2BytesPerSectorShift – 4

此字段是必需的,第 3.2.1 节 定义其内容。

注意:主和备份启动扇区都包含 BytesPerSectorShift 字段。

ExtendedBootSignature

2BytesPerSectorShift – 4

4

此字段是必需的,第 3.2.2 节 定义其内容。

注意:主和备份启动扇区都包含 BytesPerSectorShift 字段。

3.2.1 ExtendedBootCode 字段

ExtendedBootCode 字段应包含引导带式指令。 实现可以使用启动带式计算机系统所需的 CPU 指令填充此字段。 不提供启动带指令的实现应将此字段中的每个字节初始化为 00h,作为其格式作的一部分。

3.2.2 ExtendedBootSignature 字段

ExtendedBootSignature 字段应描述给定扇区的意图是否为扩展启动扇区。

此字段的有效值为 AA550000h。 此字段中的任何其他值使其各自的主启动或备份扩展启动扇区失效。 实现应在根据其各自的扩展启动扇区的任何其他字段之前验证此字段的内容。

3.3 主和备份 OEM 参数子区域

主 OEM 参数子区域包含十个参数结构,这些参数结构可能包含特定于制造商的信息(请参阅 表 7)。 十个参数结构中的每一个派生自泛型参数模板(请参阅 第 3.3.2 节)。 制造商可以从通用参数模板派生其自己的自定义参数结构。 此规范本身定义了两个参数结构:Null 参数(请参阅 第 3.3.3 节)和闪存参数(请参阅 第 3.3.4 节)。

备份 OEM 参数是主 OEM 参数的备份,具有相同的结构(请参阅 表 7)。

在使用主或备份 OEM 参数的内容之前,实现应通过验证各自的启动校验和来验证其内容。

制造商应使用自己的自定义参数结构(如果有)和任何其他参数结构填充 Main 和 Backup OEM 参数。 后续格式作应保留 Main 和 Backup OEM 参数的内容。

实现可以根据需要更新 Main 和 Backup OEM 参数(并且还应更新各自的启动校验和)。

表 7 OEM 参数结构

字段名称

偏移量

(字节)

大小

(字节)

注释

参数[0]

0

48

此字段是必需的,第 3.3.1 节 定义其内容。

.

.

.

.

.

.

.

.

.

.

.

.

Parameters[9]

432

48

此字段是必需的,第 3.3.1 节 定义其内容。

保留

480

2BytesPerSectorShift – 480

此字段是必需的,并且保留其内容。

注意:主和备份启动扇区都包含 BytesPerSectorShift 字段。

3.3.1 参数[0] ...Parameters[9]

此数组中的每个 Parameters 字段都包含一个参数结构,该结构派生自泛型参数模板(请参阅 第 3.3.2 节)。 任何未使用的 Parameters 字段应描述为包含 Null 参数结构(请参阅 第 3.3.3 节)。

3.3.2 泛型参数模板

泛型参数模板提供参数结构的基本定义(请参阅表 8 )。 所有参数结构都派生自此模板。 必须支持此通用参数模板。

表 8 泛型参数模板

字段名称

偏移量

(字节)

大小

(字节)

注释

ParametersGuid

0

16

此字段是必需的,第 3.3.2.1 节 定义其内容。

自定义

16

32

此字段是必需的,派生自此模板的结构定义其内容。

3.3.2.1 ParametersGuid 字段

ParametersGuid 字段应描述 GUID,该 GUID 确定给定参数结构的其余部分的布局。

此字段的所有可能值都有效;但是,制造商应使用 GUID 生成工具(如 GuidGen.exe)从此模板派生自定义参数结构时选择 GUID。

3.3.3 Null 参数

Null 参数结构派生自泛型参数模板(请参阅 第 3.3.2 节),并描述未使用的参数字段(请参阅 表 9)。 创建或更新 OEM 参数结构时,实现应使用 Null 参数结构填充未使用的 Parameters 字段。 此外,在创建或更新 OEM 参数结构时,实现应在数组末尾合并 Null 参数结构,从而将所有其他 Parameters 结构保留在 OEM 参数结构的开头。

必须支持 Null 参数结构。

表 9 Null 参数结构

字段名称

偏移量

(字节)

大小

(字节)

注释

ParametersGuid

0

16

此字段是必需的,第 3.3.3.1 节 定义其内容。

保留

16

32

此字段是必需的,并且保留其内容。

3.3.3.1 ParametersGuid 字段

ParametersGuid 字段应符合泛型参数模板提供的定义(请参阅 第 3.3.2.1 节)。

此字段的有效值在 GUID 表示法中为 {00000000-0000-0000-0000-000000000000}。

3.3.4 闪存参数

Flash 参数结构派生自泛型参数模板(请参阅 第 3.3.2 节),并包含闪存媒体的参数(请参阅 表 10)。 基于闪存的存储设备制造商可能会使用此参数结构填充参数字段(最好是 Parameters[0] 字段)。 实现可以使用 Flash 参数结构中的信息在读取/写入期间优化访问作,并在格式化媒体期间对齐文件系统结构。

对 Flash 参数结构的支持是可选的。

表 10 闪存参数结构

字段名称

偏移量

(字节)

大小

(字节)

注释

ParametersGuid

0

16

此字段是必需的,第 3.3.4.1 节 定义其内容。

擦除块大小(EraseBlockSize)

16

4

此字段是必需的,第 3.3.4.2 节 定义其内容。

页面大小

20

4

此字段是必需的,第 3.3.4.3 节 定义其内容。

SpareSectors

二十四

4

此字段是必需的,第 3.3.4.4 节 定义其内容。

随机访问时间

28

4

此字段是必需的,第 3.3.4.5 节 定义其内容。

编程时间

32

4

此字段是必需的,第 3.3.4.6 节 定义其内容。

ReadCycle

36

4

此字段是必需的,第 3.3.4.7 节 定义其内容。

WriteCycle

40

4

此字段是必需的,第 3.3.4.8 节 定义其内容。

保留

44

4

此字段是必需的,并且保留其内容。

所有 Flash Parameters 字段的所有可能值(ParametersGuid 字段除外)均有效。 但是,值 0 表示字段实际上毫无意义(实现应忽略给定字段)。

3.3.4.1 ParametersGuid 字段

ParametersGuid 字段应符合泛型参数模板中提供的定义(请参阅 第 3.3.2.1 节)。

此字段的有效值为 {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}。

3.3.4.2 EraseBlockSize 字段

EraseBlockSize 字段应描述闪存媒体擦除块的大小(以字节为单位)。

3.3.4.3 PageSize 字段

PageSize 字段应描述闪存媒体页面的大小(以字节为单位)。

3.3.4.4 备用对象字段

备用部门字段应描述闪存媒体为其内部稀疏作可用的扇区的数量。

3.3.4.5 RandomAccessTime 字段

RandomAccessTime 字段应以纳秒为单位描述闪存介质的平均随机访问时间。

3.3.4.6 ProgrammingTime 字段

ProgrammingTime 字段应以纳秒为单位描述闪存媒体的平均编程时间。

3.3.4.7 ReadCycle 字段

ReadCycle 字段应以纳秒为单位描述闪存介质的平均读取周期时间。

3.3.4.8 WriteCycle 字段

WriteCycle 字段应以纳秒为单位描述平均写入周期时间。

3.4 主和备份启动校验和子区域

Main 和 Backup Boot Checksum 各包含其各自启动区域中所有其他子区域内容的四字节校验和的重复模式。 校验和计算不应在其各自的启动扇区中包含 VolumeFlags 和 PercentInUse 字段(请参阅 图 1)。 四字节校验和的重复模式从头到尾填充其各自的启动校验和子区域。

在使用主或备份启动区域中任何其他子区域的内容之前,实现应通过验证各自的启动校验和来验证其内容。

虽然初始格式作将使用重复的校验和模式填充 Main 和 Backup Boot Checksum,但实现将更新这些扇区,因为其各自的启动区域中的其他扇区的内容会发生变化。

图 1 启动校验和计算

UInt32 BootChecksum

(

UCHAR * Sectors, // points to an in-memory copy of the 11 sectors

USHORT BytesPerSector

)

{

UInt32 NumberOfBytes = (UInt32)BytesPerSector * 11;

UInt32 Checksum = 0;

UInt32 Index;

for (Index = 0; Index < NumberOfBytes; Index++)

{

if ((Index == 106) || (Index == 107) || (Index == 112))

{

continue;

}

Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Sectors[Index];

}

return Checksum;

}

4 文件分配表区域

文件分配表(FAT)区域最多可以包含两个 FAT,一个位于第一个 FAT 子区域中,另一个位于第二个 FAT 子区域中。 NumberOfFats 字段描述此区域包含的 FAT 数。 NumberOfFats 字段的有效值为 1 和 2。 因此,第一个 FAT 子区域始终包含 FAT。 如果 NumberOfFats 字段为 2,则第二个 FAT 子区域也包含 FAT。

VolumeFlags 字段的 ActiveFat 字段描述哪些 FAT 处于活动状态。 只有主启动扇区中的 VolumeFlags 字段是最新的。 实现应将不处于活动状态的 FAT 视为过时。 使用非活动 FAT 并在 FAT 之间切换是特定于实现的。

4.1 第一个和第二个 FAT 子区域

FAT 应描述群集堆中的群集链(请参阅 表 11)。 群集链是一系列群集,用于记录文件、目录和其他文件系统结构的内容。 FAT 将群集链表示为群集索引的单向链接列表。 除了前两个条目之外,FAT 中的每个条目都代表一个群集。

表 11 文件分配表结构

字段名称

偏移量

(字节)

大小

(字节)

注释

FatEntry[0]

0

4

此字段是必需的,第 4.1.1 节 定义其内容。

FatEntry[1]

4

4

此字段是必需的,第 4.1.2 节 定义其内容。

FatEntry[2]

8

4

此字段是必需的,第 4.1.3 节 定义其内容。

.

.

.

.

.

.

.

.

.

.

.

.

FatEntry[ClusterCount+1]

(ClusterCount + 1) * 4

4

此字段是必需的,第 4.1.3 节 定义其内容。

ClusterCount + 1 永远不会超过 FFFFFFF6h。

注意:主和备份启动扇区均包含 ClusterCount 字段。

ExcessSpace

(ClusterCount + 2) * 4

(FatLength * 2BytesPerSectorShift) – (ClusterCount + 2) * 4)

此字段是必需的,并且其内容(如果有)未定义。

注意:主和备份启动扇区均包含 ClusterCount、FatLength 和 BytesPerSectorShift 字段。

4.1.1 FatEntry[0] 字段

FatEntry[0] 字段应描述第一个字节(最低顺序字节)中的媒体类型,并将其余三个字节中包含 FFh。

媒体类型(第一个字节)应为 F8h。

4.1.2 FatEntry[1] 字段

FatEntry[1] 字段仅因历史优先级而存在,并不描述任何感兴趣的内容。

此字段的有效值为 FFFFFFFFh。 实现应将此字段初始化为其规定的值,不应将此字段用于任何目的。 实现不应解释此字段,并且应在修改周围字段的作中保留其内容。

4.1.3 FatEntry[2] ...FatEntry[ClusterCount+1] 字段

此数组中的每个 FatEntry 字段应表示群集堆中的群集。 FatEntry[2] 表示群集堆中的第一个群集,FatEntry[ClusterCount+1] 表示群集堆中的最后一个群集。

这些字段的有效值范围应为:

介于 2 和 ClusterCount + 1 之间,包括指向给定群集链中的下一个 FatEntry;给定的 FatEntry 不得指向给定群集链中前面的任何 FatEntry

完全是 FFFFFFF7h,它将给定 FatEntry 的相应群集标记为“bad”

完全是 FFFFFFFFh,它将给定 FatEntry 的相应群集标记为群集链的最后一个群集;这是任何给定群集链的最后一个 FatEntry 的唯一有效值

5 数据区域

数据区域包含群集堆,它为文件系统结构、目录和文件提供托管空间。

5.1 群集堆子区域

群集堆的结构非常简单(请参阅 表 12):每个连续的扇区系列描述一个群集,因为 SectorsPerClusterShift 字段定义。 重要的是,群集堆的第一个分类具有索引 2,它直接对应于 FatEntry[2] 的索引。

在 exFAT 卷中,分配位图(请参阅 第 7.1.5 节)维护所有群集的分配状态记录。 这与 exFAT 的前任(FAT12、FAT16 和 FAT32)有很大区别,其中 FAT 保留了群集堆中所有群集的分配状态的记录。

表 12 群集堆结构

字段名称

偏移量

(部门)

大小

(部门)

注释

集群[2]

集群堆偏移

2SectorsPerClusterShift

此字段是必需的,第 5.1.1 节 定义其内容。

注意:主和备份启动扇区均包含 ClusterHeapOffset 和 SectorsPerClusterShift 字段。

.

.

.

.

.

.

.

.

.

.

.

.

Cluster[ClusterCount+1]

ClusterHeapOffset + (ClusterCount – 1) * 2SectorsPerClusterShift

2SectorsPerClusterShift

此字段是必需的,第 5.1.1 节 定义其内容。

注意:主和备份启动扇区都包含 ClusterCount、ClusterHeapOffset 和 SectorsPerClusterShift 字段。

5.1.1 群集[2] ...Cluster[ClusterCount+1] 字段

此数组中的每个群集字段都是一系列连续扇区,其大小由 SectorsPerClusterShift 字段定义。

6 目录结构

exFAT 文件系统使用目录树方法来管理群集堆中存在的文件系统结构和文件。 目录树中的父级和子目录之间存在一对多关系。

FirstClusterOfRootDirectory 字段引用的目录是目录树的根目录。 所有其他目录以单向链接的方式从根目录降序。

每个目录都包含一系列目录条目(请参阅表 13 )。

一个或多个目录条目合并到描述相关内容(例如文件系统结构、子目录或文件)的目录条目集中。

表 13 目录结构

字段名称

偏移量

(字节)

大小

(字节)

注释

DirectoryEntry[0]

0

32

此字段是必需的,第 6.1 节 定义其内容。

.

.

.

.

.

.

.

.

.

.

.

.

DirectoryEntry[N–1]

(N – 1) * 32

32

此字段是必需的,第 6.1 节 定义其内容。

N,DirectoryEntry 字段的数目,是包含给定目录的群集链的大小(以字节为单位),除以 DirectoryEntry 字段的大小(32 字节)。

6.1 DirectoryEntry[0] ...DirectoryEntry[N--1]

此数组中的每个 DirectoryEntry 字段派生自 Generic DirectoryEntry 模板(请参阅 第 6.2 节)。

6.2 Generic DirectoryEntry 模板

Generic DirectoryEntry 模板提供目录项的基本定义(请参阅 表 14)。 所有目录条目结构都派生自此模板,并且只有Microsoft定义的目录条目结构有效(exFAT 没有针对制造商定义的目录条目结构的预配,但 第 7.8 节 和 第 7.9 节中定义)。 必须能够解释 Generic DirectoryEntry 模板。

表 14 泛型 DirectoryEntry 模板

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 6.2.1 节 定义其内容。

自定义

1

19

此字段是必需的,派生自此模板的结构可以定义其内容。

FirstCluster

20

4

此字段是必需的,第 6.2.2 节 定义其内容。

数据长度

二十四

8

此字段是必需的,第 6.2.3 节 定义其内容。

6.2.1 EntryType 字段

EntryType 字段具有三种用法模式,字段的值定义(请参阅下面的列表)。

00h,这是目录结束标记,并适用以下条件:

给定 DirectoryEntry 中的所有其他字段实际上都保留

给定目录中的所有后续目录条目也是目录末尾标记

目录结束标记仅在目录条目集外部有效

实现可能会根据需要覆盖目录结束标记

在 01h 到 7Fh 之间(包括 01h 和 7Fh)时,这是未使用目录条目的标记,并适用以下条件:

给定 DirectoryEntry 中的所有其他字段实际上未定义

未使用的目录条目仅在目录条目集之外有效

实现可能会根据需要覆盖未使用的目录条目

此值范围对应于 InUse 字段(请参阅包含值 0 的 Section 6.2.1.4)

在 81h 和 FFh 之间(包括常规目录条目)和以下条件适用:

EntryType 字段的内容(请参阅 表 15)确定 DirectoryEntry 结构的其余部分的布局

此值范围(仅此值范围)在目录条目集中有效

此值范围直接对应于 InUse 字段(请参阅包含值 1 的 Section 6.2.1.4)

若要防止修改 InUse 字段(请参阅 第 6.2.1.4 节)错误地导致目录结束标记,值 80h 无效。

表 15 泛型 EntryType 字段结构

字段名称

偏移量

(位)

大小

(位)

注释

TypeCode

0

5

此字段是必需的,第 6.2.1.1 节 定义其内容。

类型重要性

5

1

此字段是必需的,第 6.2.1.2 节第 6.2.1.2 节 定义其内容。

类型类别

6

1

此字段是必需的,第 6.2.1.3 节 定义其内容。

正在使用

7

1

此字段是必需的,第 6.2.1.4 节 定义其内容。

6.2.1.1 TypeCode 字段

TypeCode 字段部分描述给定目录条目的特定类型。 此字段以及 TypeImportance 和 TypeCategory 字段(分别请参阅 Section 6.2.1.2 和 Section 6.2.1.3)唯一标识给定目录条目的类型。

此字段的所有可能值都有效,除非 TypeImportance 和 TypeCategory 字段都包含值 0;在这种情况下,此字段的值 0 无效。

6.2.1.2 TypeImportance 字段

TypeImportance 字段应描述给定目录条目的重要性。

此字段的有效值应为:

0,这意味着给定的目录条目至关重要(分别请参阅 第 6.3.1.2.1 节 和 第 6.4.1.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 模板

目录条目集中的第一个目录条目应为主目录条目。 目录条目集中的所有后续目录条目(如果有)应为辅助目录条目(请参阅 第 6.4 节)。

解释通用主 DirectoryEntry 模板的功能是必需的。

所有主目录条目结构都派生自泛型主 DirectoryEntry 模板(请参阅 表 16),该模板派生自 Generic DirectoryEntry 模板(请参阅 第 6.2 节)。

表 16 通用主 DirectoryEntry 模板

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 6.3.1 节 定义其内容。

次要计数

1

1

此字段是必需的,第 6.3.2 节 定义其内容。

SetChecksum

2

2

此字段是必需的,第 6.3.3 节 定义其内容。

GeneralPrimaryFlags

4

2

此字段是必需的,第 6.3.4 节 定义其内容。

自定义

6

14

此字段是必需的,派生自此模板的结构定义其内容。

FirstCluster

20

4

此字段是必需的,第 6.3.5 节 定义其内容。

数据长度

二十四

8

此字段是必需的,第 6.3.6 节 定义其内容。

6.3.1 EntryType 字段

EntryType 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.1 节)。

6.3.1.1 TypeCode 字段

TypeCode 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.1.1 节)。

6.3.1.2 TypeImportance 字段

TypeImportance 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.1.2 节)。

6.3.1.2.1 关键主目录条目

关键主目录条目包含对正确管理 exFAT 卷至关重要的信息。 只有根目录包含关键的主目录条目(文件目录条目是例外,请参阅 第 7.4 节)。

关键主目录条目的定义与主要 exFAT 修订号相关。 实现应支持所有关键主目录条目,并且只记录此规范定义的关键主目录条目结构。

6.3.1.2.2 良性主目录条目

良性主目录条目包含可用于管理 exFAT 卷的其他信息。 任何目录都可能包含良性的主目录条目。

良性主目录条目的定义与次要 exFAT 修订号相关联。 对于此规范或任何后续规范的任何良性主目录条目的支持是可选的。 无法识别的良性主目录条目将整个目录条目集呈现为无法识别(超出适用目录条目模板的定义)。

6.3.1.3 TypeCategory 字段

TypeCategory 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.1.3 节)。

对于此模板,此字段的有效值为 0。

6.3.1.4 InUse 字段

InUse 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.1.4 节)。

6.3.2 SecondaryCount 字段

SecondaryCount 字段应描述紧跟给定主目录条目的辅助目录条目数。 这些辅助目录条目以及给定的主目录条目构成目录条目集。

此字段的有效值范围应为:

至少 0,这意味着此主目录条目是目录条目集中的唯一条目

最多 255 个,这意味着接下来的 255 个目录条目和此主目录条目构成目录条目集

派生自此模板的关键主目录条目结构可能会重新定义 SecondaryCount 和 SetChecksum 字段。

6.3.3 SetChecksum 字段

SetChecksum 字段应包含给定目录条目集中所有目录条目的校验和。 但是,校验和排除此字段(请参阅 图 2)。 实现应在使用给定目录条目集中的任何其他目录条目之前验证此字段的内容是否有效。

派生自此模板的关键主目录条目结构可能会重新定义 SecondaryCount 和 SetChecksum 字段。

图 2 EntrySetChecksum 计算

UInt16 EntrySetChecksum

(

UCHAR * Entries, // points to an in-memory copy of the directory entry set

UCHAR SecondaryCount

)

{

UInt16 NumberOfBytes = ((UInt16)SecondaryCount + 1) * 32;

UInt16 Checksum = 0;

UInt16 Index;

for (Index = 0; Index < NumberOfBytes; Index++)

{

if ((Index == 2) || (Index == 3))

{

continue;

}

Checksum = ((Checksum&1) ? 0x8000 : 0) + (Checksum>>1) + (UInt16)Entries[Index];

}

return Checksum;

}

6.3.4 GeneralPrimaryFlags 字段

GeneralPrimaryFlags 字段包含标志(请参阅 表 17)。

派生自此模板的关键主目录条目结构可能会重新定义此字段。

表 17 泛型 GeneralPrimaryFlags 字段结构

字段名称

偏移量

(位)

大小

(位)

注释

可能分配

0

1

此字段是必需的,第 6.3.4.1 节 定义其内容。

NoFatChain

1

1

此字段是必需的,第 6.3.4.2 节 定义其内容。

自定义

2

14

此字段是必需的,派生自此模板的结构可以定义此字段。

6.3.4.1 分配可能字段

“分配可能”字段应描述给定目录条目是否可以在群集堆中分配。

此字段的有效值应为:

0,这意味着群集的关联分配是不可能的,FirstCluster 和 DataLength 字段实际上未定义(派生自此模板的结构可能重新定义这些字段)

1,这意味着群集的关联分配是可能的,FirstCluster 和 DataLength 字段已定义

6.3.4.2 NoFatChain 字段

NoFatChain 字段应指示活动 FAT 是否描述给定分配的群集链。

此字段的有效值应为:

0,这意味着分配群集链的相应 FAT 条目有效,实现应解释它们:如果“分配可能”字段包含值 0,或者“分配可能”字段包含值 1 且 FirstCluster 字段包含值 0,则此字段的唯一有效值为 0

1,这意味着关联的分配是一个连续的群集系列;群集的相应 FAT 条目无效,实现不应解释它们;实现可以使用以下公式计算关联的分配的大小:DataLength / (2SectorsPerClusterShift* 2BytesPerSectorShift) 向上舍入到最近的整数

如果派生自此模板的关键主目录条目结构重新定义 GeneralPrimaryFlags 字段,则任何关联分配的群集链的相应 FAT 条目都有效。

6.3.5 FirstCluster 字段

FirstCluster 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.2 节)。

如果 NoFatChain 位为 1,则 FirstCluster 必须指向群集堆中的有效群集。

派生自此模板的关键主目录条目结构可能会重新定义 FirstCluster 和 DataLength 字段。 派生自此模板的其他结构只有在“分配可能”字段包含值 0 时,才能重新定义 FirstCluster 和 DataLength 字段。

6.3.6 DataLength 字段

DataLength 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.3 节)。

如果 NoFatChain 位为 1,则 DataLength 不得为零。 如果 FirstCluster 字段为零,则 DataLength 也必须为零。

派生自此模板的关键主目录条目结构可能会重新定义 FirstCluster 和 DataLength 字段。 派生自此模板的其他结构只有在“分配可能”字段包含值 0 时,才能重新定义 FirstCluster 和 DataLength 字段。

6.4 通用辅助 DirectoryEntry 模板

辅助目录条目的核心用途是提供有关目录条目集的其他信息。 必须能够解释通用辅助 DirectoryEntry 模板。

关键和良性辅助目录条目的定义与次要 exFAT 修订号相关联。 对此规范或后续规范的任何关键或良性辅助目录条目的支持是可选的。

所有辅助目录条目结构都派生自泛型辅助 DirectoryEntry 模板(请参阅 表 18),该模板派生自 Generic DirectoryEntry 模板(请参阅 第 6.2 节)。

表 18 通用辅助 DirectoryEntry 模板

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 6.4.1 节 第 6.4.1 节 定义其内容。

常规辅助标志

1

1

此字段是必需的,第 6.4.2 节 定义其内容。

自定义

2

18

此字段是必需的,派生自此模板的结构定义其内容。

FirstCluster

20

4

此字段是必需的,第 6.4.3 节 定义其内容。

数据长度

二十四

8

此字段是必需的,第 6.4.4 节 定义其内容。

6.4.1 EntryType 字段

EntryType 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.1 节)

6.4.1.1 TypeCode 字段

TypeCode 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.1.1 节)。

6.4.1.2 TypeImportance 字段

TypeImportance 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.1.2 节)。

6.4.1.2.1 关键辅助目录条目

关键辅助目录条目包含对正确管理其包含目录条目集至关重要的信息。 尽管对任何特定关键辅助目录条目的支持是可选的,但无法识别的关键目录条目将整个目录条目集呈现为无法识别(超出适用目录条目模板的定义)。

但是,如果目录条目集包含至少一个无法识别实现的关键辅助目录条目,则实现最多应解释目录条目集中目录项的模板,而不是与目录条目集中任何目录条目关联的数据(文件目录条目是例外) 请参阅 第 7.4 节)。

6.4.1.2.2 良性辅助目录条目

良性辅助目录条目包含其他信息,这些信息可能有助于管理其包含的目录条目集。 支持任何特定的良性辅助目录条目是可选的。 无法识别的良性辅助目录条目不会将整个目录条目集呈现为无法识别。

实现可能会忽略它无法识别的任何良性辅助条目。

6.4.1.3 TypeCategory 字段

TypeCategory 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.1.3 节)。

对于此模板,此字段的有效值为 1。

6.4.1.4 InUse 字段

InUse 字段应符合 Generic DirectoryEntry 模板中提供的定义(请参阅 第 6.2.1.4 节)。

6.4.2 一般次要标志字段

GeneralSecondaryFlags 字段包含标志(请参阅 表 19)。

表 19 泛型 GeneralSecondaryFlags 字段结构

字段名称

偏移量

(位)

大小

(位)

注释

可能分配

0

1

此字段是必需的,第 6.4.2.1 节 定义其内容。

NoFatChain

1

1

此字段是必需的,第 6.4.2.2 节 定义其内容。

自定义

2

6

此字段是必需的,派生自此模板的结构可以定义此字段。

6.4.2.1 分配可能字段

“分配可能”字段应具有与泛型主 DirectoryEntry 模板中同名字段的定义(请参阅 第 6.3.4.1 节)。

6.4.2.2 NoFatChain 字段

NoFatChain 字段应具有与泛型主 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 不得为零。 如果 FirstCluster 字段为零,则 DataLength 也必须为零。

7 目录条目定义

exFAT 文件系统的修订版 1.00 定义了以下目录条目:

关键主数据库

分配位图 (第 7.1 节)

上例表 (第 7.2 节)

卷标签 (第 7.3 节)

文件(第 7.4 节)

良性原发性

卷 GUID (第 7.5 节)

TexFAT 填充(第 7.10 节)

关键次要

流扩展 (第 7.6 节)

文件名(第 7.7 节)

良性次级

供应商延期(第 7.8 节)

供应商分配(第 7.9 节)

7.1 分配位图目录条目

在 exFAT 文件系统中,FAT 不描述群集的分配状态;而是分配位图。 群集堆中存在分配位图(请参阅 第 7.1.5 节),并在根目录中具有相应的关键主目录条目(请参阅 表 20)。

NumberOfFats 字段确定根目录中有效分配位图目录条目的数目。 如果 NumberOfFats 字段包含值 1,则分配位图目录条目的唯一有效数为 1。 此外,仅当第一个分配位图描述时,一个分配位图目录条目才有效(请参阅 第 7.1.2.1 节)。 如果 NumberOfFats 字段包含值 2,则分配位图目录条目的唯一有效数为 2。 此外,仅当两个分配位图目录条目描述第一个分配位图时,两个分配位图目录条目才有效,另一个条目描述了第二个分配位图。

表 20 分配位图 DirectoryEntry 结构

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 7.1.1 节 定义其内容。

BitmapFlags

1

1

此字段是必需的,第 7.1.2 节 定义其内容。

保留

2

18

此字段是必需的,并且保留其内容。

FirstCluster

20

4

此字段是必需的,第 7.1.3 节 定义其内容。

数据长度

二十四

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 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.1.4 节)。

7.1.2 BitmapFlags 字段

BitmapFlags 字段包含标志(请参阅 表 21)。

表 21 BitmapFlags 字段结构

字段名称

偏移量

(位)

大小

(位)

注释

BitmapIdentifier

0

1

此字段是必需的,第 7.1.2.1 节 定义其内容。

保留

1

7

此字段是必需的,并且保留其内容。

7.1.2.1 BitmapIdentifier 字段

BitmapIdentifier 字段应指示给定目录条目所描述的分配位图。 实现应将第一个分配位图与第一个 FAT 结合使用,并将第二个分配位图与第二个 FAT 结合使用。 ActiveFat 字段描述哪些 FAT 和分配位图处于活动状态。

此字段的有效值应为:

0,这意味着给定的目录条目描述了第一个分配位图

1,这意味着给定的目录条目描述了第二个分配位图,并且仅在 NumberOfFats 包含值 2 时才可能

7.1.3 FirstCluster 字段

FirstCluster 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.5 节)。

此字段包含群集链的第一个群集的索引,如 FAT 中所述,该索引承载分配位图。

7.1.4 DataLength 字段

DataCluster 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.6 节)。

7.1.5 分配位图

分配位图记录群集堆中的群集的分配状态。 分配位图中的每个位都指示其相应的群集是否可用于分配。

分配位图表示从最低到最高索引的群集(请参阅表 22 )。 出于历史原因,第一个群集具有索引 2。

注释

位图中的第一位是第一个字节的最低顺序位。

表 22 分配位图结构

字段名称

偏移量

(位)

大小

(位)

注释

BitmapEntry[2]

0

1

此字段是必需的,第 7.1.5.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] 表示群集堆中的第一个分类,BitmapEntry[ClusterCount+1] 表示群集堆中的最后一个分类。

这些字段的有效值应为:

0,其中将相应的群集描述为可用于分配

1,它描述相应的群集不能用于分配(群集分配可能已使用相应的群集,或者活动 FAT 可能会将相应的群集描述为错误的群集)

7.2 大写表目录条目

Up-case 表定义从小写字符到大写字符的转换。 这一点很重要,因为使用 Unicode 字符和 exFAT 文件系统的文件名目录条目(请参阅第 7.7 节)不区分大小写和保留大小写。 群集堆中存在案例表(请参阅 第 7.2.5 节),并在根目录中具有相应的关键主目录条目(请参阅 表 23)。 Up-case Table 目录条目的有效数目为 1。

由于 Up-case Table 与文件名之间的关系,实现不应修改 Up-case Table,只是由于格式作的结果。

表 23 Up-case Table DirectoryEntry 结构

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 7.2.1 节 定义其内容。

Reserved1

1

3

此字段是必需的,并且保留其内容。

TableChecksum

4

4

此字段是必需的,第 7.2.2 节 定义其内容。

Reserved2

8

12

此字段是必需的,并且保留其内容。

FirstCluster

20

4

此字段是必需的,第 7.2.3 节 定义其内容。

数据长度

二十四

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 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.1.4 节)。

7.2.2 TableChecksum 字段

TableChecksum 字段包含 Up-case Table 的校验和(FirstCluster 和 DataLength 字段描述)。 实现应在使用 Up-case Table 之前验证此字段的内容是否有效。

图 3 TableChecksum 计算

UInt32 TableChecksum

(

UCHAR * Table, // points to an in-memory copy of the up-case table

UInt64 DataLength

)

{

UInt32 Checksum = 0;

UInt64 Index;

for (Index = 0; Index < DataLength; Index++)

{

Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Table[Index];

}

return Checksum;

}

7.2.3 FirstCluster 字段

FirstCluster 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.5 节)。

此字段包含群集链的第一个群集的索引,如 FAT 中所述,该索引承载 Up-case 表。

7.2.4 DataLength 字段

DataCluster 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.6 节)。

7.2.5 大写表

大写表是一系列 Unicode 字符映射。 字符映射由一个 2 字节字段组成,上写表中的字段索引表示要上写的 Unicode 字符,以及表示上写 Unicode 字符的 2 字节字段。

前 128 个 Unicode 字符具有强制映射(请参阅表 24 )。 对于前 128 个 Unicode 字符中的任何一个,具有任何其他字符映射的上写表无效。

仅支持强制映射范围中的字符的实现可能会忽略上写表其余部分的映射。 此类实现仅在创建或重命名文件时使用强制映射范围中的字符(通过文件名目录条目,请参阅 第 7.7 节)。 对现有文件名进行大小写时,此类实现不得从非强制映射范围中向上写字符,但应将它们保留在生成的大写文件名中(这是部分向上大小写)。 比较文件名时,此类实现应仅将与非强制映射范围中的 Unicode 字符进行比较的名称视为等效的文件名。 虽然此类文件名可能只是等效的,但此类实现无法确保完全大小写的文件名不会与比较中的名称相冲突。

表 24 必需前 128 个例程表条目

表索引

+ 0

+ 1

+ 2

+ 3

+ 4

+ 5

+ 6

+ 7

0000h

0000h

0001h

0002h

0003h

0004h

0005h

0006h

0007h

0008h

0008h

0009h

000Ah

000Bh

000Ch

000Dh

000Eh

000Fh

0010h

0010h

0011h

0012h

0013h

0014h

0015h

0016h

0017h

0018h

0018h

0019h

001Ah

001Bh

001Ch

001Dh

001Eh

001Fh

0020h

0020h

0021h

0022h

0023h

0024h

0025h

0026h

0027h

0028h

0028h

0029h

002Ah

002Bh

002Ch

002Dh

002Eh

002Fh

0030h

0030h

0031h

0032h

0033h

0034h

0035h

0036h

0037h

0038h

0038h

0039h

003Ah

003Bh

003Ch

003Dh

003Eh

003Fh

0040h

0040h

0041h

0042h

0043h

0044h

0045h

0046h

0047h

0048h

0048h

0049h

004Ah

004Bh

004Ch

004Dh

004Eh

004Fh

0050h

0050h

0051h

0052h

0053h

0054h

0055h

0056h

0057h

0058h

0058h

0059h

005Ah

005Bh

005Ch

005Dh

005Eh

005Fh

0060h

0060h

0041h

0042h

0043h

0044h

0045h

0046h

0047h

0068h

0048h

0049h

004Ah

004Bh

004Ch

004Dh

004Eh

004Fh

0070h

0050h

0051h

0052h

0053h

0054h

0055h

0056h

0057h

0078h

0058h

0059h

005Ah

007Bh

007Ch

007Dh

007Eh

007Fh

(注意:具有非标识上例映射的条目加粗)

格式化卷时,实现可以使用标识映射压缩以压缩格式生成大写表,因为 Unicode 字符空间的大部分没有大小写的概念(这意味着“小写”和“大写”字符是等效的)。 实现通过表示一系列标识映射来压缩大小写表,其值 FFFFh 后跟标识映射的数目。

例如,实现可能表示前 100 个 (64h) 字符映射,其中包含压缩大小写表的以下 8 个条目:

FFFFh, 0061h, 0041h, 0042h, 0043h

前两个条目表示前 97 个字符(从 0000h 到 0060h)具有标识映射。 后续字符 0061h 到 0063h 分别映射到字符 0041h 到 0043h。

在格式化卷时提供压缩大小写表的功能是可选的。 但是,必须解释未压缩表和压缩大小写表的功能。 TableChecksum 字段的值始终符合卷上存在大小写表的方式,该表可能采用压缩或未压缩格式。

7.2.5.1 建议的上例表

格式化卷时,实现应以压缩格式记录建议的事例表(见 表 25),其中 TableChecksum 字段的值为 E619D30Dh。

如果实现定义自己的大小写表(压缩或未压缩),则该表应涵盖完整的 Unicode 字符范围(从字符代码 0000h 到 FFFFh(含 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

0224 h

0224 h

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(凌晨3点)

0301h

0302h

0303h

0304h

0305h

0306h

0307h

0308h

0308h

0309h

030Ah

030Bh

030Ch

030Dh

030Eh

030Fh

0310h

03时10分

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

05:00

05:00

0502h

0502h

0504h

0504h

0506h

0506h

0508h

0508h

0508h

050Ah

050Ah

050Ch

050Ch

050Eh

050Eh

0510h

0510h

0510h

0512h

0512h

0514h

0515h

0516h

0517h

0518h

0518h

0519h

051Ah

051Bh

051Ch

051Dh

051Eh

051Fh

0520h

0520h

0521h

0522h

0523h

0524h

0525h

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

05:47小时

0548h

0548h

0549h

054Ah

054Bh

054Ch

054Dh

054Eh

054Fh

0550h

0550h

0551h

0552h

0553h

0554h

0555h

0556h

0557h

0558h

0558h

05:59时

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

05:47小时

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

200迪拉姆

200Eh

200Fh

2010h

2011h

2012h

2013h

0820h

2014h

2015h

2016h

2017h

2018h

2019h

201Ah

201Bh

0828h

201Ch

201Dh

201Eh

201Fh

2020h

2021h

2022h

2023h

0830h

2024h

2025h

2026h

2027h

2028h

2029h

202Ah

202Bh

0838h

202Ch

202Dh

202Eh

202Fh

20:30

2031h

2032h

2033h

0840h

2034h

20点35分

2036h

2037h

2038h

2039h

203Ah

203Bh

0848h

203Ch

203Dh

203Eh

203Fh

20点40分

2041h

2042h

2043h

0850h

20点44分

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

2096小时

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

21:00

2101h

2102h

2103h

0910h

21:04时

21时05分

2106h

2107h

2108h

2109h

210Ah

210Bh

0918h

210Ch

210Dh

210Eh

210Fh

2110h

2111h

2112h

2113h

0920h

2114h

21:15

2116h

2117h

2118h

21时19分

211Ah

211Bh

0928h

211Ch

211Dh

211Eh

211Fh

2120h

2121h

2122h

2123h

0930h

2124h

2125h

2126h

2127h

2128h

2129h

212Ah

212Bh

0938h

212Ch

212Dh

212Eh

212华氏度

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

2160小时

2161h

2162h

2163h

0970h

2164h

2165h

2166h

2167h

2168h

2169h

216Ah

216Bh

0978h

216Ch

216Dh

216Eh

216Fh

2160小时

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 结构

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 7.3.1 节 定义其内容。

字符统计

1

1

此字段是必需的,第 7.3.2 节 定义其内容。

VolumeLabel

2

22

此字段是必需的,第 7.3.3 节 定义其内容。

保留

二十四

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 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.1.4 节)。

7.3.2 CharacterCount 字段

CharacterCount 字段应包含 VolumeLabel 字段包含的 Unicode 字符串的长度。

此字段的有效值范围应为:

至少 0,这意味着 Unicode 字符串长度为 0 个字符(相当于无卷标签)

最多 11 个字符,这意味着 Unicode 字符串长度为 11 个字符

7.3.3 VolumeLabel 字段

VolumeLabel 字段应包含 Unicode 字符串,该字符串是卷的用户友好名称。 VolumeLabel 字段与文件名目录项的 FileName 字段具有相同的字符集(请参阅 第 7.7.3 节)。

7.4 文件目录条目

文件目录条目描述文件和目录。 它们是关键主目录条目,任何目录可能包含零个或多个文件目录条目(请参阅表 27 )。 要使文件目录条目有效,只有一个流扩展目录条目和至少一个文件名目录条目必须紧跟文件目录条目(分别请参阅 第 7.6 节 7.6 和 第 7.7 节)。

表 27 File DirectoryEntry

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 7.4.1 节 定义其内容。

次要计数

1

1

此字段是必需的,第 7.4.2 节 定义其内容。

SetChecksum

2

2

此字段是必需的,第 7.4.3 节 定义其内容。

FileAttributes

4

2

此字段是必需的,第 7.4.4 节 定义其内容。

Reserved1

6

2

此字段是必需的,并且保留其内容。

创建时间戳

8

4

此字段是必需的,第 7.4.5 节 定义其内容。

最后修改时间戳

12

4

此字段是必需的,第 7.4.6 节 定义其内容。

最后访问时间戳

16

4

此字段是必需的,第 7.4.7 节 定义其内容。

创建10毫秒增量 (Create10msIncrement)

20

1

此字段是必需的,第 7.4.5 节 定义其内容。

最后修改10毫秒增量

21

1

此字段是必需的,第 7.4.6 节 定义其内容。

UTC 偏移量创建

22

1

此字段是必需的,第 7.4.5 节 定义其内容。

LastModifiedUtcOffset(最后修改的UTC偏移量)

23

1

此字段是必需的,第 7.4.6 节 定义其内容。

LastAccessedUtcOffset(最后访问的协调世界时偏移量)

二十四

1

此字段是必需的,第 7.4.7 节 定义其内容。

Reserved2

二十五

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 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.1.4 节)。

7.4.2 SecondaryCount 字段

SecondaryCount 字段应符合泛型主 DirectoryEntry 模板中提供的定义(请参阅 第 6.3.2 节)。

7.4.3 SetChecksum 字段

SetChecksum 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.3 节)。

7.4.4 FileAttributes 字段

FileAttributes 字段包含标志(请参阅表 28 )。

表 28 FileAttributes 字段结构

字段名称

偏移量

(位)

大小

(位)

注释

ReadOnly

0

1

此字段是必需的,符合 MS-DOS 定义。

隐藏

1

1

此字段是必需的,符合 MS-DOS 定义。

系统

2

1

此字段是必需的,符合 MS-DOS 定义。

Reserved1

3

1

此字段是必需的,并且保留其内容。

目录

4

1

此字段是必需的,符合 MS-DOS 定义。

档案

5

1

此字段是必需的,符合 MS-DOS 定义。

Reserved2

6

10

此字段是必需的,并且保留其内容。

7.4.5 CreateTimestamp、Create10msIncrement 和 CreateUtcOffset 字段

同时,CreateTimestamp 和 CreateTime10msIncrement 字段应描述创建给定文件/目录的本地日期和时间。 CreateUtcOffset 字段描述本地日期和时间与 UTC 的偏移量。 实现应在创建给定目录条目集时设置这些字段。

这些字段应符合 Timestamp、10msIncrement 和 UtcOffset 字段的定义(分别请参阅 第 7.4.8 节、第 7.4.9 节和 第 7.4.10 节)。

7.4.6 LastModifiedTimestamp、LastModified10msIncrement 和 LastModifiedUtcOffset 字段

同时,LastModifiedTimestamp 和 LastModifiedTime10msIncrement 字段应描述上次修改与给定流扩展目录条目关联的任何群集内容的本地日期和时间。 LastModifiedUtcOffset 字段描述本地日期和时间与 UTC 的偏移量。 实现应更新以下字段:

修改与给定流扩展目录条目关联的任何群集的内容后(ValidDataLength 字段所描述的内容除外)

更改 ValidDataLength 或 DataLength 字段的值后

这些字段应符合 Timestamp、10msIncrement 和 UtcOffset 字段的定义(分别请参阅 第 7.4.8 节、第 7.4.9 节和 第 7.4.10 节)。

7.4.7 LastAccessedTimestamp 和 LastAccessedUtcOffset 字段

LastAccessedTimestamp 字段应描述上次访问与给定流扩展目录条目关联的任何群集内容的本地日期和时间。 LastAccessedUtcOffset 字段描述本地日期和时间与 UTC 的偏移量。 实现应更新以下字段:

修改与给定流扩展目录条目关联的任何群集的内容后(除了存在 ValidDataLength 之外的内容除外)

更改 ValidDataLength 或 DataLength 字段的值后

在读取与给定的 Stream Extension 目录条目关联的任何群集的内容后,实现应更新这些字段。

这些字段应符合 Timestamp 和 UtcOffset 字段的定义(分别请参阅 第 7.4.8 节 和 第 7.4.10 节)。

7.4.8 时间戳字段

时间戳字段同时描述本地日期和时间(见 表 29)。

表 29 时间戳字段结构

字段名称

偏移量

(位)

大小

(位)

注释

DoubleSeconds

0

5

此字段是必需的,第 7.4.8.1 节 定义其内容。

分钟

5

6

此字段是必需的,第 7.4.8.2 节 定义其内容。

小时

11

5

此字段是必需的,第 7.4.8.3 节 定义其内容。

日

16

5

此字段是必需的,第 7.4.8.4 节 定义其内容。

月

21

4

此字段是必需的,第 7.4.8.5 节 定义其内容。

年

二十五

7

此字段是必需的,第 7.4.8.6 节 定义其内容。

7.4.8.1 DoubleSeconds 字段

DoubleSeconds 字段应以两秒的倍数描述时间戳字段的秒部分。

此字段的有效值范围应为:

0,表示 0 秒

29,表示 58 秒

7.4.8.2 分钟字段

Minute 字段应描述 Timestamp 字段的分钟部分。

此字段的有效值范围应为:

0,表示 0 分钟

59,表示 59 分钟

7.4.8.3 小时字段

“小时”字段应描述“时间戳”字段的小时部分。

此字段的有效值范围应为:

0,表示 00:00 小时

23,表示 23:00 小时

7.4.8.4 天字段

“日期”字段应描述“时间戳”字段的日期部分。

此字段的有效值范围应为:

1,这是给定月份的第一天

给定月份的最后一天(给定月份定义有效天数)

7.4.8.5 月字段

“月”字段应描述时间戳字段的月份部分。

此字段的有效值范围应为:

至少 1,表示 1 月

最多 12 个代表 12 月

7.4.8.6 年字段

“年份”字段应描述时间戳字段的年份部分,相对于 1980 年。 此字段表示值为 0 的 1980 年和值为 127 的 2107 年。

此字段的所有可能值都有效。

7.4.9 10msIncrement 字段

10msIncrement 字段应以十毫秒的倍数为单位为相应的时间戳字段提供额外的时间解析。

这些字段的有效值范围应为:

至少 0,表示 0 毫秒

最多 199 毫秒,表示 1990 毫秒

7.4.10 UtcOffset 字段

UtcOffset 字段(见 表 30)应描述其相应时间戳和 10msIncrement 字段所描述的 UTC 到本地日期和时间的偏移量。 从 UTC 到本地日期和时间的偏移量包括时区和其他日期时间调整的影响,例如夏令时和区域夏季时间的变化。

表 30 UtcOffset 字段结构

字段名称

偏移量

(位)

大小

(位)

注释

OffsetFromUtc

0

7

此字段是必需的,第 7.4.10.1 节定义其内容。

偏移有效

7

1

此字段是必需的,第 7.4.10.2 节 定义其内容。

7.4.10.1 OffsetFromUtc 字段

OffsetFromUtc 字段应描述相关 Timestamp 和 10msIncrement 字段包含的本地日期和时间的 UTC 偏移量。 此字段以 15 分钟的间隔描述 UTC 的偏移量(请参阅表 31)。

表 31 OffsetFromUtc 字段 的值的含义

值

带符号十进制等效

说明

3Fh

63

本地日期和时间为 UTC + 15:45

3Eh

62

本地日期和时间为 UTC + 15:30

.

.

.

.

.

.

.

.

.

01 小时

1

本地日期和时间为 UTC + 00:15

00h

0

本地日期和时间为 UTC

7Fh

-1

本地日期和时间为 UTC – 00:15

.

.

.

.

.

.

.

.

.

41 小时

-63

本地日期和时间为 UTC – 15:45

40小时

-64

本地日期和时间为 UTC – 16:00

如上表所示,此字段的所有可能值都有效。 但是,当以下情况时,实现应只记录此字段的值 00h:

本地日期和时间实际上与 UTC 相同,在这种情况下,OffsetValid 字段的值应为 1

本地日期和时间未知,在这种情况下,OffsetValid 字段的值应为 1,实现应将 UTC 视为本地日期和时间

UTC 未知,在这种情况下,OffsetValid 字段的值应为 0

如果 UTC 的本地日期和时间偏移量不是 15 分钟间隔的倍数,则实现应在 OffsetFromUtc 字段中记录 00 小时,并将 UTC 视为本地日期和时间。

7.4.10.2 OffsetValid 字段

OffsetValid 字段应描述 OffsetFromUtc 字段的内容是否有效,如下所示:

0,这意味着 OffsetFromUtc 字段的内容无效

且应为 00h

1,这意味着 OffsetFromUtc 字段的内容有效

当 UTC 不可用于计算 OffsetFromUtc 字段的值时,实现应仅将此字段设置为值 0。 如果此字段包含值 0,则实现应将 Timestamp 和 10msIncrement 字段视为与当前本地日期和时间相同的 UTC 偏移量。

7.5 卷 GUID 目录条目

卷 GUID 目录条目包含一个 GUID,它使实现能够唯一且以编程方式区分卷。 卷 GUID 作为根目录中的良性主目录条目存在(请参阅 表 32)。 卷 GUID 目录条目的有效数目从 0 到 1 不等。

表 32 卷 GUID DirectoryEntry

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 7.5.1 节 定义其内容。

次要计数

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 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.1.4 节)。

7.5.2 SecondaryCount 字段

SecondaryCount 字段应符合泛型主 DirectoryEntry 模板中提供的定义(请参阅 第 6.3.2 节)。

对于卷 GUID 目录条目,此字段的有效值为 0。

7.5.3 SetChecksum 字段

SetChecksum 字段应符合通用主目录模板中提供的定义(请参阅 第 6.3.3 节)。

7.5.4 GeneralPrimaryFlags 字段

GeneralPrimaryFlags 字段应符合通用主 DirectoryEntry 模板中提供的定义(请参阅 第 6.3.4 节),并定义要保留的 CustomDefined 字段的内容。

7.5.4.1 分配可能字段

“分配可能”字段应符合泛型主 DirectoryEntry 模板中提供的定义(请参阅 第 6.3.4.1 节)。

对于卷 GUID 目录条目,此字段的有效值为 0。

7.5.4.2 NoFatChain 字段

NoFatChain 字段应符合通用主 DirectoryEntry 模板中提供的定义(请参阅 第 6.3.4.2 节)。

7.5.5 VolumeGuid 字段

VolumeGuid 字段应包含唯一标识给定卷的 GUID。

此字段的所有可能值都是有效的,但 {00000000-0000-0000-0000-000000000000}null GUID 除外。

7.6 流扩展目录条目

Stream Extension 目录项是文件目录条目集中的关键辅助目录条目(请参阅表 33 )。 文件目录条目集中的有效流扩展目录条目数为 1。 此外,仅当此目录项紧跟文件目录条目时,此目录条目才有效。

表 33 流扩展 DirectoryEntry

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 7.6.1 节 定义其内容。

常规辅助标志

1

1

此字段是必需的,第 7.6.2 节 定义其内容。

Reserved1

2

1

此字段是必需的,并且保留其内容。

NameLength

3

1

此字段是必需的,第 7.6.3 节 定义其内容。

NameHash

4

2

此字段是必需的,第 7.6.4 节 定义其内容。

Reserved2

6

2

此字段是必需的,并且保留其内容。

有效数据长度

8

8

此字段是必需的,第 7.6.5 节 定义其内容。

保留3

16

4

此字段是必需的,并且保留其内容。

FirstCluster

20

4

此字段是必需的,第 7.6.6 节 定义其内容。

数据长度

二十四

8

此字段是必需的,第 7.6.7 节 定义其内容。

7.6.1 EntryType 字段

EntryType 字段应符合通用辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.1 节)。

7.6.1.1 TypeCode 字段

TypeCode 字段应符合泛型辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.1.1 节)。

对于流扩展目录条目,此字段的有效值为 0。

7.6.1.2 TypeImportance 字段

TypeImportance 字段应符合泛型辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.1.2 节)。

对于流扩展目录条目,此字段的有效值为 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 字段应符合通用辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.2 节),并定义要保留的 CustomDefined 域的内容。

7.6.2.1 分配可能字段

“分配可能”字段应符合泛型辅助 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 字段应描述写入数据流用户数据的距离。 实现应在将数据进一步写入数据流时更新此字段。 在存储介质上,未定义有效数据长度与数据流的数据长度之间的数据。 实现应返回超出有效数据长度的读取作的零。

如果相应的文件目录条目描述目录,则此字段的唯一有效值等于 DataLength 字段的值。 否则,此字段的有效值范围应为:

至少 0,这意味着没有将用户数据写出到数据流

在大多数情况下,DataLength,这意味着用户数据已写出到数据流的整个长度

7.6.6 FirstCluster 字段

FirstCluster 字段应符合通用辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.3 节)。

此字段应包含托管用户数据的数据流第一个群集的索引。

7.6.7 DataLength 字段

DataLength 字段应符合通用辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.4 节)。

如果相应的文件目录条目描述目录,则此字段的有效值是关联的分配的整个大小(以字节为单位),可能为 0。 此外,对于目录,此字段的最大值为 256MB。

7.7 文件名目录条目

文件名目录项是文件目录条目集中的关键辅助目录条目(请参阅 表 34)。 文件目录条目集中的有效文件名目录条目数为 NameLength / 15,向上舍入为最接近的整数。 此外,仅当文件名目录条目紧跟流扩展目录条目作为连续序列时才有效。 文件名目录条目组合在一起,构成文件目录条目集的文件名。

给定目录条目的所有子项应具有唯一的文件名目录条目集。 也就是说,在任何一个目录中的向上大小写后,不能有重复的文件或目录名称。

表 34 文件名 DirectoryEntry

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 7.7.1 节 定义其内容。

常规辅助标志

1

1

此字段是必需的,第 7.7.2 节 定义其内容。

文件名

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 字段应符合通用辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.2 节),并定义要保留的 CustomDefined 域的内容。

7.7.2.1 分配可能字段

“分配可能”字段应符合泛型辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.2.1 节)。

对于“文件名”目录条目,此字段的有效值为 0。

7.7.2.2 NoFatChain 字段

NoFatChain 字段应符合通用辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.2.2 节)。

7.7.3 FileName 字段

FileName 字段应包含 Unicode 字符串,该字符串是文件名的一部分。 在文件目录条目集中存在文件名目录条目的顺序,FileName 字段连接以形成文件目录条目集的文件名。 鉴于 FileName 字段的长度为 15 个字符,并且文件名目录条目的最大数目为 17,最终连接文件名的最大长度为 255。

串联的文件名与其他基于 FAT 的文件系统具有相同的非法字符集(请参阅 表 35)。 实现应将 FileName 字段未使用的字符设置为值 0000h。

表 35 无效的文件名字符

字符代码

说明

字符代码

说明

字符代码

说明

0000h

控制代码

0001h

控制代码

0002h

控制代码

0003h

控制代码

0004h

控制代码

0005h

控制代码

0006h

控制代码

0007h

控制代码

0008h

控制代码

0009h

控制代码

000Ah

控制代码

000Bh

控制代码

000Ch

控制代码

000Dh

控制代码

000Eh

控制代码

000Fh

控制代码

0010h

控制代码

0011h

控制代码

0012h

控制代码

0013h

控制代码

0014h

控制代码

0015h

控制代码

0016h

控制代码

0017h

控制代码

0018h

控制代码

0019h

控制代码

001Ah

控制代码

001Bh

控制代码

001Ch

控制代码

001Dh

控制代码

001Eh

控制代码

001Fh

控制代码

0022h

引号

002Ah

星号

002Fh

正斜杠

003Ah

结肠

003Ch

小于符号

003Eh

大于符号

003Fh

问号

005Ch

反斜杠

007Ch

垂直条形图

文件名“.”和“.”。分别具有“此目录”和“包含目录”的特殊含义。 实现不应在 FileName 字段中记录其中任一保留文件名。 但是,实现可能会在目录列表中生成这两个文件名,以引用所列出的目录和包含目录。

实现可能希望将文件和目录名称限制为仅 ASCII 字符集。 如果是这样,它们应将其字符用于前 128 个 Unicode 条目中的有效字符范围。 它们仍必须在卷上的 Unicode 中存储文件和目录名称,并在与用户交互时转换为/从 ASCII/Unicode 转换。

7.8 供应商扩展目录条目

供应商扩展目录项是文件目录条目集中的良性辅助目录条目(请参阅 表 36)。 文件目录条目集可以包含任意数量的供应商扩展目录条目,最多限制辅助目录条目数,减少其他辅助目录条目的数量。 此外,仅当供应商扩展目录条目不位于所需的流扩展和文件名目录条目之前时,它们才有效。

供应商扩展目录条目使供应商能够通过 VendorGuid 字段在单个文件目录条目集中具有唯一、特定于供应商的目录条目(请参阅 表 36)。 唯一的目录条目有效地使供应商能够扩展 exFAT 文件系统。 供应商可以定义供应商定义字段的内容(请参阅 表 36)。 供应商实现可以维护 VendorDefined 字段的内容,并提供特定于供应商的功能。

无法识别供应商扩展目录条目 GUID 的实现应将目录条目视为任何其他无法识别的良性辅助目录条目(请参阅 第 8.2 节)。

表 36 供应商扩展 DirectoryEntry

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 7.8.1 节 定义其内容。

常规辅助标志

1

1

此字段是必需的,第 7.8.2 节 定义其内容。

VendorGuid

2

16

此字段是必需的,第 7.8.3 节 定义其内容。

供应商定义

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 分配可能字段

“分配可能”字段应符合泛型辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.2.1 节)。

对于供应商扩展目录条目,此字段的有效值为 0。

7.8.2.2 NoFatChain 字段

NoFatChain 字段应符合通用辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.2.2 节)。

7.8.3 VendorGuid 字段

VendorGuid 字段应包含唯一标识给定供应商扩展的 GUID。

此字段的所有可能值都是有效的,但 {00000000-0000-0000-0000-000000000000}null GUID 除外。 但是,供应商应在定义扩展时使用 GUID 生成工具(如 GuidGen.exe)来选择 GUID。

此字段的值确定 VendorDefined 字段的特定于供应商的结构。

7.9 供应商分配目录条目

供应商分配目录项是文件目录条目集中的良性辅助目录条目(请参阅 表 37)。 文件目录条目集可以包含任意数量的供应商分配目录条目,最多限制辅助目录条目数,减少其他辅助目录条目的数量。 此外,仅当供应商分配目录项不位于所需的流扩展和文件名目录条目之前时,它们才有效。

供应商分配目录条目使供应商能够通过 VendorGuid 字段在单个文件目录条目集中具有唯一、特定于供应商的目录条目(请参阅 表 37)。 唯一的目录条目有效地使供应商能够扩展 exFAT 文件系统。 供应商可以定义关联群集的内容(如果有)。 供应商实现可以维护关联群集的内容(如果有)并提供特定于供应商的功能。

无法识别供应商分配目录条目 GUID 的实现应将目录条目视为任何其他无法识别的良性辅助目录条目(请参阅 第 8.2 节)。

表 37 供应商分配 DirectoryEntry

字段名称

偏移量

(字节)

大小

(字节)

注释

EntryType

0

1

此字段是必需的,第 7.9.1 节 定义其内容。

常规辅助标志

1

1

此字段是必需的,第 7.9.2 节 定义其内容。

VendorGuid

2

16

此字段是必需的,第 7.9.3 节 定义其内容。

供应商定义

18

2

此字段是必需的,供应商可以定义其内容。

FirstCluster

20

4

此字段是必需的,第 7.9.4 节 定义其内容。

数据长度

二十四

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 分配可能字段

“分配可能”字段应符合泛型辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.2.1 节)。

对于供应商分配目录条目,此字段的有效值为 1。

7.9.2.2 NoFatChain 字段

NoFatChain 字段应符合通用辅助 DirectoryEntry 模板中提供的定义(请参阅 第 6.4.2.2 节)。

7.9.3 VendorGuid 字段

VendorGuid 字段应包含唯一标识给定供应商分配的 GUID。

此字段的所有可能值都是有效的,但 {00000000-0000-0000-0000-000000000000}null GUID 除外。 但是,供应商应在定义扩展时使用 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 Revision 1.00 文件系统基本规范)未定义 TexFAT 填充目录条目。 但是,其类型代码为 1,其类型重要性为 1。 此规范的实现应将 TexFAT Padding 目录条目视为与任何其他无法识别的良性主目录条目相同,实现不应移动 TexFAT Padding 目录条目。

8 实现说明

8.1 建议的写入排序

实现应确保卷尽可能能够复原到电源故障和其他不可避免的故障。 创建新目录条目或修改群集分配时,实现通常应遵循以下写入顺序:

将 VolumeDirty 字段的值设置为 1

如有必要,请更新活动 FAT

更新活动分配位图

根据需要创建或更新目录条目

将 VolumeDirty 字段的值清除为 0(如果第一步之前的值为 0)

删除目录条目或释放群集分配时,实现应遵循以下写入顺序:

将 VolumeDirty 字段的值设置为 1

如有必要,请删除或更新目录条目

如有必要,请更新活动 FAT

更新活动分配位图

将 VolumeDirty 字段的值清除为 0(如果第一步之前的值为 0)

8.2 无法识别的目录条目的含义

将来具有相同的主要修订号、1 和大于 0 的次要修订号的 exFAT 规范可以定义新的良性主要、关键次要目录和良性辅助目录条目。 只有较高主要修订号的 exFAT 规范才能定义新的关键主目录条目。 此规范的实现(exFAT Revision 1.00 文件系统基本规范)应能够装载和访问主要修订号 1 的任何 exFAT 卷和任何次要修订号。 这演示了实现可能会遇到无法识别的目录条目的情况。 下面介绍了这些方案的含义:

根目录中存在无法识别的关键主目录条目会使卷无效。 任何关键主目录条目(文件目录条目除外)在任何非根目录中都呈现宿主目录无效。

实现不应修改无法识别的良性主目录条目或其关联的群集分配。 但是,删除目录时,仅当删除目录时,实现应删除无法识别的良性主目录条目,并释放所有关联的群集分配(如果有)。

实现不应修改无法识别的关键辅助目录条目或其关联的群集分配。 目录条目集中存在一个或多个无法识别的关键辅助目录条目会使整个目录条目集无法识别。 删除包含一个或多个无法识别的关键辅助目录条目的目录条目集时,实现将释放与无法识别的关键辅助目录条目关联的所有群集分配(如果有)。 此外,如果目录条目集描述目录,则实现可以:

遍历到目录中

枚举它包含的目录条目

删除包含的目录条目

将包含的目录条目移动到其他目录

但是,实现不应:

按说明修改包含的目录条目(删除除外)

创建新的包含的目录条目

打开包含的目录条目(遍历和枚举除外),如前所述

实现不应修改无法识别的良性辅助目录条目或其关联的群集分配。 实现应忽略无法识别的良性辅助目录条目。 删除目录条目集时,实现将释放与无法识别的良性辅助目录条目关联的所有群集分配(如果有)。

9 个文件系统限制

9.1 扇区大小限制

BytesPerSectorShift 字段定义下限和上限扇区大小限制(计算结果为 下限:512 字节;上限:4,096 字节)。

9.2 群集大小限制

SectorsPerClusterShift 字段定义下限和上限群集大小限制(下限:1 扇区;上限:25 -- BytesPerSectorShift 扇区,其计算结果为 32MB)。

9.3 群集堆大小限制

群集堆应至少包含足够的空间来托管以下基本文件系统结构:根目录、所有分配位图和上写表。

较低的群集堆大小限制是驻留在群集堆中的每个基本文件系统结构的较小大小限制的函数。 即使给定尽可能小的群集(512 字节),每个基本文件系统结构也不需要多个群集。 因此,下限为:2 + NumberOfFats 群集,计算结果为 3 或 4 个群集,具体取决于 NumberOfFats 字段的值。

群集堆大小上限是群集的最大可能数量的简单函数,ClusterCount 字段定义(上限:232- 11 个群集)。 无论群集大小如何,此类群集堆都具有足够的空间来至少托管基本文件系统结构。

9.4 卷大小限制

VolumeLength 字段定义卷大小上限(下限:220/ 2BytesPerSectorShift扇区,计算结果为 1MB; 上限:2 个64 个- 1 个扇区,鉴于最大的扇区大小,评估结果约为 64ZB)。 但是,此规范建议在群集堆中不超过 224 个- 2 个群集(请参阅 第 3.1.9 节)。 因此,建议的卷上限为:ClusterHeapOffset + (224 - 2) * 2SectorsPerClusterShift。 假设最大可能的群集大小为 32MB,并且假设 ClusterHeapOffset 为 96MB(主和备份启动区域和仅第一个 FAT 的足够空间),建议的卷上限计算为大约 512TB。

9.5 目录大小限制

Stream Extension 目录条目的 DataLength 字段定义下限和上限目录大小限制(下限:0 字节;上限:256MB)。 这意味着一个目录最多可以承载 8,388,608 个目录条目(每个目录条目使用 32 个字节)。 鉴于文件目录条目集最小,有三个目录条目,一个目录最多可以托管 2,796,202 个文件。

10 附录

10.1 全局唯一标识符(GUID)

GUID 是通用唯一标识符的Microsoft实现。 GUID 是一个包含一组 8 个十六进制数字的 128 位值, 后跟 4 个十六进制数字的三组,后跟一组 12 个十六进制数字,例如 {6B29FC40-CA47-1067-B31D-00DD010662DA}(请参阅 表 38)。

表 38 GUID 结构

字段名称

偏移量

(字节)

大小

(字节)

注释

Data1

0

4

此字段是必需的,并且包含来自示例的第一组 GUID(6B29FC40h)的四个字节。

Data2

4

2

此字段是必需的,并且包含来自示例的第二组 GUID(CA47h)中的两个字节。

Data3

6

2

此字段是必需的,并且包含来自 GUID 第三组(1067h 从示例中为 1067h)的两个字节。

Data4[0]

8

1

此字段是必需的,并且包含 GUID 第四组(来自示例的 B3h)中最重要的字节。

Data4[1]

9

1

此字段是必需的,并且包含 GUID 第四组(示例中的 1Dh)中最少的重要字节。

Data4[2]

10

1

此字段是必需的,并且包含来自 GUID 第五组的第一个字节(从示例中为 00h)。

Data4[3]

11

1

此字段是必需的,包含来自第五组 GUID(示例中的 DDh)的第二个字节。

Data4[4]

12

1

此字段是必需的,并且包含来自第五组 GUID 的第三个字节(从示例中为 01h)。

Data4[5]

13

1

此字段是必需的,并且包含来自 GUID 第五组的第四个字节(从示例中为 06h)。

Data4[6]

14

1

此字段是必需的,并且包含来自 GUID 第五组的第五个字节(从示例中为 62 小时)。

Data4[7]

15

1

此字段是必需的,并且包含来自第五组 GUID(示例中的 DAh)的第六个字节。

10.2 分区表

为了确保在广泛的使用方案中 exFAT 卷的互作性,实现应对 MBR 分区存储和分区 GUID {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} 使用分区类型 07h 进行 GPT 分区存储。

11 文档更改历史记录

表 39 描述了发布、更正、添加、删除和澄清本文档的历史记录。

表 39 文档更改历史记录

日期

更改 的 说明

08-Jan-2008

基本规范的第一个版本,其中包括:

第 1 部分,简介

第 2 节,

卷结构

第 3 部分:主启动区域和备份启动区域

第 4 节:文件分配表区域

第 5 节:数据区域

第 6 节:目录结构

第 7 节:目录条目定义

第 8 节,实现说明

第 9 节:文件系统限制

第 10 节:附录

08-Jun-2008

基本规范的第二个版本,其中包括以下更改:

第 11 节的添加,

文档更改历史记录

在 7.8 和 7.9 节中添加供应商扩展和供应商分配目录条目

在 7.2.5 和 7.2.5.1 节中添加建议的上例表

在第 7.4 节中添加 UtcOffset 字段,并在第 1.3 节中添加 UTC 首字母缩略词

更正表 19 中自定义定义字段的大小

更正第 7.6.3 节中 NameLength 值的有效范围

更正和澄清第 7.4 节中的时间戳和 10msIncrement 字段

说明第 3.3 节中的 Null 参数结构

说明第 6.3.4.2 节中 NoFatChain 字段的值的含义

说明 6.2.3 节中 DataLength 字段的值的含义

第 3.1.13.2 节中 VolumeDirty 字段的说明,并建议在第 8.1 节中排序

第 3.1.13.3 节中 MediaFailure 字段的说明

2008 年 10 月 1 日

基本规范的第三个版本,其中包括以下更改:

将 SHOULD、SHOULD 和 MAY 添加到字段说明

表 2 第 1.3 节中添加 UTC 定义

修改了第 1.5 节,以确保与 TexFAT 规范文档保持一致。

阐明了仅Microsoft可以定义第 6.2 节中目录条目的布局的限制

添加了说明,如果 DataLength 为零且 NoFatChain 设置为第 6.3.5 节和第 6.4.3 节,则 FirstCluster Field 应为零

阐明了第 7.4 节中有效文件目录条目的要求

向第 7.7 节添加了对唯一文件和目录名称的要求

向第 7.7.3 节末尾添加了 ASCII 的实现说明

01-Jan-2009

基本规范的第四个版本,其中包括以下更改:

删除了对 Windows CE 访问控制条目的引用

向第 7.2.5.1 节添加了说明,以显式要求完整案例表

2009 年 9 月 2 日

基本规范的第五个版本,其中包括以下更改:

文档格式更改以允许更好的 PDF 转换

2010 年 2 月 24 日

第六版基本规范,其中包括以下更改:

修正了不正确的语句:“如果 DataLength 为零且 NoFatChain 设置为零,则 NoFatChain 设置为”如果 NoFatChain 位为 1,则 FirstCluster 必须指向群集堆中的有效群集“,以阐明如果设置了 NoFatChain 位,则必须进行有效的分配。

添加了“如果 NoFatChain 位为 1,则 DataLength 不得为零。 如果 FirstCluster 字段为零,则 DataLength 还必须为零“到 Section 6.3.6 和 Section 6.4.4,以澄清如果设置了 NoFatChain 位,则必须有有效的分配。

已将版权声明更新为 2010

2019 年 8 月 26 日

基本规范的第七个版本,其中包括以下更改:

更新了与规范相关的法律条款,包括:

删除Microsoft机密通知

删除 Microsoft Corporation 技术文档许可协议部分

已将版权声明更新为 2019

相关推荐

腌鬼子姜的做法
365足球提现

腌鬼子姜的做法

📅 01-07 👁️ 7557
天上为什么会打雷 天空为什么会打雷
365娱乐平台网址

天上为什么会打雷 天空为什么会打雷

📅 11-03 👁️ 4904
LOL武器大师商店攻略
外勤365系统

LOL武器大师商店攻略

📅 01-16 👁️ 1629