EVT_WDF_REQUEST_COMPLETION_ROUTINE コールバック関数 (wdfrequest.h)
[KMDF と UMDF に適用]
ドライバーの CompletionRoutine イベント コールバック関数は、別のドライバーが指定した I/O 要求を完了したときに実行されます。
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 |
ヘッダー | wdfrequest.h (Wdf.h を含む) |
IRQL | <=DISPATCH_LEVEL |