Microsoft Tape Format Specification

目录描述块(MTF_DIRB)

目录描述块(MTF_DIRB)包含了恢复目录所需要的信息。 它由 MTF_DB_HDR,MTF_DIRB DBLK 特定的字段空间, 操作系统特定的数据区域以及用于恢复文件名的字符串存储区域组成。 操作系统特定数据以及字符串存储区域之前的区域包含了在各个平台都合法的文件相关字段信息。 操作系统特定的数据区和字符串存储区域可以放在继 MTF_DIRB DBLK 特定区域的任何地方,并且可以颠倒顺序。 MTF_DIRB DBLK(s) 必须在目录的任何文件描述块(MTF_FILE DBLKs)前面。

偏移字段名类型大小
 0  0h公共的块头MTF_DB_HDR52 字节
52 34h目录属性UINT324 字节
56 38h最后修改日期MTF_DATE_TIME5 字节
61 3Dh创建日期MTF_DATE_TIME5 字节
66 42h备份日期MTF_DATE_TIME5 字节
71 47h最后访问日期MTF_DATE_TIME5 字节
76 4Ch目录 IDUINT324 字节
80 50h目录名MTF_TAPE_ADDRESS4 字节
结构 8. 目录描述块(MTF_DIRB)

公共的块头 {52 bytes}

公共的块头 字段是一个在每个 DBLK 开头的 52 字节的 MTF_DB_HDR 结构。 MTF_DB_HDR 的 DBLK 类型字段将被设置为 'DIRB'。 MTF_DB_HDR 包含了对所有的 DBLKs 来说都相同的字段以及一个 指向操作系特定数据区域的偏移。 这个区域包含了一个特定操作系的目录相关信息。

目录属性 {4 bytes}

目录属性是一个由 4 个字节组成的 32 比特的字段。 目录属性定义该 MTF_DIRB DBLK 代表的目录的特性。 比特 0 - 7 为预留比特。 比特 8 - 11 和 16 - 18 如下表所示。 直到比特 23 的其他比特预留。 这些比特描了大多数系统共用的目录属性。 有些操作系不使用其中的一些属性,在这种情况下这些比特被忽略掉。

表 13. 目录属性
名称说明
DIRB_READ_ONLY_BIT这个比特表示目录是只读的。BIT8
DIRB_HIDDEN_BIT这个比特表示目录是隐藏的。BIT9
DIRB_SYSTEM_BIT这个比特表示目录是系统目录。BIT10
DIRB_MODIFIED_BIT这个比特表示目录已被修改。这个比特也被称为“归档”标识。BIT11
DIRB_EMPTY_BIT这个比特表示目录不包含文件和子目录。BIT16
DIRB_PATH_IN_STREAM_BIT这个比特表示目录的路径保持在和这个 DBLK 关联的流中。BIT17
DIRE_CORRUPT_BIT这个比特表示和此目录关联的数据不能读。BIT18
预留(设为 0)BIT0 - BIT7 BIT12 - BIT15 BIT19 - BIT23
销售商特定BIT24 - BIT31

最后修改日期 {5 bytes}

最后修改日期 是一个包含目录最后修改日期和时间的 5 字节的字段。 当属于这个目录的文件和子目录添加或者删除后,这个目录就被认为修改了。 这个字段使用 MTF_DATE_TIME 结构。

创建日期 {5 bytes}

创建日期 是另一个使用 MTF_DATE_TIME 结构的 5 字节字段。 这个字段包含了目录创建时的日期和时间。

备份日期 {5 bytes}

备份日期 是另一个使用 MTF_DATE_TIME 结构的 5 字节字段, 包含了这个目录最后一次备份的时间和日期。 当这个目录的所有内容备份后,这个目录被认为是 “已备份” 的。

最后访问日期 {5 bytes}

最后访问日期 同样是一个使用 MTF_DATE_TIME 结构的 5 字节字段,它包含了这个目录最后一个访问的日期和时间。 当目录的内容修改后,则认为这个目录“被访问”了。

注意:备份程序需要尽量不影响这个字段。

目录 ID {4 bytes}

目录 ID 是一个包含了目录 ID 的 4 字节的字段。 这个 ID 以“1”开始于数据集的第一个目录并且每当处理另一个目录时加 1。 这个字段用于错误处理和恢复。

目录名 {4 bytes}

目录名字段是一个使用 MTF_TAPE_ADDRESS 结构来指定本目录的名称的 位置和大小的字段。 这个目录名不包括服务,卷或盘符。 也就是说,"root" 指示 '\' 不能是第一个字符。 它表示所有目录从 root 开始。 系统的路径分隔符必须替换为 NULL 字符('\0')。 MTF_TAPE_ADDRESS 中的 Size 字段必须用来确定字符串的长度。

"root" 目录需要保存为值为 NULL 的一个字符长度的字符串。 为了 "root" 规格的一致性,所有的目录名以 NULL 结尾。 需要注意的是,这是路径分隔符,不是字符串结尾符。

"root" 目录入口(比如:"C:\")保存在 DBLK 的时候为:

'\0'

目录 "C:\apps\fred\bloggs\" 入口保存在 DBLK 为:

apps'\0'fred'\0'bloggs'\0'

因为路径的大小可能比 DBLK 所允许的最大值还大,更大的目录名保存在 'PNAM' 数据流中。 这个流必须是 MTF_DIRB 后的第一个数据流。 当恢复这个目录到另一个系统的时候,创建的目录名称可以会因为目标系统不支持某些字符或者名字太长而被修改。