迷你篩選驅動程式 的後操作回呼例程 可以執行下列步驟來延後 I/O 作業:
呼叫FltAllocateDeferredIoWorkItem以分配 I/O 操作的工作項目。
呼叫 FltQueueDeferredIoWorkItem ,將 I/O 作業張貼至系統工作佇列。
傳回"FLT_POSTOP_MORE_PROCESSING_REQUIRED"。
請注意,如果下列任一條件成立, 對 FltQueueDeferredIoWorkItem 的呼叫將會失敗:
作業不是 IRP 型 I/O 作業。
此操作為分頁 I/O 操作。
目前線程的 TopLevelIrp 字段不是 NULL。 (如需如何尋找此字段值的詳細資訊,請參閱 IoGetTopLevelIrp。)
I/O 作業的目標實例正在被拆毀。 (篩選管理員會將 Flags 輸入參數中的 FLTFL_POST_OPERATION_DRAINING 旗標設為後續回呼例程的設定,以指出這種情況。)
迷你篩選驅動程式必須準備好處理此失敗。 如果您的迷你篩選驅動程式無法處理這類失敗,您應該考慮使用傳 回FLT_PREOP_SYNCHRONIZE 中所述的技術,而不是擱置 I/O 作業。
在迷你篩選驅動程式的後置回呼例程返回 FLT_POSTOP_MORE_PROCESSING_REQUIRED 之后,篩選管理員將不會對該 I/O 作業進行進一步的完成處理,直到迷你篩選驅動程式的工作例程呼叫 FltCompletePendedPostOperation ,將作業控制權交回篩選管理員。 即使工作例程在作業之回呼數據結構的 IoStatus.Status 欄位中設定失敗 NTSTATUS 值,篩選管理員也不會在此情況中執行任何進一步處理。
出佇列並執行 I/O 作業完成處理的工作例程必須呼叫 FltCompletePendedPostOperation,以將操作的控制權交還給篩選管理員。