无法修改NTFS的主文件表(MFT)中的文件记录

时间:2011-07-13 03:01:53

标签: windows filesystems ntfs

我正在编写一个程序来删除Windows中NTFS卷中的文件和所有相关属性(包括0x30 $ FILE_NAME,0x80 $ DATA,0x90 $ INDEX_ROOT和0x​​A0 $ INDEX_ALLOCATION等)。

我现在可以在任何文件中找到文件记录的位置。我会多次覆盖文件记录以防止恢复,然后我放回文件记录所具有的基本信息(即第一个属性“0x10 $ STANDARD_INFORMATION”的标准属性标题)。

我使用WriteFile()编写文件记录,返回的值表示功能成功。 之后,打开磁盘以通过WinHex查看原始数据我可以看到文件记录实际上已被修改

但问题是,在我删除了另外两个或三个文件之后,先前文件的文件记录重新出现,好像我从来没有做过任何事情。

我认为这可能是Windows文件管理的一些恢复机制。我想知道是否有任何方法可以在没有Windows恢复的情况下成功修改文件记录。

P.S。在我手动修改文件记录之前,我使用DeleteFile()来处理B +树和其他内容。

2 个答案:

答案 0 :(得分:3)

你确定MFT记录被删除了吗?因为如果是,那么该文件将不会再出现。

检查您的MFT记录位置计算(从VCN到实际CN和扇区号)。 另外,还有一个$ MFTMirror,您应该检查$ MFTMirror中是否存在MFT记录的副本(对于有问题的文件)...如果是,那么您应该删除该记录。

如果您可以共享MFT记录定位器的代码(很可能那就是问题所在)...我可以帮助您更多。

答案 1 :(得分:0)

我正在尝试做类似的事情,但是当我尝试写入MFT时却被拒绝访问。 ReadFile可以正常工作,但是当我尝试WriteFile时失败。

我正在使用以下内容获取初始句柄

    h = CreateFile(drive
        , GENERIC_READ | GENERIC_WRITE
        , FILE_SHARE_READ | FILE_SHARE_WRITE
        , NULL
        , OPEN_EXISTING
        , 0
        , NULL);

然后使用ReadFile进入启动扇区,最终枚举文件/目录...

ReadFile(h, &bSec, sizeof bSec, &read, NULL);

当我以后使用WriteFile(...)时,我得到Access Denined,那里有一个安全选项,我需要在其句柄上进行设置,以便能够写入MFT。我已经做了一些谷歌搜索,但是找不到任何有用的东西。