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

我正在实现自定义的Windows磁盘驱动程序,并且需要FAT32的Windows驱动程序重新加载FAT表,1和2,这是低于数据部门。 如何做到这一点?

我需要更快的方法,而无需卸载驱动器。 为什么我这样做是因为磁盘是内存虚拟磁盘,在访问扇区过程中从networking中获取数据。 我在即时编写目录数据,它的工作,但不是文件 – 因为在驱动程序获取FAT时 – 群集是免费的,所以文件无法正常工作。 我disasemblefastfastfat.sys,发现了一些要点…至less我发现设备的ioctl代码,可能会重新加载胖表,我会张贴在这里,如果我成功了。

强制卸载卷并重新安装,或者假装卸下设备。

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

在对FAT进行任何直接更改之前 ,您应该(确实必须 )真正卸载该驱动器,然后重新装载以加载这些更改。 否则,您可能会冒险将操作系统覆盖使用其(内存)旧表副本所做的离线更改,这可能会损坏您的文件系统而无法修复。

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

接下来的问题是当FSCTL_LOCK_VOLUME成功时要做什么。 两个人说要卸载音量,但这还不够。 您必须将卷脱机,IOCTL_VOLUME_OFFLINE。 但是当我尝试时,还是不够的。 Windows仍然有东西缓冲。