即使以管理员身份运行,打开$ MFT文件也会导致访问被拒绝
我试图从MFT中删除文件记录,如果我打开原始分区并通过解析MFT文件到达所需的文件记录,我正在成功。 这种方法的问题是我必须首先锁定卷,以便我可以在任何MFT文件记录上写零,如果某个其他进程持有卷锁(非常非常可能),由于Windows操作系统,写入原始卷失败限制。
我想到的另一种方法是将“$ MFT”作为文件打开然后读写它。 通过这种方式我认为我不必锁定音量。 但是当我尝试通过createfile winapi函数打开$ MFT文件时,即使我以管理员身份运行程序,也会出现“拒绝访问”错误?
我的问题是如何打开$ MFT系统文件进行写入和读取? Windows OS是否允许系统文件以正常方式读写? 如果没有,我还能做什么?
任何帮助,将不胜感激。
用户模式程序无法访问$ MFT。 (感谢上帝。)它由NTFS驱动程序维护,仅NTFS驱动程序知道如何使其保持最新。
对于您计划的实现,我建议直接使用文件系统,或实现文件系统filter驱动程序 。 有一个关于编写文件系统filter驱动程序的教程 ,以及一些关于检测删除的指针 。 (一如既往,有一些棘手的事……)
为了防止有人为了合法目的而打开$MFT
, FSCTL_MOVE_FILE
和FSCTL_GET_RETRIEVAL_POINTERS
DeviceIoControl
,你需要在打开C:\$MFT::$DATA
这样的特殊流时在第二个参数中指定FILE_READ_ATTRIBUTES
给CreateFile
打开$MFT
只允许您在执行DeviceIoControl
请求时引用特殊文件,它不会像普通文件那样打开它进行读写。
如果您真的想要读取MFT内容,当您需要非常快速地获取卷上每个文件的列表时,请参阅FSCTL_ENUM_USN_DATA
,它返回的结构类似于USN_RECORD_V2
,它们基本上是MFT记录。