次の方法で共有


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 の主要な関数コードの 1 つ。

[in] MinorFunction

MajorFunction コードの wdm.h で定義されている I/O IRP マイナー関数コードの 1 つ。

[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 と等しい別の状態値に設定し、コールバック関数が正常に受信した IRP を完了した場合は (IoCompleteRequestを呼び出した後) 同じ値を返します。
  • KMDF のみ

    IRP の IoStatus.Status メンバーを、NT_SUCCESS(status) が FALSE の状態値に設定し、コールバック関数がエラーを検出した場合は同じ値 IoCompleteRequestを返します。
  • KMDF のみ

    コールバック関数が IoMarkIrpPending 呼び出した場合にSTATUS_PENDINGを返します。

備考

EvtDeviceWdmIrpDispatch コールバック関数は、IRP の特定のキューを選択するためにのみ使用する必要があります。 これを行うには、ドライバーは、コールバック関数内から WdfDeviceWdmDispatchIrpToIoQueue メソッドを呼び出します。

このコールバック関数で IRP を調べた後、ドライバーが IRP をディスパッチする方法がわからない場合、ドライバーは、既定の処理のためにフレームワークに IRP を返 WdfDeviceWdmDispatchIrp を呼び出すことができます。

UMDF ドライバーは、WdfDeviceWdmDispatchIrp 呼び出すか、このコールバック関数から WdfDeviceWdmDispatchIrpToIoQueue する必要があります。 KMDF ドライバーには、どちらも呼び出さず、代わりに IRP を完了するか、保留中のマークを付けという追加オプションがあります。

EvtDeviceWdmIrpDispatch コールバック関数を登録するには、ドライバーが WdfDeviceConfigureWdmIrpDispatchCallback 呼び出す必要があります。

EvtDeviceWdmIrpDispatch コールバック関数では、ドライバーは完了ルーチンを設定しないでください。 完了ルーチンが必要な場合、KMDF ドライバーは、EvtDeviceWdmIrpDispatch ではなく、EvtDeviceWdmIrpPreprocess コールバック関数提供できます。

IRP の受信時のキューの指定の詳細については、「I/O キューへの IRP のディスパッチ」を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム 万国
最小 KMDF バージョン 1.11
UMDF の最小バージョン する 2.17
ヘッダー wdfdevice.h (Wdf.h を含む)
IRQL <=DISPATCH_LEVEL

関連項目

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue