NTFS文件系统索引根属性
2021-07-01
547
0
NTFS 索引根属性($INDEX_ROOT)的类型值为0X90.
每个文件都有索引根属性,它是为实现索引而设置的B+树的根节点,包含存储在其中的文件或子目录的相关信息。
如果一个目录比较大,还需要用到$INDEX_ALLOCATION属性(索引分配属性)和$BITMAP属性(位图属性)
目录除了具有$INDEX_ROOT属性外,还可拥有$DATA属性,即目录内即可以存储文件和子目录列表,也可以存储文件内容,因为存放在其中的文件的$DATA属性可以存储在任何它可以容纳得下的程序或用户数据。
目录的$INDEX_ROOT属性和$INDEX_ALLOCATION属性名通常为”$I30”
- 索引采用树状结构,树有很多的节点,每个节点包含一个或几个索引项。
- 树的根部位于索引根属性($INDEX_ROOT),且只能容纳少量的索引项。
- 根索引属性有一个16个字节的头结构,跟在其后的是节点头和索引项列表。其它节点在索引分配属性($INDEX_ALLOCATION)中描述它们的索引记录。
- 位图属性管理索引记录的分配情况。
索引头结构
字节偏移 | 字节数 | 含 义 |
---|---|---|
00~03 | 4 | 索引的属性类型 |
04~07 | 4 | 分类规则 |
08~0b | 4 | 每个索引记录的大小(字节数) |
0c | 1 | 每个索引记录的大小簇数 |
0d~0f | 3 | 未用 |
10~ | 节点头 |
索引节点头
字节偏移 | 字节数 | 含 义 |
---|---|---|
00~03 | 4 | 索引项列表起始偏移(相对于节点头起始处) |
04~07 | 4 | 索引项列表已用部分的结尾偏移(相对于节点头起始处) |
08~0b | 4 | 索引项列表缓冲区的结尾偏移(相对于节点头起始处) |
0C~0F | 4 | 村志,如果有其它节点指向该节点,此值为0x01 |
索引项
字节偏移 | 字节数 | 含 义 |
---|---|---|
00~07 | 8 | 未定义(目录索引中用于记录文件的MFT文件参考号) |
08~09 | 2 | 本索引项的长度(从索引项起始处) |
0a~0b | 2 | 内容长度(目录索引中用于记录文件名属性长度) |
0c~0d | 2 | 标志0x01-有子节点02-为列表的最后一项 |
0e~0f | 2 | 未使用 |
10~ | 0或8 | 索引分配中的子节点的VCN(只有当标志为有子节点才使用) |
目录索引项
目录索引项用于索引至文件或目录名,它的数据结构如下:
字节偏移 | 字节数 | 含 义 |
---|---|---|
00~07 | 8 | 该文件名所在的MFT的文件参考号 |
08~09 | 2 | 本索引项的长度(从索引项的起始处) |
0A~0B | 2 | 文件名属性长度 |
0C~0D | 2 | 标志0x01-有子节点02-为列表的最后一项 |
0E~0F | 2 | 未使用 |
10~ | 0A~0B处的值大于0时 | 8字节:父目录的MFT文件参考号8字节:文件创建时间8字节:文件最后修改时间8字节:文件MFT最后改变时间8字节:最后访问时间8字节:文件实际大小8字节:为文件存储分配的大小8字节:标志 1字节:文件名长度1字节:文件名命名空间~字节:文件名 |
项的最后8字节起始于一个8字节边界 | 索引分配中的子节点VCN(只有当标志为有子节点时才使用) |