我正在实施自定义windows磁盘驱动程序,需要FAT32 windows驱动程序重新加载它的FAT表,1和2,这是下面的数据扇区。如何做到这一点?
我需要更快的方法而不卸载驱动器。我之所以这样做,是因为磁盘是内存虚拟磁盘,数据是在访问扇区的过程中从网络中获取的。我正在动态地写目录数据,它可以工作,但不是为了文件-因为在驱动程序获取FAT的时候-集群是免费的,所以文件不工作。我对fastfat.sys进行了讨论,发现了一些要点...至少我找到了设备ioctl代码,可能会重新加载fat表,如果我成功了,我会在这里发布。
发布于 2011-07-06 13:45:22
强制卸载卷并重新挂载它,或者伪造设备删除。
另外,你为什么要这样做呢?如果您试图与操作系统同时写入文件系统,那么这几乎肯定是不安全的。
发布于 2011-07-06 13:53:31
在对FAT进行任何直接更改之前,您应该(必须,真的)对驱动器执行卸载,然后再次挂载以加载这些更改。否则,操作系统可能会覆盖您使用表的(旧)内存中副本所做的脱机更改,从而可能会损坏您的文件系统,使其无法修复。
发布于 2011-07-06 14:16:09
您可以从使用参数FSCTL_LOCK_VOLUME调用DeviceIoControl开始。如果失败,那么您可以确定您最好不要自己修改FAT,因为分区上的其他句柄是打开的。
下一个问题是当FSCTL_LOCK_VOLUME成功时该怎么做。两个人说要卸载卷,但这还不够。你必须让卷离线,IOCTL_VOLUME_OFFLINE。但当我尝试的时候,这仍然是不够的。Windows仍然在某个地方缓冲了一些东西。
https://stackoverflow.com/questions/6591435
复制相似问题