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 |