USBD_SelectInterfaceUrbAllocateAndBuild函数 (usbdlib.h)

USBD_SelectInterfaceUrbAllocateAndBuild 例程分配并设置请求选择接口或更改其备用设置所需的 URB 结构。

语法

NTSTATUS USBD_SelectInterfaceUrbAllocateAndBuild(
  [in]  USBD_HANDLE                USBDHandle,
  [in]  USBD_CONFIGURATION_HANDLE  ConfigurationHandle,
        PUSBD_INTERFACE_LIST_ENTRY InterfaceListEntry,
  [out] PURB                       *Urb
);

参数

[in] USBDHandle

客户端驱动程序在对 USBD_CreateHandle 例程的上一次调用中检索的 USBD 句柄。

[in] ConfigurationHandle

驱动程序堆栈完成选择配置请求后,UrbSelectConfiguration.ConfigurationHandleURB 结构成员中 USB 驱动程序堆栈返回的句柄。

InterfaceListEntry

指向调用方分配 USBD_INTERFACE_LIST_ENTRY 结构的指针。 有关详细信息,请参阅“备注”。

[out] Urb

指向接收由 USBD_SelectInterfaceUrbAllocateAndBuild分配的 URB 的 URB 结构的指针。 当驱动程序通过调用 USBD_UrbFree完成使用它时,客户端驱动程序必须释放 URB。

返回值

例程返回 NTSTATUS 代码。 可能的值包括但不限于下表中列出的状态代码。

返回代码 描述
STATUS_SUCCESS
例程调用成功。
STATUS_INVALID_PARAMETER
调用方在任何参数中传递 NULL。
STATUS_INSUFFICIENT_RESOURCES
内存不足,无法完成调用。

言论

在设备中选择配置后,客户端驱动程序必须调用 USBD_SelectInterfaceUrbAllocateAndBuild 例程。 选择配置请求完成后,客户端驱动程序会在 urb 的 UrbSelectConfiguration.ConfigurationHandle 成员中收到配置句柄。 必须在 USBD_SelectInterfaceUrbAllocateAndBuildConfigurationHandle 参数中指定该句柄。

客户端驱动程序调用 USBD_SelectInterfaceUrbAllocateAndBuild 来分配和生成用于选择接口请求的 URB,以更改所选配置中的接口的备用设置。 在调用 USBD_SelectInterfaceUrbAllocateAndBuild时,客户端驱动程序必须分配并提供指向 USBD_INTERFACE_LIST_ENTRY 结构的指针。 客户端驱动程序必须设置结构成员,如下所示:

  • InterfaceDescriptor 成员必须指向包含具有要选择的备用设置的接口描述符的 USB_INTERFACE_DESCRIPTOR 结构。 接口描述符是在上一个请求中获取的,用于获取配置描述符和关联的接口和终结点描述符。
  • 接口 成员必须为 NULL。
USBD_SelectInterfaceUrbAllocateAndBuild 分配 URB 结构,并填充有关指定接口设置和终结点的信息。 该例程还分配 USBD_INTERFACE_INFORMATION 结构。 结构成员(管道信息除外)基于指定的接口描述符进行填充。 USBD_SelectInterfaceUrbAllocateAndBuildUSBD_INTERFACE_LIST_ENTRY接口 成员设置为 URB 中 USBD_INTERFACE_INFORMATION 的地址。 客户端驱动程序可以将此 URB 发送到 USB 驱动程序堆栈,以选择接口中的备用设置。

客户端驱动程序无法在单个选择接口请求中更改多个接口中的备用设置。 每个请求仅面向一个接口。

选择接口请求完成后,USB 驱动程序堆栈将填充 USBD_INTERFACE_INFORMATION,其中包含为所选备用设置中定义的终结点打开管道的信息。 客户端驱动程序可以通过检查 管道 成员 USBD_INTERFACE_INFORMATION的数组来获取这些管道句柄,并存储句柄以供将来的数据传输请求。

客户端驱动程序可以重复使用 USBD_SelectInterfaceUrbAllocateAndBuild 为同一备用设置的另一个选择接口请求 分配的 URB。 客户端驱动程序 不得 对任何其他类型的请求重复使用 URB,也不能对其他备用设置使用另一个选择接口请求。 在某些情况下,重用现有 URB 而不是分配新的 URB 是首选方法。 请考虑具有两个备用设置的接口的 USB 音频设备,该接口针对两个带宽要求定义。 为零带宽定义设置 0;将设置 1 定义为使用一定数量的带宽。 客户端驱动程序希望根据设备是否正在使用,在两个设置之间频繁切换。 若要实现此方案,客户端驱动程序可以为选择接口请求分配两个 URB,每个设置一个。 当有声音发送到设备时,客户端驱动程序可以使用(并重复使用)用于选择接口请求的 URB,以选择“设置 1”。 若要在没有任何声音时节省带宽,客户端驱动程序可以使用其他 URB 切换到“设置 0”(并重复使用)。 此实现可防止客户端驱动程序为每个选择接口请求分配 URI,每次驱动程序需要更改设置时。

要求

要求 价值
最低支持的客户端 需要适用于 Windows 8 的 WDK。 面向 Windows Vista 和更高版本的 Windows作系统。
目标平台 桌面
标头 usbdlib.h
Usbdex.lib
IRQL DISPATCH_LEVEL

另请参阅

USBD_CreateHandle

USBD_SelectConfigUrbAllocateAndBuild