擱置後置回呼常式中的 I/O 作業
迷你篩選驅動程式的 後置回呼常式 可以藉由執行下列步驟,將 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 ,以將作業的控制傳回至篩選管理員。