对于我正在做的一些商业项目,我需要能够读取存储在 $mft 文件中的实际数据。
我找到了一个可以提供帮助的gpl 库,但是由于它的 gpl 我无法将它集成到我的代码中。
有人可以指点我一个我可以使用的项目/或指点我相关的 Windows API(不需要 1000 行代码来实现的东西)
顺便说一句,为什么 Windows 不允许我直接读取 mft 文件?(通过创建文件和读取方法,如果我想毁掉我的驱动器,那是我的事,不是女士的)。
谢谢。
您只需使用\.\X 上的CreateFile()打开卷的句柄:其中 X 是驱动器号(查看 CreateFile() 上的 MSDN 文档,它在备注部分提到了这一点)。
将第一个扇区读入一个 NTFS 引导记录结构(可以在网上找到,搜索 Richard "Flatcap" Russon,编辑:我找到了,http ://www.flatcap.org/ntfs/ntfs/files/boot.html )。引导扇区结构中的一个字段给出了集群中 MFT 的起始位置($MFT 的 VCN 0 的 LCN),您必须对该位置执行SetFilePointer()以读取多个扇区。该位置的前 1024 个字节是 $MFT 的文件记录,您可以再次解析此结构以找到始终非常驻的数据属性,它的大小是当时 MFT 文件的实际大小。
$Boot、文件记录和基本属性(标准信息、文件名和数据)的基本结构以及解析代码应该运行不到 1000 行代码。
这不会是一个微不足道的提议。您可能必须推出自己的代码解决方案才能完成此操作。您可以通过查看http://www.ntfs.com/ntfs-mft.htm获取有关 $MFT 详细信息的一些信息
另一种选择是花一些时间查看开源项目 NTFS-3g 的源代码。您可以从http://www.tuxera.com/community/ntfs-3g-download/下载源代码
另一个好的项目是 NTFSProgs http://en.wikipedia.org/wiki/Ntfsprogs
祝你好运。