IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL (ntifs.h)

IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES控件程式代碼會傳送至強制排清文件系統,再發生磁碟區陰影複製。 此 IOCTL 會發出為IRP_MJ_DEVICE_CONTROL要求,該要求只會傳送至本機文件系統的磁碟區裝置物件,以及可能附加至該磁碟區的文件系統篩選驅動程式。 此 IOCTL 最常由磁碟區陰影複製服務傳送,但也可以由其他使用者模式應用程式或進程發出。 在休眠要求期間或損毀傾印之前,磁碟區陰影複製驅動程式也可能會在此IOCTL傳送 (volsnap.sys) 。 此 IOCTL 會傳送至檔案系統篩選驅動程式、文件系統驅動程式和其他設備驅動器, (儲存設備篩選驅動程式和儲存設備驅動程式,例如位於文件系統下方的) 。

當 NTFS 之類的文件系統收到IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES時,文件系統應該將磁碟區排清到磁碟,強制文件系統的磁碟結構處於一致且最新的狀態。 文件系統應該鎖定文件系統處於唯讀可掛接狀態,封鎖任何新的文件系統變更,以防止任何快取的磁碟頁面變成已變更。 一旦文件系統將文件系統置於這類狀態,它就必須將 IRP 與 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL 向下傳遞至下一個驅動程式,同時繼續讓文件系統處於這類只讀可掛接狀態,直到下列驅動程式完成 IRP 為止。 當 IRP 完成或取消時,檔案系統接著會在磁碟區上重新啟用 I/O 並傳回。

主要程序代碼

IRP_MJ_DEVICE_CONTROL

輸入緩衝區

IrpSp->Parameters.DeviceIoControl.IoControlCode 設定為 IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES。

輸出緩衝區

狀態區塊

Status 成員設定為STATUS_SUCCESS成功或適當的 NTSTATUS 值,例如下列其中一項:

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只會傳送至本機檔系統的磁碟區裝置物件,以及可能附加至該磁碟區的檔案系統篩選驅動程式。 透過磁碟區參數區塊的 RealDevice 成員連結至磁碟區的記憶體裝置物件, (VPB) 結構一律會有下列其中一種裝置類型:

FILE_DEVICE_DISK

FILE_DEVICE_VIRTUAL_DISK

此 IOCTL 不會傳送至遠端檔案系統。

當本機文件系統收到IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES時,驅動程式應該會建立文件系統元數據的一致映像。 驅動程式不應該有任何頁面彼此不一致。 驅動程式必須排清其元數據的任何部分和未排清到磁碟的對應快取緩衝區,並保留寫入,直到較低層級驅動程式完成IOCTL為止。

對於迷你篩選檔系統驅動程式,篩選管理員會收到此 IOCTL,並在驅動程式已註冊接收此 IRP 時發出迷你篩選驅動程式的回呼。 當迷你篩選驅動程式或舊版文件系統篩選驅動程式收到此 IOCTL 時,驅動程式必須排清其元數據中任何尚未排清到磁碟的部分。 如果篩選驅動程式使用對應的快取緩衝區來寫入其元數據,則檔系統會處理所有排清。 篩選驅動程式只需要確保它不會寫入其任何對應的快取緩衝區,而檔系統嘗試清除磁碟的變更。 舊版文件系統篩選驅動程式必須將 IRP 向下傳遞至堆疊中的下一個驅動程式。

驅動程式可以選擇排清數據,同時保留包含IOCTL IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL的IRP,再將其傳遞至較低層級的驅動程式。 在將 IRP 傳送至下一個較低層級驅動程式之前,任何在保留此 IOCTL 時排清到磁碟的數據,都將是產生的陰影複製上可用的數據。

如果這是只讀磁碟區,則文件系統或文件系統篩選驅動程式在接收此 IOCTL 時,通常不需要執行任何動作,但將它傳送到下一個較低層級的驅動程式。

規格需求

需求
標頭 ntifs.h (包含 Ntifs.h、Fltkernel.h)

另請參閱

IRP_MJ_DEVICE_CONTROL