完成 IRP
注意
為了獲得最佳可靠性和效能,請使用 檔案系統迷你篩選驅動程式 搭配篩選管理員支援,而不是舊版檔案系統篩選驅動程式。 若要將舊版驅動程式移植到迷你篩選器驅動程式,請參閱 移植舊版篩選驅動程式的指導方針。
每個分派常式都會在其 DeviceObject 參數中接收 IRP 目標裝置物件的指標。 如果舊版篩選驅動程式有控制裝置物件 (CDO) ,分派常式應該先檢查 DeviceObject 是否指向篩選驅動程式的 CDO,再對 IRP 執行任何處理。
檔案系統篩選驅動程式不需要支援任何特別傳送至 CDO 的 I/O 作業。 (如需常見支援作業的詳細資訊,請參閱 Filter Driver 的 Control Device Object.) 不過,CDO 必須完成傳送至該作業的每個 IRP。
若要 完成 IRP,分派常式必須執行下列步驟:
將 Irp-IoStatus.Status > 設定為適當的 NTSTATUS 值。
呼叫 IoCompleteRequest 以將 IRP 傳回 I/O 管理員。
將與步驟 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 的程式設計錯誤。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應