目录项对于ExFAT文件系统来讲是非常重要的组成部分,其主要作用及结构特点如下:
①分区中的每个文件和文件夹(也称为目录)都被分配多个大小为32字节的目录项,用以描述文件或文件夹的属性、大小、起始簇号和时间、日期等信息,当然还会把文件名或目录名也记录在目录项中。
②在ExFAT文件系统中,目录也被视为特殊类型的文件,所以每个目录也与文件一样有目录项。
③在ExFAT文件系统下,分区根目录下的文件及文件夹的目录项存放在根目录区中,分区子目录下的文件及文件夹的目录项存放在数据区相应的簇中。
④ExFAT文件系统目录项的第一个字节用来描述目录项的类型,剩下的31字节用来记录文件的相关信息。
⑤根据目录项的作用和结构特点,可以把目录项分为四种类型:
卷标就是一个分区的名字,可以在格式化分区时创建,也可以随时修改。ExFAT文件系统把卷标当作文件,用文件目录项进行管理。系统为卷标建一个目录项,放在根目录区中。
卷标的目录项占用32字节,其中第一个字节是特征值,用来描述类型。卷标目录项的特征值为“83H”,如果没有卷标或者将卷标删除,该特征值为“03H”。
卷标的长度理论上为11字符,但实际上可以达到15字符。
当前有一个卷标为“ExFAT--Recovery”的ExFAT分区“G”,其卷标长度是15字符,如图4-525所示。
其卷标所在目录项如图4-526所示。
卷标目录项中各字节的含义见表4-98。
表4-98 ExFAT卷标目录项的含义
字节偏移 | 字段长度(字节) | 内容及含义 |
---|---|---|
0x00 | 1 | 目录项的类型(卷标目录项的特征值为“83H”) |
0x01 | 1 | 卷标字符数 |
0x02 | 22 | 卷标 |
0x18 | 8 | 保留(也可用) |
下面用WinHex模板(该模板需自己制作)查看卷标目录项的结构,如图4-527所示。
卷标的目录项有如下特点:
①对于ExFAT格式的分区,卷标的字符数理论上要求在11个之内,但最多可以达到15个。卷标使用Unicode码字符。
②卷标的目录项中不记录起始簇号和大小。
③卷标的目录项中不记录时间戳。
ExFAT文件系统格式化时会创建一个簇位图文件,并为其建一个目录项,放在根目录区中。
簇位图文件的目录项占用32字节,其中第一个字节是特征值,用来描述类型。簇位图文件目录项的特征值为“81H”。
ExFAT分区“G”的簇位图文件所在目录项如图4-528所示。
簇位图文件目录项中各字节的含义见表4-99。
表4-99 ExFAT簇位图文件目录项的含义
字节偏移 | 字段长度(字节) | 内容及含义 |
---|---|---|
0x00 | 1 | 目录项的类型(簇位图文件目录项的特征值为“81H”) |
0x01 | 1 | 保留 |
0x02 | 18 | 保留 |
0x14 | 4 | 起始簇号 |
0x18 | 8 | 文件大小 |
下面用WinHex模板(该模板需自己制作)查看簇位图文件目录项的结构,如图4-529所示。
簇位图文件的目录项有如下特点:
①对于ExFAT格式的分区,簇位图文件起始簇号一般都为2。
②簇位图文件的目录项中不记录时间戳。
ExFAT文件系统格式化时会创建一个大写字符文件文件,并为其建一个目录项,放在根目录区中。
大写字符文件的目录项占用32字节,其中第一个字节是特征值,用来描述类型。大写字符文件目录项的特征值为“82H”。
ExFAT分区“G”的大写字符文件所在目录项如图4-530所示。
大写字符文件目录项中各字节的含义见表4-100。
表4-100 ExFAT大写字符文件目录项的含义
字节偏移 | 字段长度(字节) | 内容及含义 |
---|---|---|
0x00 | 1 | 目录项的类型(大写字符文件目录项的特征值为“82H”) |
0x01 | 3 | 保留 |
0x08 | 14 | 保留 |
0x14 | 4 | 起始簇号 |
0x18 | 8 | 文件大小 |
下面用WinHex模板(该模板需自己制作)查看大写字符文件目录项的结构,如图4-531所示。
大写字符文件的目录项有如下特点:
①对于ExFAT格式的分区,大写字符文件的目录项一般都跟在簇位图文件的目录项之后。
②大写字符文件的目录项中不记录时间戳。
ExFAT文件系统中每个用户文件至少有三个目录项,这三个目录项被称为三个属性:第一个目录项称为“属性1”,目录项首字节的特征值为“85H”;第二个目录项称为“属性2”,目录项首字节的特征值为“C0H”;第三个目录项称为“属性3”,目录项首字节的特征值为“C1H”。
“属性1”目录项用来记录该目录项的附属目录项数、校验和、文件属性、时间戳等信息。用户文件的“属性1”目录项如图4-532所示。
用户文件的“属性1”目录项中各字节的含义见表4-101。
表4-101 用户文件的“属性1”目录项的含义
字节偏移 | 字段长度(字节) | 内容及含义 |
---|---|---|
0x00 | 1 | 目录项的类型(“属性1”目录项的特征值为“85H”) |
0x01 | 1 | 附属目录项数 |
0x02 | 2 | 校验和 |
0x04 | 4 | 文件属性 |
0x08 | 4 | 文件创建时间 |
0x0C | 4 | 文件最后修改时间 |
0x10 | 4 | 文件最后访问时间 |
0x14 | 1 | 文件创建时间精确至10ms |
0x15 | 3 | 保留 |
0x18 | 8 | 保留 |
下面用WinHex模板(该模板需自己制作)查看“属性1”目录项的结构,如图4-533所示。
对其中的参数作进一步的解释:
①0x00~0x00:类型。该参数为目录项类型的特征值,“属性1”目录项的特征值为“85H”。
②0x01~0x01:附属目录项数。该参数指除此目录项外,该文件还有几个目录项,当前值为2,说明这个文件除了“属性1”目录项外,后面还有两个目录项,起始就是“属性2”目录项和“属性3”目录项。
③0x02~0x03:校验和。该参数是校验算法算出来的目录项的校验和。
④0x04~0x07:文件属性。该参数描述文件的常规属性,属性具体含义见表4-102。
表4-102 属性具体含义
二进制值 | 属性含义 | 二进制值 | 属性含义 |
---|---|---|---|
00000000 | 读/写 | 00001000 | 卷标 |
00000001 | 只读 | 00010000 | 子目录 |
00000010 | 隐藏 | 00100000 | 存档 |
00000100 | 系统 |
⑤0x08~0x0B:文件创建时间。该参数是文件的具体创建时间,格式为32位的DOS时间,包括年、月、日、时、分、秒,具体表示方法与FAT文件系统一样,这里就不再重复讲述。
⑥0x0C~0x0F:文件最后修改时间。该参数是文件最后一次修改时的具体时间,格式为32位的DOS时间,包括年、月、日、时、分、秒,具体表示方法跟FAT文件系统一样,这里就不再重复讲述。
⑦0x10~0x13:文件最后访问时间。该参数是文件最后一次访问时的具体时间,格式为32位的DOS时间,包括年、月、日,也包含时、分、秒,这一点跟FAT不一样,FAT中改时间只有年、月、日,没有时、分、秒。
⑧0x14~0x14:文件创建时间,精确至10ms。该参数是文件的具体创建时间精确到10ms的数值。
“属性2”目录项用来记录文件是否有碎片、文件名的字符数、文件名的Hash值、文件的起始簇号及大小等信息。
用户文件的“属性2”目录项如图4-534所示。
用户文件的“属性2”目录项中各字节的含义见表4-103。
表4-103 用户文件的“属性2”目录项的含义
字节偏移 | 字段长度(字节) | 内容及含义 |
---|---|---|
0x00 | 1 | 目录项的类型(“属性1”目录项的特征值为“C0H”) |
0x01 | 1 | 文件碎片标志 |
0x02 | 1 | 保留 |
0x03 | 1 | 文件名字符数N |
0x04 | 2 | 文件名Hash值 |
0x06 | 2 | 保留 |
0x08 | 8 | 文件大小1 |
0x10 | 4 | 保留 |
0x14 | 4 | 起始簇号 |
0x18 | 8 | 文件大小2 |
下面用WinHex模板(该模板需自己制作)查看“属性2”目录项的结构,如图4-535所示。
对其中的参数做进一步的解释。
①0x00~0x00:类型。该参数为目录项类型的特征值,“属性2”目录项的特征值为“C0H”。
②0x01~0x01:文件碎片标志。该参数能够反映出文件是否连续存放。如果是连续存放没有碎片,该标志为03H;如果不是连续存放,文件有碎片,该标志就为01H。
③0x03~0x03:文件名字符数。该参数用来说明文件名的长度,ExFAT文件系统的文件名用Unicode码表示,每个字符占用两个字节。
④0x04~0x05:文件名Hash值。该参数是根据相应算法算出的文件名的校验值,当文件名发生改变时,Hash值也会发生改变,但当文件移动时,该值并不改变。
⑤0x08~0x0F:文件大小1。该参数是文件的总字节数,用64位记录文件大小。
⑥0x14~0x17:起始簇号。该参数描述文件的起始簇号,用32位记录簇的地址。
⑦0x18~0x1F:文件大小2。该参数也是文件的总字节数,是为NTFS文件系统的压缩属性准备的,一般情况下与“文件大小1”的数值保持一致。
“属性3”目录项用来具体记录文件的名称。如果文件名很长,“属性3”可以包含多个目录项,每个目录项称为一个片段,从上至下依次记录文件名的每一个字符,记录的方向刚好跟FAT文件系统中长文件名目录项从下至上的顺序相反。
用户文件的“属性3”目录项如图4-536所示。
用户文件的“属性3”目录项中各字节的含义见表4-104。
表4-104 用户文件的“属性3”目录项的含义
字节偏移 | 字段长度(字节) | 内容及含义 |
---|---|---|
0x00 | 1 | 目录项的类型(“属性1”目录项的特征值为“C0H”) |
0x01 | 1 | 保留 |
0x02 | 2N | 文件名 |
下面用WinHex模板(该模板需自己制作)查看“属性3”目录项的结构,如图4-537所示。
因为该文件名很短,所以只有一个片段。
下面再看另外一个文件,文件名为“shu-ju-hui-fu-ji-shu-shen-du-jie-mi.txt”,其目录项如图4-538所示。
从图4-538中可以看到该文件有5个目录项,一个“属性1”目录项、一个“属性2”目录项、三个“属性3”目录项,其模板如图4-539所示。