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 要求の完了」を参照してください。
完了パラメーター構造には、ドライバーが次のいずれかを呼び出して要求を書式設定した場合にのみ、有効な情報が完全に設定されます。
- WdfIoTargetFormatXxx メソッド (WdfIoTargetFormatRequestForRead など)
- WdfUsbTargetDeviceFormatRequestForXxx メソッド (WdfUsbTargetDeviceFormatRequestForString など)
- WdfUsbTargetPipeFormatRequestForXxx メソッド (WdfUsbTargetPipeFormatRequestForWrite など)
ドライバーが 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 |