在 Postoperation 回呼常式中失敗 I/O 作業
迷你篩選驅動程式的 後置回呼常式 可能會失敗成功 I/O 作業,但只是失敗 I/O 作業並不會復原作業的效果。 迷你篩選驅動程式負責執行復原作業所需的任何處理。
例如,迷你篩選驅動程式的建立後回呼常式可能會藉由執行下列步驟,使成功IRP_MJ_CREATE作業失敗:
呼叫 FltCancelFileOpen 以關閉建立作業所建立或開啟的檔案。 請注意 ,FltCancelFileOpen 不會復原檔案的任何修改。 例如, FltCancelFileOpen 不會刪除新建立的檔案,或將截斷的檔案還原至其先前的大小。
將回呼資料結構的 [IoStatus.Status] 欄位設定為作業的最終 NTSTATUS 值。 此值必須是有效的錯誤 NTSTATUS 值,例如 STATUS_ACCESS_DENIED。
將回呼資料結構的 IoStatus.Information 欄位設定為零。
傳回FLT_POSTOP_FINISHED_PROCESSING。
將回呼資料結構的 IoStatus.Status 欄位設定為作業的最終 NTSTATUS 值時,迷你篩選驅動程式必須指定有效的錯誤 NTSTATUS 值。 請注意,迷你篩選驅動程式無法指定STATUS_FLT_DISALLOW_FAST_IO;只有篩選管理員可以使用這個 NTSTATUS 值。
FltCancelFileOpen的呼叫端必須在 IRQL < = APC_LEVEL執行。 不過,迷你篩選驅動程式可以從建立後回呼常式安全地呼叫此常式,因為對於IRP_MJ_CREATE作業,在 IRQL = PASSIVE_LEVEL呼叫後置回呼常式,是在產生建立作業的執行緒內容中呼叫。