如何强制Windows FAT32驱动程序重新加载FAT表?

时间:2011-07-06 04:08:34

标签: c++ windows driver fat32

我正在实现自定义Windows磁盘驱动程序,并且需要FAT32 Windows驱动程序重新加载FAT表,1和2,即数据扇区之下。 如何做到这一点?

我需要更快的方法而无需卸载驱动器。为什么我这样做是因为磁盘是内存虚拟磁盘,数据是在访问扇区的过程中从网络中获取的。我正在编写目录数据,它可以工作,但不适用于文件 - 因为在驱动程序获取FAT时 - 集群是免费的,因此文件不起作用。我解散了fastfat.sys并找到了一些要点......至少我发现设备ioctl代码可能会重新加载胖表,如果我成功的话,我会在这里发帖。

3 个答案:

答案 0 :(得分:2)

强制卸载卷并重新安装,或伪造设备删除。

另外,你为什么要这样做?如果您尝试在操作系统的同时写入文件系统,这几乎肯定不是安全的。

答案 1 :(得分:2)

你应该(好吧,必须,真的)卸载驱动器之前对FAT进行任何直接更改,然后重新安装到加载这些更改。否则,您可能会冒着操作系统覆盖使用表(旧)内存中副本所做的脱机更改的可能性,可能会破坏您的文件系统,无法修复。

答案 2 :(得分:0)

您可以通过使用参数FSCTL_LOCK_VOLUME调用DeviceIoControl来开始。如果失败,那么你可以确定最好不要自己修改FAT,因为其他句柄在分区的某个地方打开。

下一个问题是当FSCTL_LOCK_VOLUME成功时该怎么办。两个人说要卸下音量,但这还不够。您必须使卷脱机,IOCTL_VOLUME_OFFLINE。但是当我进行实验时,它还不够。 Windows仍然在某处缓存了一些东西。