2

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

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

4

3 回答 3

2

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

于 2011-07-06T05:53:30.723 回答
2

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

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

于 2011-07-06T05:45:21.643 回答
0

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

下一个问题是当 FSCTL_LOCK_VOLUME 成功时该怎么做。两个人说要卸载卷,但这还不够。您必须使卷脱机,IOCTL_VOLUME_OFFLINE。但是当我尝试时,它仍然是不够的。Windows 仍然在某处缓冲了一些东西。

于 2011-07-06T06:16:08.833 回答