IWDFUsbTargetDevice::RetrieveDescriptor 方法 (wudfusb.h)

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

RetrieveDescriptor 方法检索可描述设备、配置或字符串的 USB 描述符。

语法

HRESULT RetrieveDescriptor(
  [in]      UCHAR  DescriptorType,
  [in]      UCHAR  Index,
  [in]      USHORT LanguageID,
  [in, out] ULONG  *BufferLength,
  [out]     PVOID  Buffer
);

参数

[in] DescriptorType

一个 值,该值指定要返回的描述符的类型。 此参数对应于标准设备描述符的 bDescriptorType 字段,其值在 通用串行总线 规范中介绍。 (此资源在某些语言中可能不可用

和 countries.) 其中一些值在 _URB_CONTROL_DESCRIPTOR_REQUEST 结构的 DescriptorType 成员的说明中列出。

[in] Index

描述符的索引,根据 通用串行总线 规范。 (此资源在某些语言中可能不可用

和 countries.)

[in] LanguageID

如果 UMDF 驱动程序请求字符串描述符,则为语言的标识符;否则,此参数为零。

[in, out] BufferLength

指向变量的指针,该变量在输入时包含 Buffer 指向的缓冲区的大小(以字节为单位)。 如果操作成功,变量将接收框架复制到缓冲区中的字节数。

[out] Buffer

指向接收 USB 描述符的调用方提供的缓冲区的指针。 缓冲区的类型应与 DescriptorType 中指定的值匹配。

返回值

RetrieveDescriptor 返回以下值之一:

返回代码 说明
S_OK

RetrieveDescriptor 已成功检索 USB 描述符。

E_OUTOFMEMORY

RetrieveDescriptor 遇到分配失败。

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

注解

有关 UMDF 驱动程序可为 DescriptorType 参数传递的有效描述符类型的信息,请参阅 WinUsb_GetDescriptor 函数。

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

示例

下面的代码示例检索 USB 配置描述符。

HRESULT
CUmdfHidDevice::RetrieveConfigDescriptor(
    __out_bcount(ConfigDescriptorCb) PUSB_CONFIGURATION_DESCRIPTOR *ConfigDescriptor,
    __out ULONG *ConfigDescriptorCb
    )
{
    ULONG descriptorCb = sizeof(USB_CONFIGURATION_DESCRIPTOR);
    USB_CONFIGURATION_DESCRIPTOR descriptorHeader;
    PBYTE descriptorBuffer;
    HRESULT hr;

    //
    // Get the configuration descriptor at index 0
    //

    hr = m_UsbTargetDevice->RetrieveDescriptor(
                            USB_CONFIGURATION_DESCRIPTOR_TYPE,
                            0,
                            0,
                            &descriptorCb,
                            &descriptorHeader
                            );
    //
    // Store the buffer in the output parameter, or delete it.
    //
    if (SUCCEEDED(hr)) {
        *ConfigDescriptor = (PUSB_CONFIGURATION_DESCRIPTOR) (descriptorHeader);
        *ConfigDescriptorCb = descriptorCb;
    }
    else {
        delete[] descriptorHeader;
    }
    return hr;
}

要求

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

另请参阅

IWDFUsbTargetDevice

WinUsb_GetDescriptor