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
在 wdm.h 中針對 MajorFunction 程式代碼定義的其中一個 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(status) 等於 TRUE 的另一個狀態值,並傳回相同的值(在呼叫 IoCompleteRequest之後),如果回呼函式成功完成接收的 IRP。
- 僅 KMDF如果回呼函式偵測到錯誤,請將 IRP IoStatus.Status 成員設定為NT_SUCCESS(status) 等於 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 佇列。
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
最低 KMDF 版本 | 1.11 |
最低 UMDF 版本 | 2.17 |
標頭 | wdfdevice.h (包括 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |