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