Share via


暫止預先操作回呼常式中的 I/O 作業

迷你篩選驅動程式 的預先操作回呼常式 可以藉由將作業張貼到系統工作佇列並傳回FLT_PREOP_PENDING,來畫筆 I/O 作業。 傳回此狀態值表示迷你篩選驅動程式會保留 I/O 作業的控制,直到呼叫 FltCompletePendedPreOperation 以繼續 I/O 作業的處理為止。

迷你篩選驅動程式的預先操作回呼常式會執行下列步驟來寫入 I/O 作業:

  1. 藉由呼叫 FltQueueDeferredIoWorkItem之類的常式,將 I/O 作業張貼至系統工作佇列。

  2. 傳回FLT_PREOP_PENDING。

必須將所有 (或大部分) 傳入 I/O 作業畫筆的迷你篩選驅動程式,不應該使用 FltQueueDeferredIoWorkItem 等常式傳送至畫筆作業,因為呼叫此常式可能會導致系統工作佇列遭到溢流。 相反地,這類迷你篩選驅動程式應該使用取消安全佇列。 如需使用取消安全佇列的詳細資訊,請參閱 FltCbdqInitialize

請注意,如果下列任一條件成立, FltQueueDeferredIoWorkItem 的呼叫將會失敗:

  • 作業不是 IRP 型 I/O 作業。

  • 作業是分頁 I/O 作業。

  • 目前線程的 TopLevelIrp 欄位不是 Null。 (如需如何尋找此欄位值的詳細資訊,請參閱 IoGetTopLevelIrp.)

  • I/O 作業的目標實例正在損毀。

如果迷你篩選驅動程式的預先操作回呼常式傳回FLT_PREOP_PENDING,則必須在CompletionCoNtext輸出參數中傳回Null

迷你篩選驅動程式只能針對 IRP 型 I/O 作業傳回FLT_PREOP_PENDING。 若要判斷作業是否為 IRP 型 I/O 作業,請使用 FLT_IS_IRP_OPERATION 宏。

清除佇列和處理 I/O 作業的工作常式必須呼叫 FltCompletePendedPreOperation 以繼續作業的處理。