0

我有一些代码正在解析 NTFS 磁盘上的 $MFT。

一切正常,除了少数记录(大约 60000 条中的 10 条)在文件名中返回不正确的字符。请看下面的截图:

在此处输入图像描述

请注意由字节“0E”定义的 Unicode 字符。在所有其他应用程序中,这是一个下划线字符。见下文:

在此处输入图像描述

即使在包含目录的 $INDEX_ROOT 属性中,它也具有正确的名称:

在此处输入图像描述

我读错了 $FILE_NAME 属性吗?还是我应该忽略那里的内容并始终使用目录的 $INDEX_ROOT 属性中的名称?这似乎有点倒退?

注意:它并不总是“0E”,也不总是这个文件名,但似乎总是只有一个字符在每个“坏”记录中都是错误的。

4

1 回答 1

0

对于将来的任何人,我在阅读此链接时偶然发现了答案:

fixup 数组从偏移量 0x30 开始。前两个字节(0x 8c 06)是记录的每个扇区的最后两个字节。所有扇区中真正的最后几个字节存储在随后的修复数组中,即全为零。

请注意,您的值会有所不同,但您会注意到,只要文件名属性跨越扇区边界(如上面 WinHex 的屏幕截图所示),就会出现“错误”文件名。一旦扇区字节的结尾被相关的修复字节替换,文件名就正确了。

于 2019-02-22T15:53:58.513 回答