使用 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。 基於相同的理由,在完成常式中使用的任何資料結構都必須從非分頁集區配置。
本節討論下列主題:
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應