USBD_SelectConfigUrbAllocateAndBuild 函数 (usbdlib.h)
USBD_SelectConfigUrbAllocateAndBuild例程分配和格式化为 USB 设备选择配置所需的 URB 结构。
语法
NTSTATUS USBD_SelectConfigUrbAllocateAndBuild(
[in] USBD_HANDLE USBDHandle,
[in] PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
[in] PUSBD_INTERFACE_LIST_ENTRY InterfaceList,
[out] PURB *Urb
);
参数
[in] USBDHandle
客户端驱动程序在对 USBD_CreateHandle 例程的先前调用中检索的 USBD 句柄。
[in] ConfigurationDescriptor
指向调用方分配 的USB_CONFIGURATION_DESCRIPTOR 结构的指针,该结构包含要选择的配置的配置描述符。 通常,客户端驱动程序提交类型的 URB,URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE (查看 _URB_CONTROL_DESCRIPTOR_REQUEST) ,以从 USB 设备检索有关配置、接口、终结点、供应商和类特定描述符的信息。 当客户端驱动程序将 USB_CONFIGURATION_DESCRIPTOR_TYPE 指定为描述符类型时,请求将检索 USB_CONFIGURATION_DESCRIPTOR 结构中的所有设备信息。 然后,驱动程序将收到的指针传递到 ConfigurationDescriptor 参数中的 USB_CONFIGURATION_DESCRIPTOR 结构。
[in] InterfaceList
指向调用方分配的 USBD_INTERFACE_LIST_ENTRY 结构的数组的第一个元素的指针。 数组的长度取决于配置描述符中的接口数。 有关详细信息,请参阅“备注”。
[out] Urb
指向接收USBD_SelectConfigUrbAllocateAndBuild分配的 URB 的 URB 结构的指针。 当驱动程序通过调用 USBD_UrbFree 完成使用 URB 时,客户端驱动程序必须释放 URB。
返回值
USBD_SelectConfigUrbAllocateAndBuild例程返回 NT 状态代码。
可能的值包括但不限于下表中列出的状态代码。
返回代码 | 说明 |
---|---|
|
请求已成功。 |
|
调用方传递的参数值无效。 USBDHandle 或 Urb 为 NULL。 |
|
可用内存不足,无法完成请求。 |
注解
在调用 USBD_SelectConfigUrbAllocateAndBuild 之前,客户端驱动程序必须执行以下任务:
- 获取配置中的接口数。 此信息包含在 ConfigurationDescriptor 指向的 USB_CONFIGURATION_DESCRIPTOR 结构的 bNumInterfaces 成员中。
- 创建 USBD_INTERFACE_LIST_ENTRY 结构的数组。 数组中的元素数必须比接口数多一个。 通过调用 RtlZeroMemory 初始化数组。
- 获取配置中每个接口 (或其备用设置) 的接口描述符。 可以通过调用 USBD_ParseConfigurationDescriptorEx 来获取这些接口描述符。
- 对于除数组中最后) 元素以外的每个元素 (,请将 InterfaceDescriptor 成员设置为接口描述符的地址。 对于数组中的第一个元素,将 InterfaceDescriptor 成员设置为表示配置中第一个接口的接口描述符的地址。 同样,对于数组中的 n个元素,请将 InterfaceDescriptor 成员设置为表示配置中 第 n个接口的接口描述符的地址。
- 最后一个元素的 InterfaceDescriptor 成员必须设置为 NULL。
- 创建一个 URB,并在其中填充有关指定配置、其接口和终结点的信息,并将请求类型设置为 URB_FUNCTION_SELECT_CONFIGURATION。
- 在每个接口的 URB 中填充 USBD_INTERFACE_INFORMATION 结构。
- 将调用方提供的USBD_INTERFACE_LIST_ENTRY数组的第 n个元素的 Interface 成员设置为 URB 中相应USBD_INTERFACE_INFORMATION结构的地址。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8需要 WDK。 面向 Windows Vista 和更高版本的 Windows 操作系统。 |
目标平台 | 桌面 |
标头 | usbdlib.h |
Library | Usbdex.lib |
IRQL | DISPATCH_LEVEL |