转储$ mft文件的内容

时间:2011-02-07 10:33:44

标签: windows kernel ntfs ntfs-mft

对于某些商业项目我正在做的事情我需要能够读取存储在$ mft文件中的实际数据。

我发现gpl lib可以提供帮助,但由于它的gpl我无法将其集成到我的代码中。

有人可以指点我一个项目,我可以使用/或指向相关的Windows API(不需要1000行代码来实现)

顺便说一句,为什么Windows不能让我直接读取mft文件? (通过创建文件和读取方法,如果我想破坏我的驱动器,那么我的业务不是女士的)。

感谢。

2 个答案:

答案 0 :(得分:3)

你只需要在\。\ 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行的代码。

答案 1 :(得分:1)

这不是一个微不足道的主张。您可能必须推出自己的代码解决方案才能实现此目的。您可以通过查看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

祝你好运。