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
系統時間單位(100 奈秒間隔)的時間量,可在架構自動取消 I/O 要求之前經過。
- 如果值為負數,到期時間會相對於目前的系統時間。
- 如果值為正數,則會將到期時間指定為絕對時間(相對於 1601 年 1 月 1 日)。
- 如果值為零,架構就不會逾時要求。
傳回值
如果作業成功,傳送 會傳回S_OK。 否則,此方法會傳回 Winerror.h 中定義的其中一個錯誤碼。
請注意,傳回值代表 傳送 方法嘗試將 I/O 要求傳送至 I/O 目標的狀態。 傳回值不代表 I/O 要求的完成狀態。 您的驅動程序必須使用 IWDFRequestCompletionParams 介面來取得 I/O 要求的完成狀態。
言論
如果 傳送 傳回錯誤碼,驅動程式通常會以傳回 傳送 的錯誤碼來完成要求,如下列範例區段中的程式代碼所示。
如果您的驅動程式在 Flags 參數中設定WDF_REQUEST_SEND_OPTION_SYNCHRONOUS旗標,而且如果 傳送 成功將 I/O 要求傳送至 I/O 目標,I/O 目標完成 I/O 要求之後傳回。 在此情況下,Send 會傳回 S_OK,而驅動程式可以立即呼叫 IWDFIoRequest::GetCompletionParams,以取得 IWDFRequestCompletionParams 介面。 IWDFIoRequest::GetCompletionParams 的程式碼範例會顯示呼叫已設定WDF_REQUEST_SEND_OPTION_SYNCHRONOUS旗標的 Send。
如果您的驅動程式未設定WDF_REQUEST_SEND_OPTION_SYNCHRONOUS旗標,而且如果 傳送 成功將 I/O 要求傳送至 I/O 目標,傳送 會在 I/O 目標仍在異步處理 I/O 要求時傳回S_OK。 在此情況下,驅動程式會提供 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