EVT_WDFDEVICE_WDM_IRP_PREPROCESS コールバック関数 (wdfdevice.h)
[KMDF にのみ適用]
ドライバーの EvtDeviceWdmIrpPreprocess イベント コールバック関数は、フレームワークが IRP を処理する前に IRP を受け取ります。
構文
EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;
NTSTATUS EvtWdfdeviceWdmIrpPreprocess(
[in] WDFDEVICE Device,
[in, out] PIRP Irp
)
{...}
パラメーター
[in] Device
フレームワーク デバイス オブジェクトへのハンドル。
[in, out] Irp
IRP 構造体へのポインター。
戻り値
EvtDeviceWdmIrpPreprocess コールバック関数は、次の必要があります。
- コールバック関数が正常に受信した IRP を完了した場合、IRP の IoStatus.Status メンバーをSTATUS_SUCCESSまたは別の状態値に設定し、NT_SUCCESS(状態) が TRUE 等しく、同じ値 IoCompleteRequestを返します。
- コールバック関数がエラーを検出した場合、IRP の IoStatus.Status メンバーを、NT_SUCCESS(状態) が FALSE 等しい状態値に設定し、同じ値を返します (IoCompleteRequest を呼び出した後)。
- コールバック関数が IoMarkIrpPending 呼び出す場合は、STATUS_PENDINGを返します。
- コールバック関数がそのメソッドを呼び出した場合、WdfDeviceWdmDispatchPreprocessedIrp メソッドが返す値を返します。
備考
EvtDeviceWdmIrpPreprocess コールバック関数 登録するには、ドライバーが WdfDeviceInitAssignWdmIrpPreprocessCallback 呼び出す必要があります。
ドライバーは、EvtDeviceWdmIrpPreprocess コールバック関数を使用して、次のいずれかまたはすべてを実行できます。
- IRP を処理するためのWDM 規則に従って、フレームワークがサポートしていない IRP を処理します。
- フレームワークが IRP を処理する前に、IRP を前処理します。
- フレームワークが IRP を処理した後にドライバーが IRP を後処理できるように、完了ルーチンを設定します。
EvtDeviceWdmIrpPreprocess コールバック関数が呼び出されていない場合と同様に、フレームワークで IRP を処理する場合は、フレームワークに IRP を返すために、コールバック関数 WdfDeviceWdmDispatchPreprocessedIrp を呼び出す必要があります。
ドライバーが EvtDeviceWdmIrpPreprocess コールバック関数を登録する場合、フレームワークは、コールバック関数が受け取る IRP に 追加 I/O スタックの場所を追加します。 追加の I/O スタックの場所により、コールバック関数は、WdfDeviceWdmDispatchPreprocessedIrp 呼び出す前に、IoCompletion ルーチンを設定できます。
EvtDeviceWdmIrpPreprocess コールバック関数は、呼び出し元スレッドの IRQL で呼び出されます。 IRQL は、フレームワークが EvtDeviceWdmIrpPreprocess 渡す IRP の種類によって決まります。 たとえば、PnP マネージャーが IRQL = PASSIVE_LEVEL で IRP_MN_QUERY_DEVICE_RELATIONS を送信する場合、フレームワークは IRQL = PASSIVE_LEVEL で EvtDeviceWdmIrpPreprocess 呼び出します。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
最小 KMDF バージョン | 1.0 |
ヘッダー | wdfdevice.h (Wdf.h を含む) |
IRQL | <=DISPATCH_LEVEL |