2011-02-07 21 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行代碼。