共用方式為


在預先作回呼例程中完成 I/O 作業

若要 完成 I/O 操作,表示停止操作處理,將最終的 NTSTATUS 值指派給它,然後將其返回給篩選管理員。

當迷你篩選驅動程式完成 I/O 作業時,篩選管理員會執行下列動作:

  • 不會將作業傳送至目前小型篩選驅動程式下方的小型篩選驅動程式、舊版篩選器或檔案系統。

  • 在迷你篩選驅動程序實例堆疊中,呼叫位於目前小型篩選驅動程式上方的小型篩選驅動程式的 後置回呼例程

  • 如果存在,則不會呼叫目前迷你篩選驅動程式的作後回呼例程。

小型篩選驅動程式的 前置回呼例程, 執行下列步驟來完成 I/O 作業:

  1. 將回呼數據結構 IoStatus.Status 欄位設定為作業的最終 NTSTATUS 值。

  2. 傳回FLT_PREOP_COMPLETE。

完成 I/O 作業的預操作回呼例程無法設定非 NULL 完成內容(在 CompletionContext 輸出參數中)。

小型篩選驅動程式也可以藉由執行下列步驟,在先前被擱置的 I/O 作業的工作例行程序中完成作業。

  1. 將回呼數據結構 IoStatus.Status 欄位設定為作業的最終 NTSTATUS 值。

  2. 當工作例程呼叫 FltCompletePendedPreOperation時,將 FLT_PREOP_COMPLETE 傳遞到 CallbackStatus 參數中。

完成 I/O 作業時,小型篩選驅動程式必須將回呼數據結構的 IoStatus.Status 字段設定為作業的最終 NTSTATUS 值,但該 NTSTATUS 值不能是 STATUS_PENDING 或 STATUS_FLT_DISALLOW_FAST_IO。 若要清理或關閉作業,欄位必須是 STATUS_SUCCESS。 這些作業無法使用任何其他 NTSTATUS 值來完成。

根據NTSTATUS值,完成I/O作業通常稱為成功或失敗的作業:

  • 若要 成功 I/O 作業表示以成功或參考 NTSTATUS 值來完成它,例如STATUS_SUCCESS。

  • 發生 I/O 作業失敗,這表示該作業以錯誤或警告 NTSTATUS 值完成,例如 STATUS_INVALID_DEVICE_REQUEST 或 STATUS_BUFFER_OVERFLOW。

NTSTATUS 值是在ntstatus.h 中定義。 這些值分為四個類別:成功、資訊、警告和錯誤。 如需這些值的詳細資訊,請參閱 使用 NTSTATUS 值