每个数据流的开头都有一个 流头(MTF_STREAM_HDR) 结构。 和给定的 DBLK 关联的第一个流头由 DBLK 的开头的偏移定位。 这个偏移保存在 DBLK 的 MTF_DB_HDR 部分的 Offset To First Event 字段。 所有的 流头 都是从 4 字节的边界开始的。
| 偏移 | 内容 | 类型 | 大小 |
|---|---|---|---|
| 0 0h | 流 ID | UINT32 | 4 字节 |
| 4 4h | 流文件系统属性 | UINT16 | 2 字节 |
| 6 6h | 流媒介格式属性 | UINT16 | 2 字节 |
| 8 8h | 流长度 | UINT64 | 8 字节 |
| 16 10h | 数据加密算法 | UINT16 | 2 字节 |
| 18 12h | 数据压缩算法 | UINT16 | 2 字节 |
| 20 14h | 校验 | UINT16 | 2 字节 |
流 ID 是一个 4 字节的用于标识数据流的类型的字段。 如下表所示的 4 字节的 ASCII 值用于特定的流 ID。 可以添加额外的 4 字节 ASCII 值。
流文件系统属性 是一个 2 字节的一共 16 比特的字段。 目前只定义了比特 0 - 2,其余的预留。 这些属性比特提供了关于流中的数据的质量的有用信息。 定义如下所示。
| 名称 | 说明 | 值 |
|---|---|---|
| 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 字节的提供了流的涉及格式的物理特性信息的字段。 它们的定义如下。
| 名称 | 说明 | 值 |
|---|---|---|
| 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 | 流长度 | UINT64 | 8 字节 |
| 8 8h | 校验 | UINT16 | 2 字节 |
流长度 字段使用 8 字节的 UINT64 结构来指定当前流的长度。 流长度不包括 MTF_STREAM_HDR 的大小或者用于对齐的填充数据。
数据加密算法 是使用 2 字节的包含了当前用来加密数据的加密算法注册 ID 的字段。 只有当流媒介格式属性设置了 STREAM_ENCRYPTED 比特后这个字段才有用。
数据压缩算法 是一个当前用来压缩数据的算法注册 ID 的字段。 只有当流媒介格式属性设置了 STREAM_COMPRESSED 比特后这个字段才有用。
校验 包含了对所有字段进行按字进行 XOR 操作的总和。 不包括 2 字节的校验字段本身。 这个字段用于在读操作时验证这是一个合法的流说明。
需要注意的,这个字段不用于文件内容的校验。 它只用于验证流头(MTF_STREAM_HDR)的信息。