exFAT 文件系统规范
1 简介
exFAT 文件系统是 FAT 系列文件系统中 FAT32 的后续版本。 此规范介绍 exFAT 文件系统,并提供实现 exFAT 文件系统所需的所有信息。
1.1 设计目标
exFAT 文件系统有三个中心设计目标 (请参阅下面的) 列表。
保持基于 FAT 的文件系统的简单性。
基于 FAT 的文件系统的两个优点是其相对简单和易于实现。 按照其前身的精神,实施者应发现 exFAT 相对简单且易于实施。
启用非常大的文件和存储设备。
exFAT 文件系统使用 64 位来描述文件大小,从而启用依赖于非常大文件的应用程序。 exFAT 文件系统还允许使用高达 32MB 的群集,从而有效地启用非常大的存储设备。
整合扩展性,实现未来创新。
exFAT 文件系统在其设计中融入了可扩展性,使文件系统能够跟上存储创新和使用情况变化的步伐。
1.2 特定术语
在此规范的上下文中,某些术语 (见 表 1) 具有 exFAT 文件系统的设计和实现的特定含义。
表 1 具有非常具体含义的术语的定义
条款 | 定义 |
---|---|
应 | 此规范使用术语“应”来描述强制行为。 |
建议值 | 此规范使用术语“should”来描述它强烈建议但并不强制的行为。 |
五月 | 此规范使用术语“may”来描述可选行为。 |
必需 | 此术语描述实现应修改的字段或结构,并应按照此规范所述进行解释。 |
可选 | 此术语描述实现可能支持或不支持的字段或结构。 如果实现支持给定的可选字段或结构,则它应修改并应按照此规范所述解释字段或结构。 |
Undefined | 此术语描述实现可以根据需要修改的字段或结构内容, (即,在将周围字段或结构设置为零时) ,不得解释为保留任何特定含义。 |
预留 | 此术语描述实现的字段或结构内容:
|
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 默认字段和结构限定符
除非规范另有说明,否则此规范中的字段和结构具有以下限定符 (请参阅下面的列表) 。
未签名
使用十进制表示法来描述值,但未另行说明;此规范使用修复后的字母“h”来表示十六进制数字,并将 GUID 括在大括号中
采用 little-endian 格式
不需要字符串的 null 终止字符
1.5 Windows CE 和 TexFAT
TexFAT 是 exFAT 的扩展,可在基本文件系统之上添加事务安全操作语义。 TexFAT 由 Windows CE 使用。 TexFAT 需要使用两个 FAT 和分配位图,以便在事务中使用。 它还定义了多个附加结构,包括填充描述符和安全描述符。
2 卷结构
卷是存储和检索用户数据所需的所有文件系统结构和数据空间的集合。 所有 exFAT 卷都包含四个区域 (请参阅 表 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 字段。 |
First FAT | FatOffset | FatLength | 此子区域是必需的, 第 4.1 节 定义了其内容。 注意:主启动扇区和备份启动扇区都包含 FatOffset 和 FatLength 字段。 |
第二个 FAT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | 此子区域是必需的, 第 4.1 节 定义其内容(如果有)。 注意:主启动扇区和备份启动扇区都包含 FatOffset、FatLength 和 NumberOfFats 字段。 NumberOfFats 字段只能包含值 1 和 2。 |
数据区域 | |||
群集堆对齐 | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | 此子区域是必需的,其内容(如果有)未定义。 注意:主启动扇区和备份启动扇区都包含 FatOffset、FatLength、NumberOfFats 和 ClusterHeapOffset 字段。 NumberOfFats 字段的有效值为 1 和 2。 |
群集堆 | ClusterHeapOffset | ClusterCount * 2个 SectorsPerClusterShift | 此子区域是必需的, 第 5.1 节 定义了其内容。 注意:主启动扇区和备份启动扇区都包含 ClusterHeapOffset、ClusterCount 和 SectorsPerClusterShift 字段。 |
多余的空间 | ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift) | 此子区域是必需的,其内容(如果有)未定义。 注意:主启动扇区和备份启动扇区都包含 ClusterHeapOffset、ClusterCount、SectorsPerClusterShift 和 VolumeLength 字段。 |
3 主启动区域和备份启动区域
主启动区域提供所有必要的启动打包指令、标识信息和文件系统参数,使实现能够执行以下操作:
从 exFAT 卷启动计算机系统。
将卷上的文件系统标识为 exFAT。
发现 exFAT 文件系统结构的位置。
备份启动区域是主启动区域的备份。 当主启动区域处于不一致状态时,它有助于恢复 exFAT 卷。 除非在很少出现的情况(例如更新启动打包指令)下,实现不应修改备份启动区域的内容。
3.1 主启动扇区和备份启动扇区子区域
主启动扇区包含从 exFAT 卷启动绑带的代码和描述卷结构的基本 exFAT 参数 (请参阅 表 4) 。 BIOS、MBR 或其他引导打包代理可能会检查此扇区,并可能加载和执行其中包含的任何引导打包指令。
备份启动扇区是主启动扇区的备份,具有相同的结构 (请参阅 表 4) 。 备份启动扇区可能有助于恢复操作;但是,实现应将 VolumeFlags 和 PercentInUse 字段的内容视为过时。
在使用主启动扇区或备份启动扇区的内容之前,实现应验证其内容,方法是验证其各自的启动校验和,并确保其所有字段都在其有效值范围内。
虽然初始格式操作将初始化主启动扇区和备份启动扇区的内容,但实现可能会更新这些扇区 (,并根据需要更新其各自的启动校验和) 。 但是,实现可以更新 VolumeFlags 或 PercentInUse 字段而不更新其各自的启动校验和 (校验和专门排除这两个字段) 。
表 4 主启动扇区和备份启动扇区结构
字段名称 | 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 | 此字段是必需的,其内容是保留的。 |
BootCode | 120 | 390 | 此字段是必需的, 第 3.1.19 节 定义了其内容。 |
BootSignature | 510 | 2 | 此字段是必需的, 第 3.1.20 节 定义其内容。 |
ExcessSpace | 512 | 2BytesPerSectorShift – 512 | 此字段是必需的,并且其内容(如果有)未定义。 注意:主启动扇区和备份启动扇区都包含 BytesPerSectorShift 字段。 |
3.1.1 JumpBoot 字段
JumpBoot 字段应包含个人计算机中常见的 CPU 的跳转指令,在执行时,该指令将“跳转”CPU 以在 BootCode 字段中执行启动捆绑指令。
此字段的有效值按低序字节到高阶字节) EBh 76h 90h 的顺序 (。
3.1.2 FileSystemName 字段
FileSystemName 字段应包含卷上的文件系统的名称。
此字段的有效值为 ASCII 字符“EXFAT”,其中包含三个尾随空格。
3.1.3 MustBeZero 字段
MustBeZero 字段应直接与打包的 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 * 2个 SectorsPerClusterShift) ,以计算较少者为准
3.1.9 ClusterCount 字段
“ClusterCount”字段应描述群集堆包含的群集数。
此字段的有效值应为以下值中的较小值:
(VolumeLength - ClusterHeapOffset) /2个扇区PerClusterShift向下舍入为最接近的整数,这恰好是群集堆开头和卷末尾之间可以容纳的群集数
232- 11,这是 FAT 可以描述的最大群集数
ClusterCount 字段的值确定 FAT 的最小大小。 为了避免非常大的 FAT,实现可以通过 SectorsPerClusterShift 字段) 增加群集大小 (来控制群集堆中的群集数。 此规范建议群集堆中不超过2 24-2 个群集。 但是,实现应能够处理群集堆中最多包含 232-11 个群集的卷。
3.1.10 FirstClusterOfRootDirectory 字段
FirstClusterOfRootDirectory 字段应包含根目录的第一个群集的群集索引。 实现应尽一切努力将根目录的第一个群集置于分配位图和 Up-case Table 使用群集之后的第一个非错误群集中。
此字段的有效值范围应为:
至少 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) 。
在计算其各自的主启动或备份启动区域校验和时,实现不应包括此字段。 引用备份启动扇区时,实现应将此字段视为过时。
表 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,这意味着第二个 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 节中所述的建议写入顺序类似。
3.1.13.3 MediaFailure 字段
MediaFailure 字段应描述实现是否发现了媒体故障,如下所示:
0,这意味着托管媒体未报告故障,或者 FAT 中已将任何已知故障记录为“错误”群集
1,这意味着托管媒体已报告失败 (即读取或写入操作失败)
在以下情况下,实现应将此字段设置为 1:
托管媒体尝试访问卷中的任何区域失败
实现已用尽访问重试算法(如果有)
如果在装载卷时,此字段的值为 1,则用于扫描整个卷中的媒体故障,并将所有故障记录为 FAT (中“错误”群集的实现) 可能会将此字段的值清除为 0。
3.1.13.4 ClearToZero 字段
ClearToZero 字段在此规范中没有重大意义。
此字段的有效值为:
0,没有任何特定含义
1,这意味着在修改任何文件系统结构、目录或文件之前,实现应将此字段清除为 0
3.1.14 BytesPerSectorShift 字段
BytesPerSectorShift 字段应描述每个扇区的字节数,表示为日志2 (N) ,其中 N 是每个扇区的字节数。 例如,对于每个扇区 512 个字节,此字段的值为 9。
此字段的有效值范围应为:
至少 9 个 (扇区大小 512 字节) ,这是 exFAT 卷可能最小的扇区
) 最多 12 个 (扇区大小为 4096 字节,这是个人计算机中常见的 CPU 的内存页大小
3.1.15 SectorsPerClusterShift 字段
“SectorsPerClusterShift”字段应将每个群集的扇区描述为日志2 (N) ,其中 N 是每个群集的扇区数。 例如,对于每个群集 8 个扇区,此字段的值为 3。
此字段的有效值范围应为:
每个群集) 至少 0 个 (1 个扇区,这是可能的最小群集
最多 25 - BytesPerSectorShift,计算结果为 32MB 的群集大小
3.1.16 NumberOfFats 字段
NumberOfFats 字段应描述卷包含的 FAT 数和分配位图数。
此字段的有效值范围应为:
1,指示卷仅包含第一个 FAT 和第一个分配位图
2,指示卷包含第一个 FAT、第二个 FAT、第一个分配位图和第二个分配位图;此值仅对 TexFAT 卷有效
3.1.17 驱动器选择字段
DriveSelect 字段应包含扩展的 INT 13h 驱动器号,这有助于在个人计算机上使用扩展的 INT 13h 从此卷启动。
此字段的所有可能值都有效。 以前基于 FAT 的文件系统中的类似字段通常包含值 80 小时。
3.1.18 PercentInUse 字段
PercentInUse 字段应描述分配的群集堆中群集的百分比。
此字段的有效值范围应为:
介于 0 和 100(含)之间,这是群集堆中已分配的群集的百分比,向下舍入为最接近的整数
完全 FFh,指示群集堆中已分配群集的百分比不可用
实现应更改此字段的值,以反映群集堆中群集分配的更改,或者应将其更改为 FFh。
在计算其各自的主启动或备份启动区域校验和时,实现不应包括此字段。 引用备份启动扇区时,实现应将此字段视为过时。
3.1.19 BootCode 字段
BootCode 字段应包含启动打包指令。 实现可能会用启动计算机系统所需的 CPU 指令填充此字段。 不提供启动打包指令的实现应将此字段中的每个字节初始化为 F4h, (个人计算机中常见的 CPU 的停止指令,) 作为其格式操作的一部分。
3.1.20 BootSignature 字段
BootSignature 字段应描述给定扇区的意图是否为 Boot 扇区。
此字段的有效值为 AA55h。 此字段中的任何其他值都会使其各自的启动扇区失效。 实现应先验证此字段的内容,然后再根据其各自 Boot 扇区中的其他任何字段。
3.2 主启动扇区和备份扩展启动扇区子区域
主扩展启动扇区的每个扇区具有相同的结构:但是,每个扇区可能保留不同的启动捆绑说明, (请参阅表 6) 。 启动捆绑代理(例如主启动扇区中的启动捆绑指令、备用 BIOS 实现或嵌入式系统的固件)可能会加载这些扇区并执行它们包含的指令。
备份扩展启动扇区是主扩展启动扇区的备份,具有相同的结构 (请参阅 表 6) 。
在执行主启动扇区或备份扩展启动扇区的指令之前,实现应通过确保每个扇区的 ExtendedBootSignature 字段包含其规定值来验证其内容。
虽然初始格式操作将初始化主启动扇区和备份扩展启动扇区的内容,但实现可能会 (更新这些扇区,并根据需要更新其各自的启动校验和) 。
表 6 扩展启动扇区结构
字段名称 | Offset (字节) |
大小 (字节) |
注释 |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | 此字段是必需的, 第 3.2.1 节 定义了其内容。 注意:主启动扇区和备份启动扇区都包含 BytesPerSectorShift 字段。 |
ExtendedBootSignature | 2BytesPerSectorShift – 4 | 4 | 此字段是必需的, 第 3.2.2 节 定义了其内容。 注意:主启动扇区和备份启动扇区都包含 BytesPerSectorShift 字段。 |
3.2.1 ExtendedBootCode 字段
ExtendedBootCode 字段应包含启动打包指令。 实现可能会用启动计算机系统所需的 CPU 指令填充此字段。 未提供启动打包指令的实现应将此字段中的每个字节初始化为 00 小时,作为其格式操作的一部分。
3.2.2 ExtendedBootSignature 字段
ExtendedBootSignature 字段应描述给定扇区的意图是否为扩展启动扇区。
此字段的有效值为 AA550000h。 此字段中的任何其他值都会使其各自的主启动扇区或备份扩展启动扇区失效。 实现应先验证此字段的内容,然后再根据其各自的扩展启动扇区中的其他任何字段。
3.3 主 OEM 参数和备份 OEM 参数子区域
主要 OEM 参数子区域包含十个参数结构,其中可能包含特定于制造商的信息 (请参阅 表 7) 。 这十个参数结构中的每一个都派生自泛型参数模板 (请参阅 第 3.3.2 节) 。 制造商可以从通用参数模板派生自己的自定义参数结构。 此规范本身定义了两个参数结构:Null 参数 (请参阅 第 3.3.3 节) ;Flash 参数 (请参阅 第 3.3.4 节) 。
备份 OEM 参数是主要 OEM 参数的备份,其结构 (请参阅 表 7) 。
在使用主或备份 OEM 参数的内容之前,实现应通过验证其各自的启动校验和来验证其内容。
制造商应使用自己的自定义参数结构(如果有)以及任何其他参数结构填充主和备份 OEM 参数。 后续格式操作应保留“主”和“备份 OEM 参数”的内容。
实现可以根据需要更新主和备份 OEM 参数 (,并且还应更新其各自的启动校验和) 。
表 7 OEM 参数结构
字段名称 | Offset (字节) |
大小 (字节) |
注释 |
---|---|---|---|
Parameters[0] | 0 | 48 | 此字段是必需的, 第 3.3.1 节 定义了其内容。 |
. . . |
. . . |
. . . |
. . . |
参数[9] | 432 | 48 | 此字段是必需的, 第 3.3.1 节 定义了其内容。 |
预留 | 480 | 2BytesPerSectorShift – 480 | 此字段是必需的,其内容是保留的。 注意:主启动扇区和备份启动扇区都包含 BytesPerSectorShift 字段。 |
3.3.1 参数[0] ...参数[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,该 GUID 确定给定参数结构的其余部分的布局。
此字段的所有可能值都有效;但是,制造商在从此模板派生自定义参数结构时,应使用 GUID 生成工具(例如GuidGen.exe)来选择 GUID。
3.3.3 Null 参数
Null Parameters 结构派生自泛型参数模板 (请参阅 第 3.3.2 节) ,应描述未使用的参数字段 (请参阅 表 9) 。 创建或更新 OEM 参数结构时,实现应使用 Null 参数结构填充未使用的参数字段。 此外,在创建或更新 OEM Parameters 结构时,实现应合并数组末尾的 Null Parameters 结构,从而将所有其他 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 参数
Flash 参数结构派生自泛型参数模板 (请参阅 第 3.3.2 节) ,并且包含闪存媒体的参数 (请参阅 表 10) 。 基于闪存的存储设备的制造商可以使用此参数结构填充参数字段 (最好是参数[0]字段) 。 实现可能使用 Flash 参数结构中的信息来优化读取/写入期间的访问操作,以及对齐文件系统结构,以设置媒体格式。
对 Flash 参数结构的支持是可选的。
表 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 Parameters 字段的所有可能值都有效。 但是,值 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 备用对象字段
SpareSectors 字段应描述闪存媒体可用于其内部保留操作的扇区数。
3.3.4.5 RandomAccessTime 字段
RandomAccessTime 字段应描述闪存介质的平均随机访问时间(以纳秒为单位)。
3.3.4.6 编程时间字段
ProgrammingTime 字段应描述闪存媒体的平均编程时间(以纳秒为单位)。
3.3.4.7 ReadCycle 字段
ReadCycle 字段应描述闪存介质的平均读取周期时间(以纳秒为单位)。
3.3.4.8 WriteCycle 字段
WriteCycle 字段应描述平均写入周期时间(以纳秒为单位)。
3.4 主启动校验和子区域
“主启动校验和”和“备份”分别包含其各自启动区域中所有其他子区域内容的四字节校验和的重复模式。 校验和计算不应在其各自的启动扇区中包括 VolumeFlags 和 PercentInUse 字段 (请参阅 图 1) 。 四字节校验和的重复模式从子区域的开始到结束填充其各自的启动校验和子区域。
在使用主启动区域或备份启动区域中任何其他子区域的内容之前,实现应通过验证其各自的启动校验和来验证其内容。
虽然初始格式操作将使用重复校验和模式填充主启动校验和和,但当其各自启动区域中其他扇区的内容发生更改时,实现应更新这些扇区。
图 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。 因此,First FAT 子区域始终包含 FAT。 如果 NumberOfFats 字段为 2,则第二个 FAT 子区域也包含 FAT。
VolumeFlags 字段的 ActiveFat 字段描述哪个 FAT 处于活动状态。 只有主启动扇区中的 VolumeFlags 字段是最新的。 实现应将不处于活动状态的 FAT 视为过时。 非活动 FAT 的使用和在 FAT 之间切换是特定于实现的。
4.1 第一和第二 FAT 子区域
FAT 应描述群集堆中的群集链 (请参阅 表 11) 。 群集链是一系列群集,为记录文件、目录和其他文件系统结构的内容提供空间。 FAT 将群集链表示为单独链接的群集索引列表。 除了前两个条目之外,FAT 中的每个条目都只代表一个群集。
表 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 永远不能超过 FFFFFFF6 小时。 注意:主启动扇区和备份启动扇区都包含 ClusterCount 字段。 |
ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ( (ClusterCount + 2) * 4) | 此字段是必需的,其内容(如果有)未定义。 注意:主启动扇区和备份启动扇区都包含 ClusterCount、FatLength 和 BytesPerSectorShift 字段。 |
4.1.1 FatEntry[0] Field
FatEntry[0] 字段应描述第一个字节中的媒体类型 (最低顺序字节) ,并在剩余的三个字节中包含 FFh。
第一个字节) (媒体类型应为 F8h。
4.1.2 FatEntry[1] Field
FatEntry[1] 字段仅由于历史优先级而存在,不描述任何感兴趣的内容。
此字段的有效值为 FFFFFFFFh。 实现应将此字段初始化为其规定值,不应将此字段用于任何目的。 实现不应解释此字段,并且应在修改周围字段的操作中保留其内容。
4.1.3 FatEntry[2] ...FatEntry[ClusterCount+1] 字段
此数组中的每个 FatEntry 字段应表示群集堆中的一个群集。 FatEntry[2] 表示群集堆中的第一个群集,FatEntry[ClusterCount+1] 表示群集堆中的最后一个群集。
这些字段的有效值范围应为:
介于 2 和 ClusterCount + 1 之间(含),它指向给定群集链中的下一个 FatEntry;给定的 FatEntry 不得指向给定群集链中其前面的任何 FatEntry
精确 FFFFFFF7h,将给定 FatEntry 的对应群集标记为“坏”
精确 FFFFFFFFh,将给定 FatEntry 的相应群集标记为群集链的最后一个群集;这是任何给定群集链的最后一个 FatEntry 的唯一有效值
5 数据区域
数据区域包含群集堆,该堆为文件系统结构、目录和文件提供托管空间。
5.1 群集堆子区域
群集堆的结构非常简单, (请参阅 表 12) ;每个连续的扇区系列描述一个群集,如 SectorsPerClusterShift 字段所定义。 重要的是,群集堆的第一个群集具有索引 2,它直接对应于 FatEntry[2] 的索引。
在 exFAT 卷中,分配位图 (请参阅 第 7.1.5 节) 维护所有群集的分配状态记录。 这与 exFAT 的前任 (FAT12、FAT16 和 FAT32) 存在显著差异,其中 FAT 维护群集堆中所有群集的分配状态的记录。
表 12 群集堆结构
字段名称 | Offset (部门) |
大小 (部门) |
注释 |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2SectorsPerClusterShift | 此字段是必需的, 第 5.1.1 节 定义了其内容。 注意:主启动扇区和备份启动扇区都包含 ClusterHeapOffset 和 SectorsPerClusterShift 字段。 |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2个 SectorsPerClusterShift | 2SectorsPerClusterShift | 此字段是必需的, 第 5.1.1 节 定义了其内容。 注意:主启动扇区和备份启动扇区都包含 ClusterCount、ClusterHeapOffset 和 SectorsPerClusterShift 字段。 |
5.1.1 群集[2] ...Cluster[ClusterCount+1] 字段
此数组中的每个群集字段都是一系列连续扇区,其大小由 SectorsPerClusterShift 字段定义。
6 目录结构
exFAT 文件系统使用目录树方法来管理群集堆中存在的文件系统结构和文件。 目录在目录树中具有父级和子级之间的一对多关系。
FirstClusterOfRootDirectory 字段引用的目录是目录树的根目录。 所有其他目录以单独链接的方式从根目录下降。
每个目录由一系列目录条目组成, (请参阅 表 13) 。
一个或多个目录条目合并到目录条目集中,用于描述感兴趣的内容,例如文件系统结构、子目录或文件。
表 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 泛型目录Entry 模板
泛型 DirectoryEntry 模板提供目录条目的基定义 (请参阅 表 14) 。 所有目录条目结构都派生自此模板,并且只有 Microsoft 定义的目录条目结构有效, (exFAT 没有制造商定义的目录条目结构的预配,但第 7.8 节和第 7.9 节) 除外。 必须能够解释泛型 DirectoryEntry 模板。
表 14 泛型目录Entry 模板
字段名称 | 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 字段具有三种使用模式,字段的值定义 (请参阅下面的列表) 。
00h,这是目录结束标记,以下条件适用:
给定 DirectoryEntry 中的所有其他字段实际上都保留
给定目录中的所有后续目录条目也是目录末尾标记
目录结束标记仅在目录条目集外部有效
实现可能会根据需要覆盖目录结束标记
介于 01h 和 7Fh(包括 7Fh)之间,这是一个未使用的 directory-entry 标记,并适用以下条件:
给定 DirectoryEntry 中的所有其他字段实际上未定义
未使用的目录条目仅在目录条目集之外有效
实现可能会根据需要覆盖未使用的目录条目
此值范围对应于 InUse 字段 (请参阅 第 6.2.1.4 节) 包含值 0
介于 81h 和 FFh(包括 81h 和 FFh)之间,这是一个常规目录条目,以下条件适用:
EntryType 字段的内容 (请参阅 表 15) 确定 DirectoryEntry 结构的其余部分的布局
此值范围以及仅此值范围在目录条目集中有效
此值范围直接对应于 InUse 字段 (请参阅 第 6.2.1.4 节) 包含值 1
若要防止修改 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 节和第 6.4.1.2.2 节 ,了解良性主目录条目和良性辅助目录条目)
6.2.1.3 TypeCategory 字段
TypeCategory 字段应描述给定目录条目的类别。
此字段的有效值应为:
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 * 2个 SectorsPerClusterShift* 2BytesPerSectorShift
如果派生自此模板的结构无法对导数结构进行群集分配,则派生自此模板的结构可以重新定义 FirstCluster 和 DataLength 字段。
6.3 泛型主目录Entry 模板
目录项集中的第一个目录条目应为主目录条目。 目录项集中的所有后续目录条目(如果有)应为辅助目录条目, (请参阅 第 6.4 节) 。
必须能够解释泛型主目录Entry 模板。
所有主目录条目结构都派生自泛型主目录Entry 模板 (请参阅 表 16) 派生自泛型 DirectoryEntry 模板 (请参阅 第 6.2 节) 。
表 16 泛型主目录Entry 模板
字段名称 | 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 字段应符合 Generic DirectoryEntry 模板中提供的定义 (请参阅第 6.2.1.4 节) 。
6.3.2 SecondaryCount 字段
SecondaryCount 字段应描述紧跟在给定主目录条目之后的辅助目录条目数。 这些辅助目录条目以及给定的主目录条目组成目录条目集。
此字段的有效值范围应为:
至少为 0,这意味着此主目录条目是目录条目集中的唯一条目
最多 255 个,这意味着接下来的 255 个目录条目和此主目录条目构成目录条目集
派生自此模板的关键主目录条目结构可以重新定义 SecondaryCount 和 SetChecksum 字段。
6.3.3 SetChecksum 字段
SetChecksum 字段应包含给定目录条目集中所有目录条目的校验和。 但是,校验和排除此字段 (见 图 2) 。 在给定目录条目集中使用任何其他目录条目之前,实现应验证此字段的内容是否有效。
派生自此模板的关键主目录条目结构可以重新定义 SecondaryCount 和 SetChecksum 字段。
图 2 EntrySetChecksum 计算
UInt16 EntrySetChecksum
(
UCHAR * Entries, // points to an in-memory copy of the directory entry set
UCHAR SecondaryCount
)
{
UInt16 NumberOfBytes = ((UInt16)SecondaryCount + 1) * 32;
UInt16 Checksum = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 2) || (Index == 3))
{
continue;
}
Checksum = ((Checksum&1) ? 0x8000 : 0) + (Checksum>>1) + (UInt16)Entries[Index];
}
return Checksum;
}
6.3.4 GeneralPrimaryFlags 字段
GeneralPrimaryFlags 字段包含标志 (请参阅 表 17) 。
派生自此模板的关键主目录条目结构可能会重新定义此字段。
表 17 一般通用PrimaryFlags 字段结构
字段名称 | Offset (位) |
大小 (位) |
注释 |
---|---|---|---|
可能分配 | 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/ (2个 SectorsPerClusterShift* 2BytesPerSectorShift) 向上舍入为最接近的整数
如果派生自此模板的关键主目录条目结构重新定义 GeneralPrimaryFlags 字段,则任何关联分配的群集链的相应 FAT 条目都有效。
6.3.5 FirstCluster 字段
FirstCluster 字段应符合 Generic DirectoryEntry 模板中提供的定义 (请参阅 第 6.2.2 节) 。
如果 NoFatChain 位为 1,则 FirstCluster 必须指向群集堆中的有效群集。
派生自此模板的关键主目录条目结构可能会重新定义 FirstCluster 和 DataLength 字段。 仅当“可能分配”字段包含值 0 时,派生自此模板的其他结构才能重新定义 FirstCluster 和 DataLength 字段。
6.3.6 DataLength 字段
DataLength 字段应符合 Generic DirectoryEntry 模板中提供的定义 (请参阅第 6.2.3 节) 。
如果 NoFatChain 位为 1,则 DataLength 不得为零。 如果 FirstCluster 字段为零,则 DataLength 也必须为零。
派生自此模板的关键主目录条目结构可能会重新定义 FirstCluster 和 DataLength 字段。 仅当“可能分配”字段包含值 0 时,派生自此模板的其他结构才能重新定义 FirstCluster 和 DataLength 字段。
6.4 通用辅助目录Entry 模板
辅助目录条目的核心用途是提供有关目录条目集的其他信息。 必须能够解释通用辅助目录Entry 模板。
关键和良性辅助目录条目的定义与次要 exFAT 修订号相关联。 支持此规范或后续规范定义的任何关键或良性辅助目录条目是可选的。
所有辅助目录条目结构都派生自泛型辅助目录Entry 模板 (请参阅 表 18) ,它派生自泛型 DirectoryEntry 模板 (请参阅 第 6.2 节) 。
表 18 通用辅助目录Entry 模板
字段名称 | Offset (字节) |
大小 (字节) |
注释 |
---|---|---|---|
EntryType | 0 | 1 | 此字段是必需的,第 6.4.1 节 定义其内容。 |
GeneralSecondaryFlags | 1 | 1 | 此字段是必需的, 第 6.4.2 节 定义其内容。 |
自定义 | 2 | 18 | 此字段是必需的,派生自此模板的结构定义其内容。 |
FirstCluster | 20 | 4 | 此字段是必需的, 第 6.4.3 节 定义其内容。 |
DataLength | 24 | 8 | 此字段是必需的, 第 6.4.4 节 定义其内容。 |
6.4.1 EntryType 字段
EntryType 字段应符合 Generic DirectoryEntry 模板中提供的定义 (请参阅 第 6.2.1 节)
6.4.1.1 TypeCode 字段
TypeCode 字段应符合 Generic DirectoryEntry 模板中提供的定义 (请参阅第 6.2.1.1 节) 。
6.4.1.2 TypeImportance 字段
TypeImportance 字段应符合 Generic DirectoryEntry 模板中提供的定义 (请参阅第 6.2.1.2 节) 。
6.4.1.2.1 关键辅助目录条目
关键辅助目录条目包含的信息对于正确管理其包含目录条目集至关重要。 尽管支持任何特定的关键辅助目录条目是可选的,但无法识别的关键目录条目会将整个目录条目集呈现为无法识别 (超出适用目录条目模板的定义) 。
但是,如果目录条目集包含实现无法识别的至少一个关键辅助目录条目,则实现最多应解释目录条目集中目录条目的模板,而不是与目录条目集中的任何目录条目关联的任何分配包含的数据 (文件目录条目都是例外, 请参阅 第 7.4 节) 。
6.4.1.2.2 良性辅助目录条目
良性辅助目录条目包含可用于管理其包含目录条目集的其他信息。 支持任何特定的良性辅助目录条目都是可选的。 无法识别的良性辅助目录条目不会将整个目录条目集呈现为无法识别。
实现可能会忽略它无法识别的任何良性辅助条目。
6.4.1.3 TypeCategory 字段
TypeCategory 字段应符合 Generic DirectoryEntry 模板中提供的定义 (请参阅第 6.2.1.3 节) 。
对于此模板,此字段的有效值为 1。
6.4.1.4 InUse 字段
InUse 字段应符合 Generic DirectoryEntry 模板中提供的定义 (请参阅第 6.2.1.4 节) 。
6.4.2 GeneralSecondaryFlags 字段
GeneralSecondaryFlags 字段包含标志 (请参阅 表 19) 。
表 19 通用常规SecondaryFlags 字段结构
字段名称 | Offset (位) |
大小 (位) |
注释 |
---|---|---|---|
可能分配 | 0 | 1 | 此字段是必需的, 第 6.4.2.1 节 定义其内容。 |
NoFatChain | 1 | 1 | 此字段是必需的, 第 6.4.2.2 节 定义其内容。 |
自定义 | 2 | 6 | 此字段是必需的,派生自此模板的结构可以定义此字段。 |
6.4.2.1 可能分配字段
“可能分配”字段的定义应与泛型主目录Entry 模板中的同名字段相同 (请参阅第 6.3.4.1 节) 。
6.4.2.2 NoFatChain 字段
NoFatChain 字段应与泛型主目录Entry 模板中的同名字段具有相同的定义 (请参阅第 6.3.4.2 节) 。
6.4.3 FirstCluster 字段
FirstCluster 字段应符合 Generic DirectoryEntry 模板中提供的定义 (请参阅 第 6.2.2 节) 。
如果 NoFatChain 位为 1,则 FirstCluster 必须指向群集堆中的有效群集。
6.4.4 DataLength 字段
DataLength 字段应符合 Generic DirectoryEntry 模板中提供的定义 (请参阅第 6.2.3 节) 。
如果 NoFatChain 位为 1,则 DataLength 不得为零。 如果 FirstCluster 字段为零,则 DataLength 也必须为零。
7 目录条目定义
exFAT 文件系统的修订版 1.00 定义了以下目录条目:
关键主数据库
分配位图 (节 7.1)
Up-case Table (Section 7.2)
卷标签 (第 7.3 节)
文件 (第 7.4 节)
良性主数据库
7.1 分配位图目录条目
在 exFAT 文件系统中,FAT 不描述群集的分配状态;而是分配位图。 分配位图存在于群集堆 (请参阅第 7.1.5 节) ,并在根目录中具有相应的关键主目录条目 (请参阅 表 20) 。
NumberOfFats 字段确定根目录中有效分配位图目录条目的数目。 如果 NumberOfFats 字段包含值 1,则分配位图目录条目的唯一有效数目为 1。 此外,仅当一个分配位图目录条目描述第一个分配位图 (请参阅第 7.1.2.1 节) 时有效。 如果 NumberOfFats 字段包含值 2,则分配位图目录条目的唯一有效数目为 2。 此外,仅当一个分配位图描述第一个分配位图,另一个描述第二个分配位图时,这两个分配位图目录条目才有效。
表 20 分配位图目录Entry 结构
字段名称 | 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 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1 节) 。
7.1.1.1 TypeCode 字段
TypeCode 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.1 节) 。
对于分配位图目录条目,此字段的有效值为 1。
7.1.1.2 TypeImportance 字段
TypeImportance 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.2 节) 。
对于分配位图目录条目,此字段的有效值为 0。
7.1.1.3 TypeCategory 字段
TypeCategory 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.3 节) 。
7.1.1.4 InUse 字段
InUse 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.4 节) 。
7.1.2 BitmapFlags 字段
BitmapFlags 字段包含标志 (请参阅 表 21) 。
表 21 BitmapFlags 字段结构
字段名称 | Offset (位) |
大小 (位) |
注释 |
---|---|---|---|
BitmapIdentifier | 0 | 1 | 此字段是必需的, 第 7.1.2.1 节 定义了其内容。 |
保留 | 1 | 7 | 此字段是必需的,其内容是保留的。 |
7.1.2.1 BitmapIdentifier 字段
BitmapIdentifier 字段应指示给定目录条目所描述的分配位图。 实现应将第一个分配位图与第一个 FAT 结合使用,并将第二个分配位图与第二个 FAT 结合使用。 ActiveFat 字段描述哪些 FAT 和分配位图处于活动状态。
此字段的有效值应为:
0,这意味着给定的目录条目描述第一个分配位图
1,这意味着给定的目录条目描述第二个分配位图,并且仅当 NumberOfFats 包含值 2 时才可能
7.1.3 FirstCluster 字段
FirstCluster 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.5 节) 。
如 FAT 所述,此字段包含群集链第一个群集的索引,该群集托管分配位图。
7.1.4 DataLength 字段
DataCluster 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.6 节) 。
7.1.5 分配位图
分配位图记录群集堆中群集的分配状态。 分配位图中的每个位指示其相应的群集是否可用于分配。
分配位图表示从最低到最高索引 (请参阅 表 22) 。 出于历史原因,第一个群集的索引为 2。 注意:位图中的第一个位是第一个字节的最低位。
表 22 分配位图结构
字段名称 | 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] 表示群集堆中的第一个群集,BitmapEntry[ClusterCount+1] 表示群集堆中的最后一个群集。
这些字段的有效值应为:
0,将相应的群集描述为可用于分配
1,它将相应的群集描述为无法进行分配 (群集分配可能已消耗相应的群集,或者活动 FAT 可能会将相应的群集描述为错误)
7.2 大写表目录条目
大写表定义从小写字符到大写字符的转换。 这一点很重要,因为文件名目录条目 (请参阅第 7.7 节) 使用 Unicode 字符,并且 exFAT 文件系统不区分大小写并保留大小写。 群集堆中存在 Up-case 表 (请参阅 第 7.2.5 节) ,并且根目录中具有相应的关键主目录条目 (请参阅 表 23) 。 Up-case Table 目录条目的有效数目为 1。
由于 Up-case Table 和文件名之间的关系,实现不应修改 Up-case Table,除非是格式操作的结果。
表 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 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1 节) 。
7.2.1.1 TypeCode 字段
TypeCode 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.1 节) 。
对于 Up-case Table 目录条目,此字段的有效值为 2。
7.2.1.2 TypeImportance 字段
TypeImportance 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅第 6.3.1.2 节) 。
对于 Up-case Table 目录条目,此字段的有效值为 0。
7.2.1.3 TypeCategory 字段
TypeCategory 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.3 节) 。
7.2.1.4 InUse 字段
InUse 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.4 节) 。
7.2.2 TableChecksum 字段
TableChecksum 字段包含 FirstCluster 和 DataLength 字段描述) 的 Up-case Table (校验和。 在使用 Up-case Table 之前,实现应验证此字段的内容是否有效。
图 3 表Checksum 计算
UInt32 TableChecksum
(
UCHAR * Table, // points to an in-memory copy of the up-case table
UInt64 DataLength
)
{
UInt32 Checksum = 0;
UInt64 Index;
for (Index = 0; Index < DataLength; Index++)
{
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Table[Index];
}
return Checksum;
}
7.2.3 FirstCluster 字段
FirstCluster 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.5 节) 。
此字段包含群集链的第一个群集的索引,如 FAT 所描述,该群集托管 Up-case Table。
7.2.4 DataLength 字段
DataCluster 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.6 节) 。
7.2.5 上例表
大写表是一系列 Unicode 字符映射。 字符映射由一个 2 字节字段组成,其中上写表中字段的索引表示要加大小写的 Unicode 字符,以及表示上写 Unicode 字符的 2 字节字段。
前 128 个 Unicode 字符具有必需的映射 (请参阅 表 24) 。 对于前 128 个 Unicode 字符中的任何一个具有任何其他字符映射的 up-case 表无效。
仅支持强制映射范围中的字符的实现可能会忽略大写表其余部分的映射。 当通过“文件名”目录条目创建或重命名 (文件时,此类实现应仅使用强制映射范围内的字符,请参阅 第 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 (64 小时) 字符映射,其中包含压缩后大写表的以下八个条目:
FFFFh、0061h、0041h、0042h、0043h
前两个条目指示前 97 (61 小时) 字符 (从 0000h 到 0060h,) 具有标识映射。 后续字符(0061h 到 0063h)分别映射到字符 0041h 到 0043h。
在格式化卷时提供压缩的上写表是可选的。 但是,必须能够解释未压缩表和压缩后大小写表。 TableChecksum 字段的值始终符合卷上大小写表的存在方式,该表可能采用压缩或未压缩格式。
7.2.5.1 建议的上例表
设置卷格式时,实现应以压缩格式记录建议的 up-case 表 (请参阅 表 25) ,其 TableChecksum 字段的值为 E619D30Dh。
如果实现定义了其自己的大小写表(压缩或未压缩),则该表应涵盖从字符代码 0000h 到 FFFFh(包括 FFFFh) )的完整 Unicode 字符范围 (。
表 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 卷标签目录Entry 结构
字段名称 | 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 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1 节) 。
7.3.1.1 TypeCode 字段
TypeCode 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.1 节) 。
对于卷标签目录条目,此字段的有效值为 3。
7.3.1.2 TypeImportance 字段
TypeImportance 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅第 6.3.1.2 节) 。
对于卷标签目录条目,此字段的有效值为 0。
7.3.1.3 TypeCategory 字段
TypeCategory 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.3 节) 。
7.3.1.4 InUse 字段
InUse 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.4 节) 。
7.3.2 CharacterCount 字段
CharacterCount 字段应包含 VolumeLabel 字段包含的 Unicode 字符串的长度。
此字段的有效值范围应为:
至少为 0,这意味着 Unicode 字符串的长度为 0 个字符 (这相当于没有卷标签)
最多 11 个字符,这意味着 Unicode 字符串的长度为 11 个字符
7.3.3 VolumeLabel 字段
VolumeLabel 字段应包含 Unicode 字符串,该字符串是卷的用户友好名称。 VolumeLabel 字段具有与文件名目录条目的 FileName 字段相同的无效字符集 (请参阅 第 7.7.3 节) 。
7.4 文件目录条目
文件目录条目描述文件和目录。 它们是关键的主目录条目,任何目录可能包含零个或多个文件目录条目 (请参阅 表 27) 。 若要使文件目录条目有效,只有一个流扩展目录条目和至少一个文件名目录条目必须紧跟在文件目录条目后面 (分别请参阅 第 7.6 节和第 7.7 节) 。
表 27 文件目录Entry
字段名称 | 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 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1 节) 。
7.4.1.1 TypeCode 字段
TypeCode 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.1 节) 。
对于文件目录条目,此字段的有效值为 5。
7.4.1.2 TypeImportance 字段
TypeImportance 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.2 节) 。
对于文件目录条目,此字段的有效值为 0。
7.4.1.3 TypeCategory 字段
TypeCategory 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.3 节) 。
7.4.1.4 InUse 字段
InUse 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.4 节) 。
7.4.2 SecondaryCount 字段
SecondaryCount 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.2 节) 。
7.4.3 SetChecksum 字段
SetChecksum 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.3 节) 。
7.4.4 FileAttributes 字段
FileAttributes 字段包含标志 (请参阅 表 28) 。
表 28 FileAttributes 字段结构
字段名称 | Offset (位) |
大小 (位) |
注释 |
---|---|---|---|
ReadOnly | 0 | 1 | 此字段是必需的,符合 MS-DOS 定义。 |
Hidden | 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 字段的值时
实现应在读取与给定流扩展目录条目关联的任何群集的内容后更新这些字段。
这些字段应符合 Timestamp 和 UtcOffset 字段的定义, (分别参阅 第 7.4.8节和第 7.4.10 节,) 。
7.4.8 时间戳字段
时间戳字段描述本地日期和时间,以 2 秒的分辨率 (请参阅 表 29) 。
表 29 时间戳字段结构
字段名称 | Offset (位) |
大小 (位) |
注释 |
---|---|---|---|
DoubleSeconds | 0 | 5 | 此字段是必需的, 第 7.4.8.1 节 定义了其内容。 |
Minute | 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 节 定义其内容。 |
Year | 25 | 7 | 此字段是必需的, 第 7.4.8.6 节 定义其内容。 |
7.4.8.1 双秒字段
DoubleSeconds 字段应以 2 秒的倍数描述 Timestamp 字段的秒部分。
此字段的有效值范围应为:
0,表示 0 秒
29,表示 58 秒
7.4.8.2 分钟字段
“分钟”字段应描述“时间戳”字段的分钟数部分。
此字段的有效值范围应为:
0,表示 0 分钟
59,表示 59 分钟
7.4.8.3 小时字段
“小时”字段应描述“时间戳”字段的小时数部分。
此字段的有效值范围应为:
0,表示 00:00 小时
23,表示 23:00 小时
7.4.8.4 天字段
“日”字段应描述“时间戳”字段的日期部分。
此字段的有效值范围应为:
1,这是给定月份的第一天
给定月份 (的最后一天定义有效天数)
7.4.8.5 月字段
“月份”字段应描述“时间戳”字段的月份部分。
此字段的有效值范围应为:
至少 1,表示 1 月
最多 12,表示 12 月
7.4.8.6 Year 字段
“年份”字段应描述“时间戳”字段相对于 1980 年的年份部分。 此字段表示值为 0 的年份 1980 和值为 127 的 2107 年。
此字段的所有可能值都有效。
7.4.9 10msIncrement 字段
10msIncrement 字段应为其相应的时间戳字段提供额外的时间分辨率(以 10 毫秒的倍数表示)。
这些字段的有效值范围应为:
至少 0,表示 0 毫秒
最多 199,表示 1990 毫秒
7.4.10 UtcOffset 字段
UtcOffset 字段 (请参阅 表 30) 应描述其相应 Timestamp 和 10msIncrement 字段描述的从 UTC 到本地日期和时间的偏移量。 从 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 的偏移量。 此字段以 15 分钟的间隔描述与 UTC 的偏移量 (请参阅表 31) 。
表 31 OffsetFromUtc 字段的值的含义
值 | 带符号十进制等效项 | 说明 |
---|---|---|
3Fh | 63 | 本地日期和时间为 UTC + 15:45 |
3Eh | 62 | 本地日期和时间为 UTC + 15:30 |
. . . |
. . . |
. . . |
01h | 1 | 本地日期和时间为 UTC + 00:15 |
00h | 0 | 本地日期和时间为 UTC |
7Fh | -1 | 本地日期和时间为 UTC – 00:15 |
. . . |
. . . |
. . . |
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 字段的内容有效
当 UTC 不可用于计算 OffsetFromUtc 字段的值时,实现应仅将此字段设置为值 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 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1 节) 。
7.5.1.1 TypeCode 字段
TypeCode 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.1 节) 。
对于卷 GUID 目录条目,此字段的有效值为 0。
7.5.1.2 TypeImportance 字段
TypeImportance 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.2 节) 。
对于卷 GUID 目录条目,此字段的有效值为 1。
7.5.1.3 TypeCategory 字段
TypeCategory 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.3 节) 。
7.5.1.4 InUse 字段
InUse 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.1.4 节) 。
7.5.2 SecondaryCount 字段
SecondaryCount 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.2 节) 。
对于卷 GUID 目录条目,此字段的有效值为 0。
7.5.3 SetChecksum 字段
SetChecksum 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.3 节) 。
7.5.4 GeneralPrimaryFlags 字段
GeneralPrimaryFlags 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.4 节) ,并定义要保留的 CustomDefined 字段的内容。
7.5.4.1 可能分配字段
“可能分配”字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.4.1 节) 。
对于卷 GUID 目录条目,此字段的有效值为 0。
7.5.4.2 NoFatChain 字段
NoFatChain 字段应符合泛型主目录Entry 模板中提供的定义 (请参阅 第 6.3.4.2 节) 。
7.5.5 VolumeGuid 字段
VolumeGuid 字段应包含唯一标识给定卷的 GUID。
此字段的所有可能值都有效,null GUID 除外 {00000000-0000-0000-0000-000000000000},即 。
7.6 流扩展目录条目
流扩展目录条目是文件目录条目集中的关键辅助目录条目 (请参阅 表 33) 。 文件目录条目集中的有效流扩展目录条目数为 1。 此外,仅当此目录项紧跟在文件目录条目之后时,此目录条目才有效。
表 33 流扩展目录Entry
字段名称 | 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 节 定义其内容。 |
Reserved3 | 16 | 4 | 此字段是必需的,其内容是保留的。 |
FirstCluster | 20 | 4 | 此字段是必需的, 第 7.6.6 节 定义其内容。 |
DataLength | 24 | 8 | 此字段是必需的, 第 7.6.7 节 定义其内容。 |
7.6.1 EntryType 字段
EntryType 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.1 节) 。
7.6.1.1 TypeCode 字段
TypeCode 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.1 节) 。
对于“流扩展目录”条目,此字段的有效值为 0。
7.6.1.2 TypeImportance 字段
TypeImportance 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.2 节) 。
对于“流扩展目录”条目,此字段的有效值为 0。
7.6.1.3 TypeCategory 字段
TypeCategory 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.3 节) 。
7.6.1.4 InUse 字段
InUse 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.4 节) 。
7.6.2 GeneralSecondaryFlags 字段
GeneralSecondaryFlags 字段应符合通用辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.2 节) ,并定义要保留的 CustomDefined 字段的内容。
7.6.2.1 可能分配字段
“可能分配”字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅) 第 6.4.2.1 节 。
对于“流扩展目录”条目,此字段的有效值为 1。
7.6.2.2 NoFatChain 字段
NoFatChain 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.2.2 节) 。
7.6.3 NameLength 字段
NameLength 字段应包含后续文件名目录条目的 Unicode 字符串的长度, (请参阅 第 7.7 节) 共同包含。
此字段的有效值范围应为:
至少 1 个,这是尽可能短的文件名
最多 255 个,这是可能最长的文件名
NameLength 字段的值还会影响文件名目录条目数 (请参阅 第 7.7 节) 。
7.6.4 NameHash 字段
NameHash 字段应包含 2 字节哈希 (见 图 4) 大小写文件名。 这样,实现就可以在按名称搜索文件时执行快速比较。 重要的是,NameHash 提供对不匹配的肯定验证。 实现应验证所有 NameHash 与大小写文件名的比较匹配。
图 4 NameHash 计算
UInt16 NameHash
(
WCHAR * FileName, // points to an in-memory copy of the up-cased file name
UCHAR NameLength
)
{
UCHAR * Buffer = (UCHAR *)FileName;
UInt16 NumberOfBytes = (UInt16)NameLength * 2;
UInt16 Hash = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
Hash = ((Hash&1) ? 0x8000 : 0) + (Hash>>1) + (UInt16)Buffer[Index];
}
return Hash;
}
7.6.5 ValidDataLength 字段
ValidDataLength 字段应描述写入数据流用户数据的距离。 实现应在将数据进一步写入数据流时更新此字段。 在存储媒体上,有效数据长度与数据流的数据长度之间的数据未定义。 对于超出有效数据长度的读取操作,实现应返回零。
如果相应的文件目录条目描述目录,则此字段的唯一有效值等于 DataLength 字段的值。 否则,此字段的有效值范围应为:
至少为 0,这意味着尚未将用户数据写出到数据流
最多 DataLength,这意味着用户数据已写出到数据流的整个长度
7.6.6 FirstCluster 字段
FirstCluster 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.3 节) 。
此字段应包含数据流的第一个群集的索引,该群集托管用户数据。
7.6.7 DataLength 字段
DataLength 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.4 节) 。
如果相应的文件目录条目描述目录,则此字段的有效值是关联分配的整个大小(以字节为单位),可能为 0。 此外,对于目录,此字段的最大值为 256MB。
7.7 文件名目录条目
文件名目录条目是文件目录条目集中的关键辅助目录条目 (请参阅 表 34) 。 文件目录条目集中的有效文件名目录条目数为 NameLength / 15,向上舍入为最接近的整数。 此外,仅当文件名目录条目作为连续序列紧跟流扩展目录条目时,它们才有效。 文件名目录项组合在一起构成文件目录条目集的文件名。
给定目录条目的所有子项应具有唯一的文件名目录条目集。 也就是说,在任何一个目录中向上大小写后,不能有重复的文件或目录名称。
表 34 文件名目录Entry
字段名称 | Offset (字节) |
大小 (字节) |
注释 |
---|---|---|---|
EntryType | 0 | 1 | 此字段是必需的, 第 7.7.1 节 定义了其内容。 |
GeneralSecondaryFlags | 1 | 1 | 此字段是必需的, 第 7.7.2 节 定义其内容。 |
FileName | 2 | 30 | 此字段是必需的, 第 7.7.3 节 定义其内容。 |
7.7.1 EntryType 字段
EntryType 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.1 节) 。
7.7.1.1 TypeCode 字段
TypeCode 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.1 节) 。
对于“文件名”目录条目,此字段的有效值为 1。
7.7.1.2 TypeImportance 字段
TypeImportance 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.2 节) 。
对于“文件名”目录条目,此字段的有效值为 0。
7.7.1.3 TypeCategory 字段
TypeCategory 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.3 节) 。
7.7.1.4 InUse 字段
InUse 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.4 节) 。
7.7.2 GeneralSecondaryFlags 字段
GeneralSecondaryFlags 字段应符合通用辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.2 节) ,并定义要保留的 CustomDefined 字段的内容。
7.7.2.1 分配可能的字段
“可能分配”字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅) 第 6.4.2.1 节 。
对于“流扩展目录”条目,此字段的有效值为 0。
7.7.2.2 NoFatChain 字段
NoFatChain 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.2.2 节) 。
7.7.3 FileName 字段
FileName 字段应包含 Unicode 字符串,该字符串是文件名的一部分。 按照 File Name 目录条目集中存在的顺序,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 | 竖杠 |
文件名“.”和“..”分别具有“this directory”和“containing directory”的特殊含义。 实现不得在 FileName 字段中记录其中任一保留文件名。 但是,实现可能会在目录列表中生成这两个文件名,以引用要列出的目录和包含目录。
实现可能希望将文件和目录名称限制为仅 ASCII 字符集。 如果是这样,它们应将其字符使用限制为前 128 个 Unicode 条目中的有效字符范围。 它们仍必须将文件和目录名称存储在卷上的 Unicode 中,并在与用户交互时向/从 ASCII/Unicode 进行转换。
7.8 供应商扩展目录条目
供应商扩展目录条目是文件目录条目集中的良性辅助目录条目 (请参阅 表 36) 。 文件目录条目集可以包含任意数量的供应商扩展目录条目,但不超过辅助目录条目的限制,减去其他辅助目录条目的数量。 此外,只有当供应商扩展目录条目不在所需的流扩展和文件名目录条目之前时,它们才有效。
供应商扩展目录条目使供应商能够通过 VendorGuid 字段在各个文件目录条目集中具有唯一的特定于供应商的目录条目 (请参阅 表 36) 。 唯一目录条目有效地使供应商能够扩展 exFAT 文件系统。 供应商可以定义“供应商定义”字段的内容 (请参阅 表 36) 。 供应商实现可以维护 VendorDefined 字段的内容,并可能提供特定于供应商的功能。
无法识别供应商扩展目录条目的 GUID 的实现应将目录条目视为与任何其他无法识别的良性辅助目录条目相同 (请参阅 第 8.2 节) 。
表 36 供应商扩展目录Entry
字段名称 | Offset (字节) |
大小 (字节) |
注释 |
---|---|---|---|
EntryType | 0 | 1 | 此字段是必需的, 第 7.8.1 节 定义其内容。 |
GeneralSecondaryFlags | 1 | 1 | 此字段是必需的, 第 7.8.2 节 定义其内容。 |
VendorGuid | 2 | 16 | 此字段是必需的, 第 7.8.3 节 定义其内容。 |
供应商定义 | 18 | 14 | 此字段是必需的,供应商可以定义其内容。 |
7.8.1 EntryType 字段
EntryType 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.1 节) 。
7.8.1.1 TypeCode 字段
TypeCode 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.1 节) 。
对于“供应商扩展目录”条目,此字段的有效值为 0。
7.8.1.2 TypeImportance 字段
TypeImportance 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.2 节) 。
对于“供应商扩展目录”条目,此字段的有效值为 1。
7.8.1.3 TypeCategory 字段
TypeCategory 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.3 节) 。
7.8.1.4 InUse 字段
InUse 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.1.4 节) 。
7.8.2 GeneralSecondaryFlags 字段
GeneralSecondaryFlags 字段应符合通用辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.2 节) ,并定义要保留的 CustomDefined 字段的内容。
7.8.2.1 可能分配字段
“可能分配”字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅) 第 6.4.2.1 节 。
对于“供应商扩展目录”条目,此字段的有效值为 0。
7.8.2.2 NoFatChain 字段
NoFatChain 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅第 6.4.2.2 节) 。
7.8.3 VendorGuid 字段
VendorGuid 字段应包含唯一标识给定供应商扩展的 GUID。
此字段的所有可能值都有效,null GUID 除外,即 {00000000-0000-0000-0000-000000000000}。 但是,供应商应在定义扩展时使用 GUID 生成工具(例如GuidGen.exe)来选择 GUID。
此字段的值确定供应商定义字段的供应商特定结构。
7.9 供应商分配目录条目
供应商分配目录条目是文件目录条目集中的良性辅助目录条目 (请参阅 表 37) 。 文件目录条目集可以包含任意数量的供应商分配目录条目,但不超过辅助目录条目的限制,减去其他辅助目录条目的数量。 此外,仅当供应商分配目录条目不位于所需的流扩展和文件名目录条目之前时,它们才有效。
供应商分配目录条目使供应商能够通过 VendorGuid 字段在单个文件目录条目集中具有唯一的特定于供应商的目录条目 (请参阅 表 37) 。 唯一目录条目有效地使供应商能够扩展 exFAT 文件系统。 供应商可以定义关联群集的内容(如果有)。 供应商实现可以维护关联群集的内容(如果有),并且可能提供特定于供应商的功能。
无法识别供应商分配目录条目的 GUID 的实现应将目录条目视为与任何其他无法识别的良性辅助目录条目相同 (请参阅 第 8.2 节) 。
表 37 供应商分配目录Entry
字段名称 | 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 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.1 节) 。
7.9.1.1 TypeCode 字段
TypeCode 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.1.1 节) 。
对于“供应商分配目录”条目,此字段的有效值为 1。
7.9.1.2 TypeImportance 字段
TypeImportance 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.1.2 节) 。
对于“供应商分配目录”条目,此字段的有效值为 1。
7.9.1.3 TypeCategory 字段
TypeCategory 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.1.3 节) 。
7.9.1.4 InUse 字段
InUse 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.1.4 节) 。
7.9.2 GeneralSecondaryFlags 字段
GeneralSecondaryFlags 字段应符合泛型辅助目录模板中提供的定义 (请参阅 第 6.4.2 节) ,并定义要保留的 CustomDefined 字段的内容。
7.9.2.1 分配可能的字段
“可能分配”字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.2.1 节) 。
对于“供应商分配目录”条目,此字段的有效值为 1。
7.9.2.2 NoFatChain 字段
NoFatChain 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.2.2 节) 。
7.9.3 VendorGuid 字段
VendorGuid 字段应包含唯一标识给定供应商分配的 GUID。
此字段的所有可能值都有效,null GUID 除外 {00000000-0000-0000-0000-000000000000},即 。 但是,供应商在定义扩展时应使用 GUID 生成工具(如 GuidGen.exe)来选择 GUID。
此字段的值确定关联群集内容的供应商特定结构(如果有)。
7.9.4 FirstCluster 字段
FirstCluster 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.3 节) 。
7.9.5 DataLength 字段
DataLength 字段应符合泛型辅助目录Entry 模板中提供的定义 (请参阅 第 6.4.4 节) 。
7.10 TexFAT 填充目录条目
此规范 exFAT 修订版 1.00 文件系统基本规范未定义 TexFAT 填充目录条目。 但是,其类型代码为 1,其类型重要性为 1。 此规范的实现应将 TexFAT 填充目录条目视为任何其他无法识别的良性主目录条目,实现不得移动 TexFAT 填充目录条目。
8 个实现说明
8.1 建议的写入排序
实现应确保卷尽可能具有复原能力,以便为故障和其他不可避免的故障供电。 创建新目录条目或修改群集分配时,实现通常应遵循以下写入顺序:
将 VolumeDirty 字段的值设置为 1
如有必要,更新活动 FAT
更新活动分配位图
如有必要,请创建或更新目录条目
如果 VolumeDirty 字段在第一步之前的值为 0,则将其清除为 0
删除目录条目或释放群集分配时,实现应遵循以下写入顺序:
将 VolumeDirty 字段的值设置为 1
如有必要,请删除或更新目录条目
如有必要,更新活动 FAT
更新活动分配位图
如果 VolumeDirty 字段在第一步之前的值为 0,则将其清除为 0
8.2 无法识别的目录条目的影响
将来具有相同主修订号 1 且次要修订号高于 0 的 exFAT 规范可以定义新的良性主目录、关键辅助目录和良性辅助目录条目。 只有更高主修订号的 exFAT 规范才能定义新的关键主目录条目。 此规范(exFAT 修订版 1.00 文件系统基本规范)的实现应能够装载和访问任何 exFAT 卷的主要修订版 1 和任何次要修订号。 这表示实现可能会遇到它无法识别的目录条目的情况。 下面描述了这些方案的影响:
根目录中存在无法识别的关键主目录条目会导致卷无效。 在任何非根目录中存在任何关键主目录条目(文件目录条目除外)会使宿主目录无效。
实现不得修改无法识别的良性主目录条目或其关联的群集分配。 但是,在删除目录时,并且仅在删除目录时,实现应删除无法识别的良性主目录条目,并释放所有关联的群集分配(如果有)。
实现不得修改无法识别的关键辅助目录条目或其关联的群集分配。 目录条目集中存在一个或多个无法识别的关键辅助目录条目会使整个目录条目集无法识别。 删除包含一个或多个无法识别的关键辅助目录条目的目录条目集时,实现应释放与无法识别的关键辅助目录条目关联的所有群集分配(如果有)。 此外,如果目录项集描述目录,则实现可能:
遍历到目录
枚举它包含的目录条目
删除包含的目录条目
将包含的目录条目移到其他目录
但是,实现不应:
修改包含的目录条目(删除除外),如前所述
创建新的包含目录条目
打开包含的目录条目,但遍历和枚举除外,如前所述
实现不得修改无法识别的良性辅助目录条目或其关联的群集分配。 实现应忽略无法识别的良性辅助目录条目。 删除目录条目集时,实现应释放与无法识别的良性辅助目录条目关联的所有群集分配(如果有)。
9 文件系统限制
9.1 扇区大小限制
BytesPerSectorShift 字段定义扇区大小限制 (下限为 512 字节;上限:4,096 字节) 。
9.2 群集大小限制
SectorPerClusterShift 字段定义下限和上限的群集大小限制 (下限:1 个扇区;上限:25 -- BytesPerSectorShift 扇区,其计算结果为 32MB) 。
9.3 群集堆大小限制
群集堆应至少包含足够的空间来托管以下基本文件系统结构:根目录、所有分配位图和大写表。
较低的群集堆大小限制是驻留在群集堆中的每个基本文件系统结构的较低大小限制的函数。 即使假设最小群集 (512 字节) ,每个基本文件系统结构也不需要多个群集。 因此, 下限为:2 + NumberOfFats 群集,计算结果为 3 或 4 个群集,具体取决于 NumberOfFats 字段的值。
群集堆大小上限是群集的最大可能数目的简单函数,ClusterCount 字段定义 (上限:232-11 个群集) 。 无论群集大小如何,此类群集堆都有足够的空间来至少托管基本文件系统结构。
9.4 卷大小限制
VolumeLength 字段定义卷大小限制 (下限: 220/2BytesPerSectorShift扇区,计算结果为 1MB; 上限:264-1 个扇区,给定最大的扇区大小,评估为大约 64ZB) 。 但是,此规范建议群集堆中不超过2 24-2 个群集 (请参阅 第 3.1.9 节) 。 因此,建议的卷上限为:ClusterHeapOffset + (224-2) * 2个 SectorsPerClusterShift。 假设最大群集大小为 32MB,并且假设 ClusterHeapOffset 为 96MB, (足够的空间用于主启动和备份启动区域,并且仅第一个 FAT) ,建议的卷上限计算为大约 512TB。
9.5 目录大小限制
流扩展目录条目的 DataLength 字段定义目录大小上限 (下限:0 字节;上限:256MB) 。 这意味着一个目录最多可以托管 8,388,608 个目录条目, (每个目录条目消耗 32 个字节) 。 给定最小可能的文件目录条目集(三个目录条目),一个目录最多可托管 2,796,202 个文件。
10 附录
10.1 全局唯一标识符 (GUID)
GUID 是通用唯一标识符的 Microsoft 实现。 GUID 是一个 128 位值,由一组 8 个十六进制数字组成,后跟三组 4 个十六进制数字,后跟一组 12 个十六进制数字,例如 {6B29FC40-CA47-1067-B31D-00DD010662DA}, (请参阅 表 38) 。
表 38 GUID 结构
字段名称 | Offset (字节) |
大小 (字节) |
注释 |
---|---|---|---|
Data1 | 0 | 4 | 此字段是必需的,包含来自示例) 的第一组 GUID (6B29FC40h 的四个字节。 |
Data2 | 4 | 2 | 此字段是必需的,包含示例) 中第二组 GUID (CA47h 中的两个字节。 |
Data3 | 6 | 2 | 此字段是必需的,包含来自示例) 1067h 的 GUID 第三组 (两个字节。 |
Data4[0] | 8 | 1 | 此字段是必填字段,包含来自示例) 中 GUID 第四组 (B3h 的最大有效字节。 |
Data4[1] | 9 | 1 | 此字段是必需的,包含来自示例) 的第四组 GUID (1Dh 的最小有效字节。 |
Data4[2] | 10 | 1 | 此字段是必需的,包含来自示例) 中 GUID 第五组 (00 小时的第一个字节。 |
Data4[3] | 11 | 1 | 此字段是必需的,包含来自示例) 的第五组 GUID (DDh 的第二个字节。 |
Data4[4] | 12 | 1 | 此字段是必需的,包含来自示例) 01h 中 GUID 第五组的第三个字节 (。 |
Data4[5] | 13 | 1 | 此字段是必需的,包含来自示例) 06h (GUID 第五组的第四个字节。 |
Data4[6] | 14 | 1 | 此字段是必填字段,包含来自示例) 62 小时 GUID 第五组的第五个字节 (。 |
Data4[7] | 15 | 1 | 此字段是必需的,包含来自示例) 的第五组 GUID (DAh 的第六个字节。 |
10.2 分区表
为了确保 exFAT 卷在广泛的使用方案中的互操作性,实现应对 MBR 分区存储和分区 GUID 使用分区类型 07h {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7}进行 GPT 分区存储。
11 文档更改历史记录
表 39 描述了本文档的发布、更正、添加、删除和说明的历史记录。
表 39 文档更改历史记录
日期 | 更改说明 |
---|---|
2008 年 1 月 8 日 | 基本规范的第一版,其中包括: 第 1 部分,简介 第 2 部分, 第 3 部分,主启动区域和备份启动区域 第 4 部分,文件分配表区域 第 5 部分,数据区域 第 6 部分,目录结构 第 7 部分,目录条目定义 第 8 部分,实现说明 第 9 部分,文件系统限制 第 10 节,附录 |
2008 年 6 月 8 日 | 基本规范的第二版,其中包括以下更改: 第 11 节的新增内容 第 7.8 节和第 7.9 节中添加了供应商扩展和供应商分配目录条目 在第 7.2.5 节和第 7.2.5.1 节中添加建议的 up-case 表 第 7.4 节中添加 UtcOffset 字段,并在第 1.3 节中添加 UTC 首字母缩略词 更正表 19 中 CustomDefined 字段的大小 更正第 7.6.3 节中 NameLength 值的有效范围 更正和说明第 7.4 节中的 Timestamp 和 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 字段应为零 第 7.4 节阐明了对有效文件目录条目的要求 向第 7.7 节添加了对唯一文件和目录名称的要求 第 7.7.3 节末尾添加了 ASCII 的实现说明 |
2009 年 1 月 1 日 | 基本规范的第四版,其中包括以下更改: 删除了对Windows CE 访问控制条目的引用 向第 7.2.5.1 节添加了说明,以明确要求完整大小写表 |
2009 年 9 月 2 日 | 基本规范的第五版,其中包括以下更改: 更改文档格式以允许更好的 PDF 转换 |
2010 年 2 月 24 日 | 基本规范的第六版,其中包括以下更改: 将第 6.3.5 节和第 6.4.3 节中的“如果 DataLength 为零且设置了 NoFatChain,则 FirstCluster 字段应为零”,将“如果 NoFatChain 位为 1,则 FirstCluster 必须指向群集堆中的有效群集”,以阐明如果设置了 NoFatChain 位,则必须有有效的分配。 添加了“如果 NoFatChain 位为 1,则 DataLength 不得为零。 如果 FirstCluster 字段为零,则第 6.3.6 节和第 6.4.4 节的 DataLength 也必须为零,以阐明如果设置了 NoFatChain 位,则必须有有效的分配。 2010 年更新了版权声明 |
2019 年 8 月 26 日 | 基本规范的第七版,其中包括以下更改: 更新了与规范相关的法律条款,包括: 删除 Microsoft 机密通知 删除 Microsoft Corporation 技术文档许可协议部分 已将版权声明更新到 2019 年 |
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈