90H类型属性即$INDEX_ROOT,是索引根属性,该属性是实现NTFS的B+树索引的根节点,它总是常驻属性。该属性没有最大最小长度限制。属性结构如下:
标准属性头
索引根
索引头
索引项
索引项
...
索引根
索引根的描述见表4-67。
表4-67 索引根描述
字节偏移 | 字段长度(字节) | 描述 |
~ | ~ | 标准属性头(已分析过) |
0x00 | 4 | 属性类型 |
0x04 | 4 | 校对规则 |
0x08 | 4 | 每个索引缓冲区的分配大小(字节数) |
0x0C | 1 | 每个索引缓冲区的簇数 |
0x0D | 3 | 无意义(填充到属性长度能被8整除) |
索引头
索引头的描述见表4-68。
表4-68 索引头描述
字节偏移 | 字段长度(字节) | 描述 |
0x00 | 4 | 第一个索引项的偏移 |
0x04 | 4 | 索引项的总大小 |
0x08 | 4 | 索引项的分配大小 |
0x0C | 1 | 标志:当该字节为00时,表示其为小索引(适合于索引根);当该字节为01时,表示其为大索引(适合于索引分配) |
0x0D | 3 | 无意义(填充到属性长度能被8整除) |
索引项
索引头后面有着不同长度的索引项的序列,由一个带有最后一个索引项标志的特殊索引项来结束。当一个目录比较小,可以全部存储在索引根属性中时,该目录就只需要这一个属性来描述。而如果目录太大不能全部存储在索引根中时,就会有两个附加的属性出现:一个是索引分配属性,描述B+树目录的子节点;另一个是索引位图属性,描述索引块的索引分配属性使用的虚拟簇号。根目录$Root包含它自身的一个索引项。常用索引项见表4-69。
表4-69 常用索引项
索引项的结构见表4-70。
表4-70 索引项描述
字节偏移 | 字段长度(字节) | 描述 |
0x00 | 8 | 该文件的MFT参考号 |
0x08 | 2 | 索引项的大小(相对索引项开始的偏移) |
0x0A | 2 | 文件名属性体大小 |
0x0C | 2 | 索引标志:此处为1表示这个索引项包含子节点;为2表示这是最后一个项 |
0x0E | 2 | 用0填充,无意义 |
0x10 | 8 | 父目录的MFT文件参考号 |
0x18 | 8 | 文件创建时间 |
0x20 | 8 | 文件最后修改时间 |
0x28 | 8 | 文件记录最后修改时间 |
0x30 | 8 | 文件最后访问时间 |
0x38 | 8 | 文件的分配大小 |
0x40 | 8 | 文件的实际大小 |
0x48 | 8 | 文件标志 |
0x50 | 1 | 文件名的长度 |
0x51 | 1 | 文件名的命名空间 |
0x52 | 2F | 文件名 |
2F+0x52 | P | 填充到能被8整除(无意义) |
P+2F+0x52 | 8 | 子节点的索引所在的VCN(需要有子节点时才有) |
90H属性的例子如图4-428所示。
图4-428 90H属性的例子