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

时间:2013-10-21 15:56:17

标签: c windows winapi ntfs

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

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

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果某人为了一个合法目的(FSCTL_MOVE_FILEFSCTL_GET_RETRIEVAL_POINTERS DeviceIoControl而来到这里寻找开放$MFT,您需要指定FILE_READ_ATTRIBUTES在打开CreateFile

等特殊流时,在C:\$MFT::$DATA的第二个参数中

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

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

答案 1 :(得分:1)

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

对于您计划的实施,我建议您直接使用文件系统,或实施file system filter driver。有一个tutorial on writing a file system filter driver,还有一些pointers on detecting deletions。 (一如既往,有一些棘手的问题......)