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(status) が TRUE に等しい別の状態値に設定し、同じ値を返します ( IoCompleteRequest を呼び出した後)。
- IRP の IoStatus.Status メンバーを 、NT_SUCCESS(status) が FALSE に等しい状態値に設定し、コールバック関数でエラーが検出された場合は(IoCompleteRequest を呼び出した後に) 同じ値を返します。
- コールバック関数が IoMarkIrpPending を呼び出す場合は、STATUS_PENDINGを返します。
- コールバック関数がそのメソッドを呼び出す場合、 WdfDeviceWdmDispatchPreprocessedIrp メソッドが 返す値を返します。
注釈
EvtDeviceWdmIrpPreprocess コールバック関数を登録するには、ドライバーで WdfDeviceInitAssignWdmIrpPreprocessCallback を呼び出す必要があります。
ドライバーは 、EvtDeviceWdmIrpPreprocess コールバック関数を使用して、次のいずれかまたはすべてを実行できます。
- IRP を 処理するための WDM 規則に従って、フレームワークがサポートしていない IRP を処理します。
- フレームワークが IRP を処理する前に、IRP を前処理します。
- フレームワークが IRP を処理した後にドライバーが後処理できるように、完了ルーチンを設定します。
EvtDeviceWdmIrpPreprocess コールバック関数が呼び出されていない場合と同様に、フレームワークが後で IRP を処理する場合、コールバック関数は WdfDeviceWdmDispatchPreprocessedIrp を呼び出して IRP をフレームワークに返す必要があります。
ドライバーが 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 |
Header | wdfdevice.h (Wdf.h を含む) |
IRQL | <=DISPATCH_LEVEL |