共用方式為


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 驅動程式必須從這個回呼函式呼叫 WdfDeviceWdmDispatchIrpWdfDeviceWdmDispatchIrpToIoQueue 。 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

另請參閱

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue