20H类型属性是$ATTRIBUTE_LIST属性,即属性列表,当一个文件需要多个文件记录时,用来描述文件的属性列表。
如果文件记录里的某个属性大到该文件记录不能把该属性完全存储时,系统会采取用Run List来存储这些属性的属性体,这种属性被称为非常驻属性。但是如果这样仍然没有足够的空间时,那么就需要属性列表了。不能完全放进该文件记录中的属性会被放置在一个新的文件记录中,而属性列表属性描述了应该如何找到这个新的文件记录。
在标准属性头之后,20H类型属性包括一系列不同长度的记录,用于描述该文件其他属性的类型和位置。它可能是常驻属性,也可能是非常驻属性,没有最大最小尺寸限制。20H类型的属性的描述见表4-40。
表4-40 20H属性描述表
字节偏移 | 字段长度(字节) | 含义 |
~ | ~ | 标准属性头(已分析过) |
0x00 | 4 | 类型 |
0x04 | 2 | 记录长度 |
0x06 | 1 | 属性名长度(N,为0表示没有属性名) |
0x07 | 1 | 属性名偏移(如果没有属性名,则指向属性内容) |
0x08 | 8 | 起始VCN(属性常驻时为0) |
0x10 | 8 | 属性的基本文件记录中的文件参考号(所有MFT的文件都有一个文件索引号,引用到这个文件参考号,等价于引用这个文件记录,这个参考号在文件记录头中有定义) |
0x18 | 2 | 属性ID(每个属性都有一个唯一的ID号) |
0x1A | 2N | Unicode属性名(如果有属性名) |
20H类型的属性很少见,但有四种情况让系统可能需要20H类型的属性,这四种情况是:
①文件有很多的硬连接(即有很多的文件名属性存在);
②文件有很多碎片,以至文件记录中记录不了这么多的Data Run(数据流);
③属性中有很复杂的安全描述(不适用于NTFS v4.0以上版本);
④属性中有很多的命名流,如数据流。
20H属性可以是常驻的,也可以是非常驻的,常驻20H属性的例子如图4-415所示。
图4-415 常驻的20H属性
非常驻20H属性的例子如图4-416所示。
图4-416 非常驻的20H属性