即使以管理员身份运行,打开$ MFT文件也会导致访问被拒绝

我试图从MFT中删除文件记录,如果我打开原始分区并通过解析MFT文件到达所需的文件记录,我正在成功。 这种方法的问题是我必须首先锁定卷,以便我可以在任何MFT文件记录上写零,如果某个其他进程持有卷锁(非常非常可能),由于Windows操作系统,写入原始卷失败限制。

我想到的另一种方法是将“$ MFT”作为文件打开然后读写它。 通过这种方式我认为我不必锁定音量。 但是当我尝试通过createfile winapi函数打开$ MFT文件时,即使我以管理员身份运行程序,也会出现“拒绝访问”错误?

我的问题是如何打开$ MFT系统文件进行写入和读取? Windows OS是否允许系统文件以正常方式读写? 如果没有,我还能做什么?

任何帮助,将不胜感激。

用户模式程序无法访问$ MFT。 (感谢上帝。)它由NTFS驱动程序维护,仅NTFS驱动程序知道如何使其保持最新。

对于您计划的实现,我建议直接使用文件系统,或实现文件系统filter驱动程序 。 有一个关于编写文件系统filter驱动程序的教程 ,以及一些关于检测删除的指针 。 (一如既往,有一些棘手的事……)

为了防止有人为了合法目的而打开$MFTFSCTL_MOVE_FILEFSCTL_GET_RETRIEVAL_POINTERS DeviceIoControl ,你需要在打开C:\$MFT::$DATA这样的特殊流时在第二个参数中指定FILE_READ_ATTRIBUTESCreateFile

打开$MFT只允许您在执行DeviceIoControl请求时引用特殊文件,它不会像普通文件那样打开它进行读写。

如果您真的想要读取MFT内容,当您需要非常快速地获取卷上每个文件的列表时,请参阅FSCTL_ENUM_USN_DATA ,它返回的结构类似于USN_RECORD_V2 ,它们基本上是MFT记录。