Share via


完成 IRP

注意

為了獲得最佳可靠性和效能,請使用 檔案系統迷你篩選驅動程式 搭配篩選管理員支援,而不是舊版檔案系統篩選驅動程式。 若要將舊版驅動程式移植到迷你篩選器驅動程式,請參閱 移植舊版篩選驅動程式的指導方針

每個分派常式都會在其 DeviceObject 參數中接收 IRP 目標裝置物件的指標。 如果舊版篩選驅動程式有控制裝置物件 (CDO) ,分派常式應該先檢查 DeviceObject 是否指向篩選驅動程式的 CDO,再對 IRP 執行任何處理。

檔案系統篩選驅動程式不需要支援任何特別傳送至 CDO 的 I/O 作業。 (如需常見支援作業的詳細資訊,請參閱 Filter Driver 的 Control Device Object.) 不過,CDO 必須完成傳送至該作業的每個 IRP。

若要 完成 IRP,分派常式必須執行下列步驟:

  1. Irp-IoStatus.Status > 設定為適當的 NTSTATUS 值。

  2. 呼叫 IoCompleteRequest 以將 IRP 傳回 I/O 管理員。

  3. 將與步驟 1 相同的狀態值傳回給呼叫端。

完成 IRP 有時稱為「成功」或「失敗」IRP:

  • 成功 IRP 表示以成功或參考 NTSTATUS 值來完成,例如STATUS_SUCCESS。

  • IRP 失敗 表示以錯誤或警告 NTSTATUS 值完成,例如STATUS_INVALID_DEVICE_REQUEST或STATUS_BUFFER_OVERFLOW。

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

雖然 STATUS_PENDING 是成功的 NTSTATUS 值,但使用 STATUS_PENDING 完成 IRP 的程式設計錯誤。