Share via


在預先操作回呼常式中完成 I/O 作業

若要 完成 I/O 作業,表示要停止處理作業,請指派最後的 NTSTATUS 值,並將其傳回至篩選管理員。

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

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

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

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

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

  1. 將回呼資料結構的 [IoStatus.Status] 欄位設定為作業的最終 NTSTATUS 值。

  2. 傳回FLT_PREOP_COMPLETE。

完成 I/O 作業的預先操作回呼常式無法在 CompletionCoNtext 輸出參數) 中設定非 Null 完成內容 (。

迷你篩選驅動程式也可以藉由執行下列步驟,在先前所畫筆 I/O 作業的工作常式中完成作業:

  1. 將回呼資料結構的 [IoStatus.Status] 欄位設定為作業的最終 NTSTATUS 值。

  2. 當工作常式呼叫FltCompletePendedPreOperation時,在CallbackStatus參數中傳遞FLT_PREOP_COMPLETE。

完成 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 值