Microsoft Tape Format Specification

流头(MTF_STREAM_HDR)

每个数据流的开头都有一个 流头(MTF_STREAM_HDR) 结构。 和给定的 DBLK 关联的第一个流头由 DBLK 的开头的偏移定位。 这个偏移保存在 DBLK 的 MTF_DB_HDR 部分的 Offset To First Event 字段。 所有的 流头 都是从 4 字节的边界开始的。

偏移内容类型大小
 0  0h流 IDUINT324 字节
 4  4h流文件系统属性UINT162 字节
 6  6h流媒介格式属性UINT162 字节
 8  8h流长度UINT648 字节
16 10h数据加密算法UINT162 字节
18 12h数据压缩算法UINT162 字节
20 14h校验UINT162 字节
结构 15. 流头(MTF_STREAM_HDR)

流 ID {4 bytes}

流 ID 是一个 4 字节的用于标识数据流的类型的字段。 如下表所示的 4 字节的 ASCII 值用于特定的流 ID。 可以添加额外的 4 字节 ASCII 值。

流文件系统属性 {2 bytes}

流文件系统属性 是一个 2 字节的一共 16 比特的字段。 目前只定义了比特 0 - 2,其余的预留。 这些属性比特提供了关于流中的数据的质量的有用信息。 定义如下所示。

表 17. 流文件系统属性
名称说明
STREAM_MODIFIED_BY_READ流中的数据在读取后改变了,不要尝试验证操作。BIT0
STREAM_CONTAINS_SECURITY这个流中包含有安全信息。BIT1
STREAM_IS_NON_PORTABLE这个数据只能恢复到和源系统相同的系统中。BIT2
STREAM_IS_SPARSE流数据是稀疏的(查看下面)BIT3
预留BIT4 - BIT15

STREAM_IS_SPARSE

STREAM_IS_SPARSE 比特表示接下来的数据是稀疏的,并且封装为 'SPAR' 数据流。 初始的流头在 流 ID 字段指定 类型为稀疏数据(比如:STANDARD_DATA_STREAM),在 流文件系统属性 字段设置 STREAM_IS_SPARSE 比特以及将流长度设为零。 紧跟在初始的流头后面的是一个或多个的封装成稀疏数据的 'SPAR' 数据流。

流媒介格式属性 {2 bytes}

流媒介格式属性 是一个 2 字节的提供了流的涉及格式的物理特性信息的字段。 它们的定义如下。

表 18. 流媒介格式属性
名称说明
STREAM_CONTINUE这是一个跨越流。BIT0
STREAM_VARIABLE这个流的数据大小是可变的。BIT1
STREAM_VAR_END变长数据的最后一块。BIT2
STREAM_ENCRYPTED这个流是加密的。BIT3
STREAM_COMPRESSED这个流是压缩的。BIT4
STREAM_CHECKSUMED这个流会跟着一个校验流。BIT5
STREAM_EMBEDDED_LENGTH这个流的长度嵌在数据中。BIT6
预留BIT7 - BIT15

STREAM_EMBEDDED_LENGTH

STREAM_EMBEDDED_LENGTH 比特已经废弃,在这里还提供的主要原因是向后兼容。 当启用压缩时这个比特用于将流长度内嵌,并且将流数据分为变长流。 这个功能现在由 压缩帧头 提供。

偏移内容类型大小
 0  0h流长度UINT648 字节
 8  8h校验UINT162 字节
结构 16. STREAM_EMBEDDED_LENGTH

流长度 {8 bytes}

流长度 字段使用 8 字节的 UINT64 结构来指定当前流的长度。 流长度不包括 MTF_STREAM_HDR 的大小或者用于对齐的填充数据。

数据加密算法

数据加密算法 是使用 2 字节的包含了当前用来加密数据的加密算法注册 ID 的字段。 只有当流媒介格式属性设置了 STREAM_ENCRYPTED 比特后这个字段才有用。

数据压缩算法

数据压缩算法 是一个当前用来压缩数据的算法注册 ID 的字段。 只有当流媒介格式属性设置了 STREAM_COMPRESSED 比特后这个字段才有用。

校验

校验 包含了对所有字段进行按字进行 XOR 操作的总和。 不包括 2 字节的校验字段本身。 这个字段用于在读操作时验证这是一个合法的流说明。

需要注意的,这个字段不用于文件内容的校验。 它只用于验证流头(MTF_STREAM_HDR)的信息。