簡體   English   中英

如何強制 windows FAT32 驅動重新加載 FAT 表?

[英]how to force windows FAT32 driver to reload FAT table?

我正在實現自定義 windows 磁盤驅動程序,並且需要 FAT32 windows 驅動程序重新加載它 FAT 表 1 和 2,即數據扇區下方。 如何做到這一點?

我需要更快的方法而不卸載驅動器。 為什么我這樣做是因為磁盤是 memory 虛擬磁盤,並且數據是在訪問扇區的過程中從網絡獲取的。 我正在即時寫入目錄數據,它可以工作,但不適用於文件 - 因為有時驅動程序會獲取 FAT - 集群是免費的,所以文件不起作用。 我分解了 fastfat.sys 並發現了一些要點......至少我找到了可能會重新加載胖表的設備 ioctl 代碼,如果我成功了,我會在這里發布。

強制卸載卷並重新安裝它,或者假裝移除設備。

另外,你為什么要這樣做? 如果您嘗試與操作系統同時寫入文件系統,這幾乎肯定是不安全的。

在對 FAT 進行任何直接更改之前,您應該(嗯,必須,真的)卸載驅動器,然后再次安裝以加載這些更改。 否則,您可能會冒操作系統覆蓋您使用其(舊)內存中表副本所做的離線更改的風險,可能會損壞您的文件系統而無法修復。

您可以從使用參數 FSCTL_LOCK_VOLUME 調用 DeviceIoControl 開始。 如果它失敗,那么您可以確定您最好不要自己修改 FAT,因為其他句柄在分區的某處打開。

下一個問題是當 FSCTL_LOCK_VOLUME 成功時該怎么做。 兩個人說要卸載卷,但這還不夠。 您必須使卷脫機,IOCTL_VOLUME_OFFLINE。 但是當我嘗試時,它仍然是不夠的。 Windows 仍然在某處緩沖了一些東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM