次の方法で共有


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 コールバック関数を実装する方法の詳細については、「フレームワークの外部での WDM 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

関連項目

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp