我正在实现自定义Windows磁盘驱动程序,并且需要FAT32 Windows驱动程序重新加载FAT表,1和2,即数据扇区之下。 如何做到这一点?
我需要更快的方法而无需卸载驱动器。为什么我这样做是因为磁盘是内存虚拟磁盘,数据是在访问扇区的过程中从网络中获取的。我正在编写目录数据,它可以工作,但不适用于文件 - 因为在驱动程序获取FAT时 - 集群是免费的,因此文件不起作用。我解散了fastfat.sys并找到了一些要点......至少我发现设备ioctl代码可能会重新加载胖表,如果我成功的话,我会在这里发帖。
答案 0 :(得分:2)
强制卸载卷并重新安装,或伪造设备删除。
另外,你为什么要这样做?如果您尝试在操作系统的同时写入文件系统,这几乎肯定不是安全的。
答案 1 :(得分:2)
你应该(好吧,必须,真的)卸载驱动器之前对FAT进行任何直接更改,然后重新安装到加载这些更改。否则,您可能会冒着操作系统覆盖使用表(旧)内存中副本所做的脱机更改的可能性,可能会破坏您的文件系统,无法修复。
答案 2 :(得分:0)
您可以通过使用参数FSCTL_LOCK_VOLUME调用DeviceIoControl来开始。如果失败,那么你可以确定最好不要自己修改FAT,因为其他句柄在分区的某个地方打开。
下一个问题是当FSCTL_LOCK_VOLUME成功时该怎么办。两个人说要卸下音量,但这还不够。您必须使卷脱机,IOCTL_VOLUME_OFFLINE。但是当我进行实验时,它还不够。 Windows仍然在某处缓存了一些东西。