IWDFIoRequest::Send メソッド (wudfddi.h)
[警告: UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、新しいバージョンのWindows 10では UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは UMDF 2 を使用する必要があります。 詳細については、「UMDF を使用したはじめに」を参照してください。
Send メソッドは、指定した I/O ターゲットに要求を送信します。
構文
HRESULT Send(
[in] IWDFIoTarget *pIoTarget,
[in] ULONG Flags,
[in] LONGLONG Timeout
);
パラメーター
[in] pIoTarget
I/O ターゲット オブジェクトの IWDFIoTarget インターフェイスへのポインター。これは通常、スタック内の下位のドライバーを表します。
[in] Flags
WDF_REQUEST_SEND_OPTIONS_FLAGS型指定フラグの有効なビットごとの OR。
[in] Timeout
フレームワークが I/O 要求を自動的に取り消す前に経過できる時間 (システム時間単位 (100 ナノ秒間隔)。
- 値が負の場合、有効期限は現在のシステム時刻に対して相対的になります。
- 値が正の場合、有効期限は絶対時刻として指定されます (1601 年 1 月 1 日を基準とします)。
- 値が 0 の場合、フレームワークは要求をタイムアウトしません。
戻り値
Send は、操作が成功した場合にS_OKを返します。 それ以外の場合、このメソッドは Winerror.h で定義されているエラー コードのいずれかを返します。
戻り値は、I/O 要求を I/O ターゲットに送信しようとする Send メソッドの試行の状態を表します。 戻り値は、I/O 要求の完了状態を表していません。 ドライバーは 、IWDFRequestCompletionParams インターフェイスを使用して、I/O 要求の完了状態を取得する必要があります。
注釈
Send がエラー コードを返す場合、ドライバーは通常、次の例のセクションのコードに示すように、Send が返したエラー コードで要求を完了する必要があります。
ドライバーが Flags パラメーターでWDF_REQUEST_SEND_OPTION_SYNCHRONOUS フラグを設定し、 Send が I/O 要求を I/O ターゲットに正常に送信した場合、 Send は I/O ターゲットが I/O 要求を完了した後に を返します。 この場合、 Send は S_OKを返し、ドライバーは IWDFIoRequest::GetCompletionParams をすぐに呼び出して IWDFRequestCompletionParams インターフェイスを 取得できます。 IWDFIoRequest::GetCompletionParams のコード例は、WDF_REQUEST_SEND_OPTION_SYNCHRONOUS フラグが設定された Send の呼び出しを示しています。
ドライバーが WDF_REQUEST_SEND_OPTION_SYNCHRONOUS フラグを設定せず、 Send が I/O 要求を I/O ターゲットに正常に送信した場合、 Send は I/O ターゲットが I/O 要求を非同期的に処理している間にS_OKを返します。 この場合、ドライバーは I/O ターゲットが I/O 要求を完了した後にフレームワークが呼び出す IRequestCallbackRequestCompletion::OnCompletion コールバック関数を提供します。 通常、 OnCompletion コールバック関数は IWDFIoRequest::GetCompletionParams を呼び出します。 次の例セクションのコード例は、WDF_REQUEST_SEND_OPTION_SYNCHRONOUS フラグを指定せずに Send を呼び出す方法を示しています。
ドライバーがパイプの連続リーダーを構成している場合、ドライバーは Send を呼び出して USB パイプに I/O 要求を送信できません。
例
次のコード例では、デバイスの I/O ターゲットに要求を転送します。
IWDFIoRequest* FxRequest;
//
// Set the completion callback.
// When the lower request is completed, the driver is
// notified through the completion callback.
//
IRequestCallbackRequestCompletion *completionCallback =
QueryIRequestCallbackRequestCompletion();
FxRequest->SetCompletionCallback(
completionCallback,
NULL //pContext
);
completionCallback->Release();
//
// Format the I/O request.
FxRequest->FormatUsingCurrentType( );
//
// Send down the request.
//
HRESULT hrSend = S_OK;
hrSend = FxRequest->Send(
m_FxIoTarget,
0, // Asynchronous
0 // No time-out
);
if (S_OK != hrSend) {
//
// If the send failed, the driver must complete the
// request with the failure.
FxRequest->CompleteWithInformation(hrSend, 0);
}
要件
要件 | 値 |
---|---|
サポート終了 | UMDF 2.0 以降では使用できません。 |
対象プラットフォーム | デスクトップ |
最小 UMDF バージョン | 1.5 |
Header | wudfddi.h (Wudfddi.h を含む) |
[DLL] | WUDFx.dll |
こちらもご覧ください
IRequestCallbackRequestCompletion::OnCompletion