目录项的作用及结构特点

目录项对于ExFAT文件系统来讲是非常重要的组成部分,其主要作用及结构特点如下:

①分区中的每个文件和文件夹(也称为目录)都被分配多个大小为32字节的目录项,用以描述文件或文件夹的属性、大小、起始簇号和时间、日期等信息,当然还会把文件名或目录名也记录在目录项中。

②在ExFAT文件系统中,目录也被视为特殊类型的文件,所以每个目录也与文件一样有目录项。

③在ExFAT文件系统下,分区根目录下的文件及文件夹的目录项存放在根目录区中,分区子目录下的文件及文件夹的目录项存放在数据区相应的簇中。

④ExFAT文件系统目录项的第一个字节用来描述目录项的类型,剩下的31字节用来记录文件的相关信息。

⑤根据目录项的作用和结构特点,可以把目录项分为四种类型:

  • 卷标目录项;
  • 簇位图文件的目录项;
  • 大写字符文件的目录项;
  • 用户文件的目录项。

卷标目录项

卷标就是一个分区的名字,可以在格式化分区时创建,也可以随时修改。ExFAT文件系统把卷标当作文件,用文件目录项进行管理。系统为卷标建一个目录项,放在根目录区中。

卷标的目录项占用32字节,其中第一个字节是特征值,用来描述类型。卷标目录项的特征值为“83H”,如果没有卷标或者将卷标删除,该特征值为“03H”。

卷标的长度理论上为11字符,但实际上可以达到15字符。

当前有一个卷标为“ExFAT--Recovery”的ExFAT分区“G”,其卷标长度是15字符,如图4-525所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-525 卷标为“ExFAT--Recovery”的分区“G”

其卷标所在目录项如图4-526所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-526 卷标的目录项

卷标目录项中各字节的含义见表4-98。

表4-98 ExFAT卷标目录项的含义

字节偏移 字段长度(字节) 内容及含义
0x00 1 目录项的类型(卷标目录项的特征值为“83H”)
0x01 1 卷标字符数
0x02 22 卷标
0x18 8 保留(也可用)

下面用WinHex模板(该模板需自己制作)查看卷标目录项的结构,如图4-527所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-527 卷标目录项的模板

卷标的目录项有如下特点:

①对于ExFAT格式的分区,卷标的字符数理论上要求在11个之内,但最多可以达到15个。卷标使用Unicode码字符。

②卷标的目录项中不记录起始簇号和大小。

③卷标的目录项中不记录时间戳。

簇位图文件的目录项

ExFAT文件系统格式化时会创建一个簇位图文件,并为其建一个目录项,放在根目录区中。

簇位图文件的目录项占用32字节,其中第一个字节是特征值,用来描述类型。簇位图文件目录项的特征值为“81H”。

ExFAT分区“G”的簇位图文件所在目录项如图4-528所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-528 簇位图文件的目录项

簇位图文件目录项中各字节的含义见表4-99。

表4-99 ExFAT簇位图文件目录项的含义

字节偏移 字段长度(字节) 内容及含义
0x00 1 目录项的类型(簇位图文件目录项的特征值为“81H”)
0x01 1 保留
0x02 18 保留
0x14 4 起始簇号
0x18 8 文件大小

下面用WinHex模板(该模板需自己制作)查看簇位图文件目录项的结构,如图4-529所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-529 簇位图文件目录项的模板

簇位图文件的目录项有如下特点:

①对于ExFAT格式的分区,簇位图文件起始簇号一般都为2。

②簇位图文件的目录项中不记录时间戳。

大写字符文件的目录项

ExFAT文件系统格式化时会创建一个大写字符文件文件,并为其建一个目录项,放在根目录区中。

大写字符文件的目录项占用32字节,其中第一个字节是特征值,用来描述类型。大写字符文件目录项的特征值为“82H”。

ExFAT分区“G”的大写字符文件所在目录项如图4-530所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-530 大写字符文件的目录项

大写字符文件目录项中各字节的含义见表4-100。

表4-100 ExFAT大写字符文件目录项的含义

字节偏移 字段长度(字节) 内容及含义
0x00 1 目录项的类型(大写字符文件目录项的特征值为“82H”)
0x01 3 保留
0x08 14 保留
0x14 4 起始簇号
0x18 8 文件大小

下面用WinHex模板(该模板需自己制作)查看大写字符文件目录项的结构,如图4-531所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-531 大写字符文件目录项的模板

大写字符文件的目录项有如下特点:

①对于ExFAT格式的分区,大写字符文件的目录项一般都跟在簇位图文件的目录项之后。

②大写字符文件的目录项中不记录时间戳。

用户文件的目录项

ExFAT文件系统中每个用户文件至少有三个目录项,这三个目录项被称为三个属性:第一个目录项称为“属性1”,目录项首字节的特征值为“85H”;第二个目录项称为“属性2”,目录项首字节的特征值为“C0H”;第三个目录项称为“属性3”,目录项首字节的特征值为“C1H”。

“属性1”目录项

“属性1”目录项用来记录该目录项的附属目录项数、校验和、文件属性、时间戳等信息。用户文件的“属性1”目录项如图4-532所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-532 用户文件的“属性1”的目录项

用户文件的“属性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所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-533 “属性1”目录项的模板

对其中的参数作进一步的解释:

①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”目录项

“属性2”目录项用来记录文件是否有碎片、文件名的字符数、文件名的Hash值、文件的起始簇号及大小等信息。

用户文件的“属性2”目录项如图4-534所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-534 用户文件的“属性2”的目录项

用户文件的“属性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所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-535 “属性2”目录项的模板

对其中的参数做进一步的解释。

①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”目录项用来具体记录文件的名称。如果文件名很长,“属性3”可以包含多个目录项,每个目录项称为一个片段,从上至下依次记录文件名的每一个字符,记录的方向刚好跟FAT文件系统中长文件名目录项从下至上的顺序相反。

用户文件的“属性3”目录项如图4-536所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-536 用户文件的“属性3”的目录项

用户文件的“属性3”目录项中各字节的含义见表4-104。

表4-104 用户文件的“属性3”目录项的含义

字节偏移 字段长度(字节) 内容及含义
0x00 1 目录项的类型(“属性1”目录项的特征值为“C0H”)
0x01 1 保留
0x02 2N 文件名

下面用WinHex模板(该模板需自己制作)查看“属性3”目录项的结构,如图4-537所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-537 “属性3”目录项的模板

因为该文件名很短,所以只有一个片段。

下面再看另外一个文件,文件名为“shu-ju-hui-fu-ji-shu-shen-du-jie-mi.txt”,其目录项如图4-538所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-538 “shu-ju-hui-fu-ji-shu-shen-du-jie-mi.txt”的目录项

从图4-538中可以看到该文件有5个目录项,一个“属性1”目录项、一个“属性2”目录项、三个“属性3”目录项,其模板如图4-539所示。

ExFAT文件系统的目录项分析-数据恢复迷

图4-539 “shu-ju-hui-fu-ji-shu-shen-du-jie-mi.txt”的目录项模板