我正在编写一个程序来删除Windows中NTFS卷中的文件和所有相关属性(包括0x30 $ FILE_NAME,0x80 $ DATA,0x90 $ INDEX_ROOT和0xA0 $ INDEX_ALLOCATION等)。
我现在可以在任何文件中找到文件记录的位置。我会多次覆盖文件记录以防止恢复,然后我放回文件记录所具有的基本信息(即第一个属性“0x10 $ STANDARD_INFORMATION”的标准属性标题)。
我使用WriteFile()来编写文件记录,返回的值表示功能成功。 之后,打开磁盘以通过WinHex查看原始数据我可以看到文件记录实际上已被修改。
但问题是,在我删除了另外两个或三个文件之后,先前文件的文件记录重新出现,好像我从来没有做过任何事情。
我认为这可能是Windows文件管理的一些恢复机制。我想知道是否有任何方法可以在没有Windows恢复的情况下成功修改文件记录。
P.S。在我手动修改文件记录之前,我使用DeleteFile()来处理B +树和其他内容。
答案 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。我已经做了一些谷歌搜索,但是找不到任何有用的东西。