EVT_WDFDEVICE_WDM_IRP_DISPATCH回呼函式 (wdfdevice.h)
[適用於 KMDF 和 UMDF]
驅動程式的 EvtDeviceWdmIrpDispatch 事件回呼函式會在架構處理 IRP 之前收到 IRP。
語法
EVT_WDFDEVICE_WDM_IRP_DISPATCH EvtWdfdeviceWdmIrpDispatch;
NTSTATUS EvtWdfdeviceWdmIrpDispatch(
[in] WDFDEVICE Device,
[in] UCHAR MajorFunction,
[in] UCHAR MinorFunction,
[in] ULONG Code,
[in] WDFCONTEXT DriverContext,
[in, out] PIRP Irp,
[in] WDFCONTEXT DispatchContext
)
{...}
參數
[in] Device
架構裝置物件的句柄。
[in] MajorFunction
wdm.h 中定義的其中一個 IRP 主要函式程式碼。
[in] MinorFunction
主要Function 程式代碼在 wdm.h 中定義的其中一個 I/O IRP 次要函式程式碼。
[in] Code
指定 I/O 控制項程式代碼值。 只有當 MajorFunction 設定為 IRP_MJ_DEVICE_CONTROL時,此參數才有效。
[in] DriverContext
驅動程式定義內容資訊的不具類型指標,該驅動程式在呼叫 WdfDeviceConfigureWdmIrpDispatchCallback 時提供。
[in, out] Irp
IRP 結構的指標。
[in] DispatchContext
架構分派內容資訊的不具型別指標。 驅動程式在呼叫 WdfDeviceWdmDispatchIrp 時,必須提供此參數。
傳回值
EvtDeviceWdmIrpDispatch 回呼函式必須:
- 如果回呼函式呼叫該方法,則傳回 WdfDeviceWdmDispatchIrp 方法傳回的值。
- 如果回呼函式呼叫該方法,則傳回 WdfDeviceWdmDispatchIrpToIoQueue 方法傳回的值。
- 僅限 KMDF 將 IRP 的 IoStatus.Status 成員設定為 STATUS_SUCCESS 或另一個狀態值,NT_SUCCESS (状态) 等於 TRUE,並在呼叫 IoCompleteRequest 之後傳回相同的值 () 如果回呼函式成功完成接收的 IRP。
- 僅限 KMDF將 IRP 的 IoStatus.Status 成員設定為狀態值,NT_SUCCESS (状态) 等於 FALSE,並在呼叫 IoCompleteRequest 之後傳回相同的 (值,) 如果回呼函式偵測到錯誤。
- 僅限 KMDF如果回呼函式呼叫 IoMarkIrpPending,則傳回STATUS_PENDING。
備註
EvtDeviceWdmIrpDispatch 回呼函式應該只用來選取 IRP 的特定佇列。 若要這樣做,驅動程式會從回呼函式內呼叫 WdfDeviceWdmDispatchIrpToIoQueue 方法。
如果在檢查此回呼函式中的 IRP 之後,驅動程式不知道如何分派 IRP,則驅動程式可以呼叫 WdfDeviceWdmDispatchIrp ,將 IRP 傳回至架構以進行默認處理。
UMDF 驅動程式必須從這個回呼函式呼叫 WdfDeviceWdmDispatchIrp 或 WdfDeviceWdmDispatchIrpToIoQueue 。 KMDF 驅動程式有其他選項可呼叫兩者,並改為完成 IRP 或將其標示為擱置中。
若要註冊 EvtDeviceWdmIrpDispatch 回呼函式,您的驅動程式必須呼叫 WdfDeviceConfigureWdmIrpDispatchCallback。
在其 EvtDeviceWdmIrpDispatch 回呼函式中,驅動程式不應該設定完成例程。 如果需要完成例程,KMDF 驅動程式可以提供 EvtDeviceWdmIrpPreprocess 回呼函式,而不是 EvtDeviceWdmIrpDispatch。
如需在 IRP 抵達時指定佇列的詳細資訊,請參閱 將 IRP 分派至 I/O 佇列。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最小 KMDF 版本 | 1.11 |
最低UMDF版本 | 2.17 |
標頭 | wdfdevice.h (包含 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |