2013-10-21 33 views
0

我想從MFT中刪除一個文件記錄,如果我通過解析MFT文件打開原始分區並達到需要的文件記錄,我正在成功執行此操作。這種方法的問題是我必須首先鎖定卷,以便我可以在任何MFT文件記錄上寫入零,如果某個其他進程正在保存卷鎖(這非常可能),則由於Windows操作系統的原始卷寫入失敗限制。

我想到的另一種方法是打開「$ MFT」作爲文件,然後讀取和寫入它。通過這種方式,我想我不必鎖定音量。但是當我嘗試通過createfile winapi函數打開$ MFT文件時,即使我以管理員身份運行我的程序,也會引發「拒絕訪問」錯誤?

我的問題是,如何打開$ MFT系統文件來讀寫? Windows操作系統允許系統文件以正常方式讀寫嗎?如果不是,我還能做什麼?

任何幫助,將不勝感激。

+0

你爲什麼要這樣做? –

+0

錯誤.....用於文件擦除/粉碎應用程序,以便文件無法恢復....? –

+2

你可以通過打開文件,寫入隨機數據和沖洗來做*。重複幾次,然後刪除。無需繞過文件系統。 –

回答

1

$ MFT不能從用戶模式程序訪問。 (感謝上帝。)它由NTFS驅動程序維護,並且NTFS驅動程序知道如何使它保持最新狀態。

對於您的計劃實施,我建議直接使用文件系統,或實施file system filter driver。有一個tutorial on writing a file system filter driver,和一些pointers on detecting deletions。 (一如往常,也有一些棘手的位......)

+0

好的!我開始閱讀關於文件系統過濾器驅動程序。我想問一下,我的過濾驅動程序能夠告訴文件系統驅動程序刪除該文件的mft記錄? –

+0

@JewelThief - 你指的是哪種文件系統驅動程序?你的驅動程序,還是NTFS? –

+0

@JewelThief - 順便說一下,你是否知道[NTFS Change Journal](http://www.microsoft.com/msj/0999/journal/journal.aspx)?它跟蹤所有文件操作。我不完全確定這是可編輯的;您的安全刪除程序仍然會留下一些痕跡。 –

1

萬一有人來這裏看開$MFT爲一個合法的目的,FSCTL_MOVE_FILEFSCTL_GET_RETRIEVAL_POINTERSDeviceIoControl,需要在第二個參數指定FILE_READ_ATTRIBUTESCreateFile開立專用流像C:\$MFT::$DATA

開幕$MFT時只允許你指的是特殊的文件執行DeviceIoControl請求時,它不會打開它讀取和寫入像一個正常的文件。

如果您確實想要讀取MFT內容,當您需要非常快速地獲取捲上每個文件的列表時,請參閱FSCTL_ENUM_USN_DATA,它會返回像USN_RECORD_V2這樣的結構,它們基本上是MFT記錄。

相關問題