次の方法で共有


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

こちらもご覧ください

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp