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 |