共用方式為


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

另請參閱

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue