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 中定义的错误代码之一。

请注意,返回值表示 Send 方法尝试将 I/O 请求发送到 I/O 目标的状态。 返回值不表示 I/O 请求的完成状态。 驱动程序必须使用 IWDFRequestCompletionParams 接口来获取 I/O 请求的完成状态。

注解

如果 Send 返回错误代码,驱动程序通常应使用 发送 返回的错误代码完成请求,如以下示例部分所示的代码。

如果驱动程序在 Flags 参数中设置WDF_REQUEST_SEND_OPTION_SYNCHRONOUS标志,如果 Send 成功将 I/O 请求发送到 I/O 目标, 则发送 会在 I/O 目标完成 I/O 请求后返回。 在这种情况下, Send 将返回S_OK,驱动程序可以立即调用 IWDFIoRequest::GetCompletionParams 以获取 IWDFRequestCompletionParams 接口。 IWDFIoRequest::GetCompletionParams 中的代码示例显示调用发送并设置了WDF_REQUEST_SEND_OPTION_SYNCHRONOUS标志。

如果驱动程序未设置WDF_REQUEST_SEND_OPTION_SYNCHRONOUS标志,如果 Send 成功将 I/O 请求发送到 I/O 目标, 则发送 返回S_OK,而 I/O 目标仍在异步处理 I/O 请求。 在这种情况下,驱动程序提供 IRequestCallbackRequestCompletion::OnCompletion 回调函数,框架在 I/O 目标完成 I/O 请求后调用该函数。 通常, OnCompletion 回调函数调用 IWDFIoRequest::GetCompletionParams。 以下示例部分中的代码示例显示调用 “发送 ”而不带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
Header wudfddi.h (包括 Wudfddi.h)
DLL WUDFx.dll

另请参阅

IRequestCallbackRequestCompletion::OnCompletion

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)