IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL (ntifs.h)
IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES 控件程式代碼會傳送至強制排清文件系統,再發生磁碟區陰影複製。 此 IOCTL 會發出為IRP_MJ_DEVICE_CONTROL要求,該要求只會傳送至本機文件系統的磁碟區裝置物件,以及可能已連結至該磁碟區的文件系統篩選驅動程式。 此 IOCTL 最常由磁碟區陰影複製服務傳送,但也可以由其他使用者模式應用程式或進程發出。 在休眠要求或損毀傾印之前,磁碟區陰影複製驅動程式(volsnap.sys)也有可能在這個 IOCTL 的特殊情況下傳送。 此 IOCTL 會傳送至檔案系統篩選驅動程式、檔案系統驅動程式和其他設備驅動器(例如,儲存篩選器驅動程式和儲存裝置驅動程式,例如)位於檔系統下方。
當 NTFS 之類的文件系統收到IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES時,文件系統應該將磁碟區排清到磁碟,迫使文件系統的磁碟結構變成一致且 up-to日期狀態。 檔系統應將文件系統鎖定為唯讀可掛接狀態,封鎖任何新的文件系統變更,以防止任何快取的磁碟頁面變成骯髒。 文件系統將文件系統置於這類狀態之後,必須將 IRP 與 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL 一起傳遞至下一個驅動程式,同時繼續讓文件系統保持如此只讀的可掛接狀態,直到下列驅動程式完成 IRP 為止。 當 IRP 完成或取消時,檔案系統會在磁碟區上重新啟用 I/O 並傳回。
主要程序代碼
輸入緩衝區
IrpSp->Parameters.DeviceIoControl.IoControlCode 設定為 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES。
輸出緩衝區
沒有
狀態區塊
Status 成員會設定為成功或適當的 NTSTATUS 值STATUS_SUCCESS,例如下列其中一項:
STATUS_FILE_LOCK_CONFLICT
發生檔案鎖定衝突。 篩選管理員可以傳回此錯誤。
STATUS_VOLUME_DISMOUNTED
磁碟區已卸除。
言論
磁碟區的陰影複製是該磁碟區的時間點複本。 陰影複製主要是由備份應用程式使用,因此它可能會以一致的方式備份檔,即使檔案在完成備份作業期間可能確實變更。 陰影複製也可以用來準備磁碟區,以準備因 PNP 要求和損毀傾印而產生的休眠狀態。
Windows XP 和更新版本的作系統包含用來協調陰影複製時機的架構,以及使用複製時複製技術的記憶體篩選驅動程式(而非文件系統篩選驅動程式),以建立陰影複製。 磁碟區陰影複製服務 (VSS) 會協調陰影複製。 磁碟區陰影複製驅動程式 volsnap.sys,是一種記憶體篩選驅動程式,會在文件系統下方的記憶體堆疊上載入。
影響文件系統的重要快照集相關 IOCTL IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES。 即使它是IOCTL,此IOCTL實際上仍適用於文件系統的解譯。 這是因為所有文件系統都應該將IOCTL向下傳遞至正在等候在文件系統之後處理IOCTL的較低層級驅動程式。
IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES只會傳送至本機檔系統的磁碟區裝置物件,以及可能已連結至該磁碟區的文件系統篩選驅動程式。 透過磁碟區參數區塊 (VPB) 結構的 RealDevice 連結至磁碟區的儲存裝置物件,一律會有下列其中一種裝置類型:
FILE_DEVICE_DISK
FILE_DEVICE_VIRTUAL_DISK
此 IOCTL 不會傳送至遠端檔案系統。
當本機文件系統收到IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES時,驅動程式應該會建立文件系統元數據的一致映像。 驅動程式不應該有任何頁面彼此不一致。 驅動程式必須排清其元數據和對應的快取緩衝區的任何部分,直到較低層級驅動程式完成 IOCTL 之後,才會排清磁碟並保留寫入。
若為小型篩選文件系統驅動程式,篩選管理員會收到此 IOCTL,並在驅動程式已註冊以接收此 IRP 時發出迷你篩選器驅動程式的回呼。 當小型篩選驅動程式或舊版文件系統篩選驅動程式收到此 IOCTL 時,驅動程式必須排清其元數據中任何尚未排清到磁碟的部分。 如果篩選驅動程式使用對應的快取緩衝區來寫入其元數據,則檔系統會負責所有排清。 篩選驅動程式只需要確保它不會寫入其任何對應的快取緩衝區,而檔系統嘗試將變更排清到磁碟。 舊版文件系統篩選驅動程式必須將 IRP 向下傳遞至堆疊中的下一個驅動程式。
驅動程式可以選擇先排清數據,同時按住包含IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL 的 IRP,再將其傳遞至較低層級的驅動程式。 將 IRP 傳送至下一個較低層級驅動程式之前,所有排清到磁碟的數據,都會在產生的陰影複製上取得數據。
如果這是只讀磁碟區,則接收此 IOCTL 時,文件系統或文件系統篩選驅動程式通常不需要執行任何動作,但傳送到下一個較低層級的驅動程式除外。
要求
要求 | 價值 |
---|---|
標頭 | ntifs.h (include Ntifs.h, Fltkernel.h) |