2011-02-07 20 views
4

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

我发现一个gpl lib可以帮助,但因为它的gpl我不能将它集成到我的代码。

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

顺便说一句,为什么不能在Windows只是让我直接读取mft文件呢? (通过创建文件和读取方法,如果我想毁掉我的驱动器,这是我的生意,而不是女士)。

谢谢。

回答

3

你只需要打开一个手柄来使用的CreateFile()上\音量\ X:其中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,File Record和基本属性(标准信息,文件名和数据)以及解析代码的基本结构应该运行少于1000行代码。