次の方法で共有


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

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)