NTFS 根据 $DATA 属性列表中的记录 ID 获取 MFT 条目

NTFS 根据 $DATA 属性列表中的记录 ID 获取 MFT 条目

我正在尝试用 C 编写一个简单的 NTFS 解析器,并在其中video解释说,在属性列表 $DATA 中有一个文件记录 id,这是 MFT 表中用于标识条目的唯一 id,他说要获取 MFT 条目,只需将该 id 乘以文件记录大小(在本例中为 1024),然后您将获得 MFT 条目字节偏移量:

mft_entry_byte_offset = file_record_id * file_record_size

使用 WinHex,我随机选择了一个 1.5GB 的文件,该文件有许多碎片,使用公式它没有指向 MFT 条目 

这是数据列表的一部分,每个条目都使用此结构获取:ATTRIBUTE_LIST_ENTRY

80 00 00 00 20 00 00 1A A3 A3 01 00 00 00 00 00
5B CC 07 00 00 00 32 01 00 00 00 00 00 00 00 00

80 00 00 00 20 00 00 1A DD 00 02 00 00 00 00 00
D7 BD 07 00 00 00 77 00 00 00 00 00 00 00 00 00

80 00 00 00 20 00 00 1A 51 1E 02 00 00 00 00 00
61 54 03 00 00 00 44 04 00 00 00 00 00 00 00 00

列表中的第一项是:

record_id = 5B CC 07 00 = 511067
mft_entry = 511067 * 1024 = 523 332 608 (byte offset)
sector = 523 332 608 / 512 = 1 022 134

使用活动磁盘编辑器,如果我转到条目 511067,它会说它位于 63 490 486 扇区

我知道 Windows API 可以访问文件记录 ID 并获取条目,但我想在不使用 API 的情况下获取它

相关内容