NTFS 磁盘上 $MFT 中的错误 $FILE_NAME 条目

Bad $FILE_NAME entries in $MFT on NTFS disk

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

除少量记录(大约 60000 条中的 10 条)return 文件名中的错误字符外,一切正常。请参阅下面的屏幕截图:

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

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

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

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

对于以后的任何人,我在阅读时偶然发现了答案this link

The fixup array starts at offset 0x30. The first two bytes (0x 8c 06) are the last two bytes in every sector of the record. The real last couple of bytes in all the sectors are stored in the fixup array that follows, namely all zeroes.

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