次の方法で共有


EVT_WDF_REQUEST_COMPLETION_ROUTINE コールバック関数 (wdfrequest.h)

[KMDF と UMDF に適用]

別のドライバーが指定した I/O 要求を完了すると、ドライバーの CompletionRoutine イベント コールバック関数が実行されます。

構文

EVT_WDF_REQUEST_COMPLETION_ROUTINE EvtWdfRequestCompletionRoutine;

void EvtWdfRequestCompletionRoutine(
  [in] WDFREQUEST Request,
  [in] WDFIOTARGET Target,
  [in] PWDF_REQUEST_COMPLETION_PARAMS Params,
  [in] WDFCONTEXT Context
)
{...}

パラメーター

[in] Request

完了した I/O 要求を表すフレームワーク要求オブジェクトへのハンドル。

[in] Target

要求を完了した I/O ターゲットを表す I/O ターゲット オブジェクトへのハンドル。

[in] Params

完了した要求に関する情報を含む WDF_REQUEST_COMPLETION_PARAMS 構造体へのポインター。 入力候補パラメーターの有効性については、以下の注を参照してください。

[in] Context

ドライバー指定のコンテキスト情報。 ドライバーは、WdfRequestSetCompletionRoutine の以前の呼び出しで指定しました。

戻り値

なし

解説

I/O 要求の CompletionRoutine コールバック関数を登録するには、ドライバーが WdfRequestSetCompletionRoutine を呼び出す必要があります。 このコールバック関数の詳細については、「 I/O 要求の完了」を参照してください。

完了パラメーター構造には、ドライバーが次のいずれかを呼び出して要求を書式設定した場合にのみ、有効な情報が完全に設定されます。

ドライバーが WdfRequestFormatRequestUsingCurrentType または WdfRequestWdmFormatUsingStackLocation を使用して要求を書式設定した場合、完了パラメーター構造の IoStatus フィールドのみが有効です。

KMDF ドライバーの CompletionRoutine は、I/O 要求オブジェクトのWDF_OBJECT_ATTRIBUTES構造体で指定された ExecutionLevel に関係なく、IRQL <= DISPATCH_LEVELで実行できます。

関数型は、次のように Wdfrequest.h で宣言されています。

typedef VOID
  (EVT_WDF_REQUEST_COMPLETION_ROUTINE)(
    IN WDFREQUEST  Request,
    IN WDFIOTARGET  Target,
    IN PWDF_REQUEST_COMPLETION_PARAMS  Params,
    IN WDFCONTEXT  Context
    );

MyCompletionRoutine という名前の CompletionRoutine コールバック関数を定義するには、まず、次のように SDV やその他の検証ツールで必要な関数宣言を指定する必要があります。

EVT_WDF_REQUEST_COMPLETION_ROUTINE  MyCompletionRoutine;

次に、コールバック関数を次のように実装します。

VOID
 MyCompletionRoutine (
    IN WDFREQUEST  Request,
    IN WDFIOTARGET  Target,
    IN PWDF_REQUEST_COMPLETION_PARAMS  Params,
    IN WDFCONTEXT  Context
    )
  {...}

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfrequest.h (Wdf.h を含む)
IRQL <=DISPATCH_LEVEL

こちらもご覧ください

WDF_REQUEST_COMPLETION_PARAMS

WdfRequestSetCompletionRoutine