IWDFUsbTargetPipe::SetPipePolicy 方法 (wudfusb.h)

[警告: UMDF 2 是最新版本的 UMDF,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 未向 UMDF 1 添加新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅使用 UMDF 入门。]

SetPipePolicy 方法设置 WinUsb 管道策略。

语法

HRESULT SetPipePolicy(
  [in] ULONG PolicyType,
  [in] ULONG ValueLength,
  [in] PVOID Value
);

参数

[in] PolicyType

UMDF 驱动程序设置的 WinUsb 管道策略的类型。

[in] ValueLength

SetPipePolicyValue 提供的缓冲区的大小(以字节为单位)。

[in] Value

指向包含 WinUsb 管道策略的缓冲区的指针。

返回值

SetPipePolicy 返回以下值之一:

返回代码 说明
S_OK

SetPipePolicy 已成功设置 WinUsb 管道策略。

E_OUTOFMEMORY

SetPipePolicy 遇到分配失败。

Winerror.h 中定义的错误代码
此值对应于 WinUsb API 返回的错误代码。

注解

管道策略控制 USB 管道的行为 (例如超时、处理短数据包等) 。

有关 UMDF 驱动程序可为 PolicyType 和 Value 参数传递的有效策略类型和 的详细信息,请参阅 WinUsb_SetPipePolicy 函数。

有关管道策略的行为的信息,请参阅 用于管道策略修改的 WinUSB 函数

SetPipePolicy 方法生成 UMDF 请求,并将请求同步发送到 I/O 目标。

示例

下面的代码示例设置输入和输出管道的策略。

HRESULT
CMyDevice::ConfigureUsbIoTargets(
    )
{
    HRESULT                 hr;
    USB_INTERFACE_DESCRIPTOR pInterface;
    WINUSB_PIPE_INFORMATION pipe;
    BOOL                    policy;
    DWORD                   err;
    BOOL                    result;
    LONG                    i;
    LONG                    timeout;
    ULONG                   length;

    length = sizeof(UCHAR);
    hr = m_pIUsbTargetDevice->RetrieveDeviceInformation(DEVICE_SPEED, 
                                                        &length,
                                                        &m_Speed);
    if (FAILED(hr)) {
        // Print out error.
    }
    if (SUCCEEDED(hr)) {
        // Print out device speed.
    }
    //
    // Set timeout policies for input and output pipes.
    //
    if (SUCCEEDED(hr))  {
       timeout = ENDPOINT_TIMEOUT;
       hr = m_pIUsbInputPipe->SetPipePolicy(PIPE_TRANSFER_TIMEOUT,
                                            sizeof(timeout),
                                            &timeout);
       if (FAILED(hr)) {
            // Print out cannot set timeout policy for input pipe.
       }
    }
    if (SUCCEEDED(hr))  {
       timeout = ENDPOINT_TIMEOUT;
       hr = m_pIUsbOutputPipe->SetPipePolicy(PIPE_TRANSFER_TIMEOUT,
                                             sizeof(timeout),
                                             &timeout);
       if (FAILED(hr))  {
            // Print out cannot set timeout policy for output pipe.
       }
    }
 return hr;
}

要求

要求
结束支持 在 UMDF 2.0 及更高版本中不可用。
目标平台 桌面
最低 UMDF 版本 1.5
标头 wudfusb.h (包括 Wudfusb.h)
DLL WUDFx.dll

另请参阅

IWDFUsbTargetPipe

IWDFUsbTargetPipe::RetrievePipePolicy

WinUsb_SetPipePolicy