共用方式為


IWDFIoRequest::Send 方法 (wudfddi.h)

[警告: UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的UMDF驅動程式都應該使用UMDF 2撰寫。 未將新功能新增至 UMDF 1,且較新版本的 #D7B78FDA759B346E78CE3922AAFA9CC53 上,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

系統時間單位 (100 奈秒間隔) 的時間量,可在架構自動取消 I/O 要求之前經過。

  • 如果值為負數,則到期時間會相對於目前的系統時間。
  • 如果值為正數,則會將到期時間指定為絕對時間, (相對於 1601 年 1 月 1 日) 。
  • 如果值為零,架構就不會逾時要求。
相對到期時間不會受到在指定逾時期間內可能發生之系統時間的任何變更所影響。 絕對到期時間反映系統時間變更。

傳回值

如果作業成功,則傳送會傳回S_OK。 否則,這個方法會傳回 Winerror.h 中定義的其中一個錯誤碼。

請注意,傳回值代表 Send 方法嘗試將 I/O 要求傳送至 I/O 目標的狀態。 傳回值不代表 I/O 要求的完成狀態。 您的驅動程序必須使用 IWDFRequestCompletionParams 介面來取得 I/O 要求的完成狀態。

備註

如果 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 的程式代碼範例會顯示呼叫 Send 並設定WDF_REQUEST_SEND_OPTION_SYNCHRONOUS旗標。

如果您的驅動程式未設定WDF_REQUEST_SEND_OPTION_SYNCHRONOUS旗標,而且 如果 Send 成功將 I/O 要求傳送至 I/O 目標, 則 Send 會傳回S_OK,而 I/O 目標仍會以異步方式處理 I/O 要求。 在此情況下,驅動程式會提供 IRequestCallbackRequestCompletion::OnCompletion 回 呼函式,讓架構在 I/O 目標完成 I/O 要求之後呼叫。 一般而言, OnCompletion 回 呼函式會呼叫 IWDFIoRequest::GetCompletionParams。 下列範例區段中的程式代碼範例會顯示呼叫 Send 而不使用 WDF_REQUEST_SEND_OPTION_SYNCHRONOUS 旗標。

如果驅動程式已為管道設定連續讀取器,則驅動程式無法呼叫 Send 將 I/O 要求傳送至 USB 管道。

範例

下列程式代碼範例會將要求轉送至裝置的 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
標頭 wudfddi.h (包含 Wudfddi.h)
Dll WUDFx.dll

另請參閱

IRequestCallbackRequestCompletion::OnCompletion

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)