共用方式為


使用 IRP 完成常式

注意

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

檔案系統篩選驅動程式會使用類似于設備磁碟機所使用的完成常式。 完成常式會在 IRP 上執行完成處理。 將 IRP 向下傳遞至下一個較低層級驅動程式的任何驅動程式常式,都可以在呼叫IoCallDriver之前呼叫IoSetCompletionRoutine,選擇性地註冊 IRP 的完成常式。

每個 IRP 完成常式的定義如下:

NTSTATUS
(*PIO_COMPLETION_ROUTINE) (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PVOID Context
    );

在任意執行緒內容中,會在 IRQL < = DISPATCH_LEVEL呼叫完成常式。

因為它們可以在 IRQL DISPATCH_LEVEL呼叫,所以完成常式無法呼叫必須在較低 IRQL 呼叫的核心模式常式,例如 IoDeleteDevice。 基於相同的理由,在完成常式中使用的任何資料結構都必須從非分頁集區配置。

本節討論下列主題:

如何執行完成處理

檢查 PendingReturned 旗標

從完成常式傳回狀態

範例:簡單Pass-Through分派和完成

完成常式的條件約束