次の方法で共有


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 をディスパッチする方法がわからない場合、ドライバーは WdfDeviceWdmDispatchIrp を呼び出して、既定の処理のために IRP をフレームワークに返すことができます。

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

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

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

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

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.11
最小 UMDF バージョン 2.17
Header wdfdevice.h (Wdf.h を含む)
IRQL <=DISPATCH_LEVEL

こちらもご覧ください

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue