复合文档格式(四),-,主扇区分配表和扇区分配表公开课(2022年)
位置: 首页 >专题范文 > 公文范文 > 文章内容

复合文档格式(四),-,主扇区分配表和扇区分配表公开课(2022年)

2022-08-12 16:00:03 投稿作者:网友投稿 点击:

下面是小编为大家整理的复合文档格式(四),-,主扇区分配表和扇区分配表公开课(2022年),供大家参考。

复合文档格式(四),-,主扇区分配表和扇区分配表公开课(2022年)

 

 复合文档格式(四)

 - 主扇区分配表和扇区分配表 主扇区分配表

 - -

 MSAT

 1.主扇区分配表 - Master Sector Allocation Table ,简称 MSAT,扇区分配表 - Sector Allocation Table ,简称 SAT  主扇区分配表(MSAT)是由扇区分配表(SAT)使用的所有的扇区(sector)的一个 SecID 数组,即 MSAT 数组中存储的是 SAT 占据的扇区的 SecID  主扇区分配表(MSAT)的大小(即存储 SecID 数组的长度)等于扇区分配表(SAT)占据的扇区数,该值存储在复合文档头中,详情看上一篇:http://blog.csdn.net/lipinganq/article/details/76737002  由于 SAT 占据的扇区是不成链的,所以 SAT 所使用的扇区的 SecID 都存储在MSAT 中  主扇区分配表(MSAT)的前 109 个 SecID 在复合文档头中直接存储,该 SecID 对应的扇区就是被 SAT 使用的扇区,但是当 SAT 所使用的扇区个数超过 109 个,则需要额外的扇区存储超过的扇区的 SecID,在复合文档头部中存储了添加的额外扇区中的第一个扇区的 SecID  鲁国平 SAT 所使用的扇区数没有超过 109,就没有添加额外的扇区,则复合文档头部中存储的添加的额外扇区中的第一个扇区的 SecID 值为-2,表示一个特殊的 End Of Chain SecID  MSAT 所使用的扇区是成链的,所以 MSAT 中添加的额外扇区的  MSAT 由复合文档头中和添加额外扇区中的最后 4 个字节就是下一个额外扇区的 SecID,最后一个额外扇区的最后 4 字节为-2,表示一个特殊的 End Of Chain SecID 2.MSAT 中一个扇区的内容  MSAT 是一个 SecID 数组,每个 SecID 为 32 位整数,指向一个 SAT 占据的扇区,扇区的最后 4 个字节就是下一个扇区的 SecID  sec_size 表示一个扇区的大小,单位为字节  则一个扇区最多可以存储(sec_size-4)/4 个 SecID

 三. . 一个主扇区分配表实例

  2.1 假设一个复合文档文件包含一个扇区分配表 SAT,该 SAT 需要 300 个扇区去存储  假设头中指定一个扇区的大小为 512 字节,因为每个 SecID 是 32 位整数,占 4 字节,则意味着每个扇区可以存储 128 个 SecID  由于 SAT 需要 300 个扇区存储,所以主扇区分配表 MSAT 由 300 个 SrcID 组成,该 SecID 对应的扇区就是 SAT 占据的扇区,由于在复合文档头中存储了109 个 SecID,这意味着其余 191 个 SecID 需要 2 个额外的扇区来存储  MSAT 的最后一个额外扇区可能没有使用完,未使用的空间用-1 填充,表示一个特殊的 Free SecID  在本例中,头中指定了 MSAT 所使用的 2 个额外扇区中第一个扇区的 SecID是 1,即扇区 1,扇区 1 中包含了余下 191 个 SecID 中的 127 个,扇区 1 中第 128 个 SecID 就是 MSATd 的第二个额外扇区的 SecID,MSAT 的第二个额外扇区中包含剩下的 64 个 SecID,剩下的空间用-1 填充

 四. . 扇区分配表

 - -

 SAT

 1.扇区分配表 - Sector Allocation Table ,简称 SAT 2.扇区分配表(SAT)是一个 SecID 数组,它包含所有用户流 streams(短流 short-streams 除外)和其余内部控制流(short-stream container stream、shortsector allocation table、directory)的 SecID 链。扇区分配表 SAT 的大小(即存储 SecID 数组的长度)等于复合文档中现有扇区 Sector 的数量 3.扇区分配表 SAT 是一个数组,数组元素是一个 32 位的整数,它与主扇区分配表 MSAT 是截然不同的  扇区分配表 SAT 是按照数组下标(或数组索引)来对应扇区的,如扇区分配表 SAT 的下标 0(或索引 0),对应扇区 SecID 为 0,下标 1 对应扇区 SecID 为 1。。。

  扇区分配表 SAT 数组下标处的数组元素对应的是下一个扇区的 SecID,如下标 0 处的值为 2,则流中紧接着下一个扇区 SecID 是 2,同时在下标 2 中又存储了下下一个扇区的 SecID。。。这样就形成了一个 SecID 链(SecID Chain),将相关的扇区串联起来,形成一个完整的"流"。

  SecID 链在数组值为-2 的位置结束 4.1

 构建扇区分配表

 - -

 Sector Allocation Table

 3.1.1. 扇区分配表 SAT 是通过 read 并连接在主扇区分配表 MSAT 中给出的所有扇区 sector 的内容构建的。

 这些扇区 sector 必须根据在 MSAT 中的 SecID 的顺序进行读取。

 3.1.2. 扇区分配表 SAT 中一个扇区 sector 的内容如图:

  扇区分配表 SAT 是一个 SecID 数组,数组元素是一个 32 位的整数,表示一个扇区的 SecID,所以每个数组元素占据 2 个字节  SAT 可能由多个扇区构建而成  sec_size 是一个扇区 sector 的大小,单位为字节,则一个扇区中 SecID的个数为 sec_size /4 4.2

 使用扇区分配表

 - -

 Sector Allocation Table

 4.2.1 SecID 链的入口必须在其他地方获得

 SecID 链的入口获得了,就可以构造整个 SecID 链了

 例如:从用户流的目录条目;从内部控制流(如短扇区分配表 short-sector allocation table)的头;从目录流(directory stream )本身

 4.2.2 构造 SecID 链 - SecID Chain  当为一个特殊流构建一个 SecID 链,扇区分配表 SAT 中的当前位置(即数组索引)就是当前扇区 sector 的 SecID,即数组索引就是当前扇区的 SecID  当前数组索引处的值就是 SecID 链中下一个扇区的 SecID 4.2.3

 特殊扇区

  扇区分配表 SAT 可能在任意位置包含特殊的 Free SID(对应的值为-1),这些扇区不被流所使用  如果该位置包含特殊的 End Of Chain SecID (对应的值为-2),表示一个流的最后一个扇区  扇区分配表 SAT 自身使用的扇区 sector 是没有链(chain)的,但是用特殊的 SAT SecID (对应的值为-3)标记  主扇区分配表 MSAT 自身使用的扇区 sector 使用特殊的 MSAT SecID(对应的值为-4)标记 五. . 一个扇区分配表的实例

  4.1 假设复合文档中包含一个扇区,它是一个扇区分配表 SAT(扇区 sector 1)和两个流所需的 4.2 扇区 Sector 1 包含上图扇区分配表 SAT 显示出的 SecID 数组,在数组索引1 处的值为-3,-3 是一个特殊的 SAT SecID ,标记这个扇区是一个扇区分配表SAT 的一部分 4.3 第一个流  如果一个流是内部目录流( internal directory stream),假设在复合文档头部中指定从扇区 sector 0 开始,即从 SAT 中下标 0 处开始  从图中看出 SAT 下标 0 处的值为 2,表示紧接着的下一个扇区是 sector 2,下标 2 处的值为 3,表示下一个扇区是 sector 3,下标 3 处的值为-2,表示流完了  从上面知道该目录流的 SecID 链是[0, 2, 3, –2] ,该目录流存储在 3个扇区中 4.4 第二个流  假设该内部目录流( internal directory stream)包含一个用户流的条目,从扇区 sector 10 开始  该用户流的 SecID 链是[10,6,7,8,9,-2] 六.实例 6.1 复合文档头中的第 68 - 71 的 4 个字节表示主扇区分配表(Master Sector Allocation Table

 MSAT)附加扇区中的第一个扇区(sector)的 SecID

 6.2 复合文档头中的第 72 - 75 的 4 个字节主扇区分配表(Master Sector Allocation Table

 MSAT)占据的扇区总数

 6.3 复合文档的头部的第 76 - 511 的 436 个字节表示主扇区分配表( master sector allocation table MSAT)的一部分,包含 MSAT 的前 109 个 SecID,如果 SAT 占据的扇区总数大于 109,则 MSAT 就会有附加扇区,5.1 中记录的就是附加扇区中第一个扇区的 SecID

 6.4 例子中扇区分配表(SAT)仅使用了一个扇区(sector),没有超过 109,所以没有附加扇区,所以其他所有剩余的 SecID都设置为-1,表示为特殊的 Free SecID。

 这里 SAT 仅使用的扇区为扇区 0


推荐访问:复合文档格式(四) - 主扇区分配表和扇区分配表公开课 扇区 分配 公开课

猜你喜欢