配置 Usbccgp.sys 以选择非默认 USB 配置

本文提供有关注册表设置的信息,这些设置配置 Usbccgp.sys 选择 USB 配置的方式。 本主题还介绍了 Usbccgp.sys 如何处理由控制复合设备功能之一的客户端驱动程序发送的选择配置请求。

USB 复合设备由多个功能 (功能设备组成,) 单个 USB 设备。 如果 Windows 为复合设备加载 Microsoft 提供的 USB 通用父驱动程序 (Usbccgp.sys) ,则从该点开始,Usbccgp.sys 负责选择设备的配置。 在很多方面,复合设备的每个接口或接口集合都类似于具有其自己的物理设备对象的单独设备 (PDO) 。 重置设备的配置会更改设备的所有接口的配置,而不仅仅是客户端驱动程序控制的接口。 操作系统不允许这样做。 因此,控制一组接口或复合设备的接口集合的客户端驱动程序无法更改最初由 Usbccgp.sys 设置的配置。

但是,在 Windows Vista 和更高版本的 Windows 中,可以添加以下注册表值来指定要选择的配置:

注册表项 类型 默认值
OriginalConfigurationValue REG_DWORD USB 配置索引。 Usbccgp.sys 首先对选择配置请求使用 OriginalConfigurationValue。 0
AltConfigurationValue REG_DWORD 使用 OriginalConfigurationValue 的 select-configuration 请求失败时要使用的配置索引。 0

注意

默认情况下,上述注册表设置不存在。 必须在 硬件 (又名“设备”) USB 设备的密钥下添加它们。

注册表设置允许 CCGP 驱动程序选择备用配置。

上表中所述的注册表值对应于 USB 定义的配置索引,由配置描述符的 bConfigurationValue 成员 (USB_CONFIGURATION_DESCRIPTOR) 指示, 而不是 由设备配置描述符中报告的 bConfigurationNum 值指示。 首先,Usbccgp.sys 使用 OriginalConfigurationValue 指定的 USB 配置索引将选择配置请求发送到父 USB 总线驱动程序 (Usbhub.sys) 。 如果该请求失败,Usbccgp.sys 尝试使用 AlternateConfigurationValue 中指定的值。 如果 AlternateConfigurationValue 或 OriginalConfigurationValue 无效,Usbccgp.sys 使用默认值。

选择配置请求可能由于多种原因而失败。 当设备未正确响应请求或 bMaxPower 值 (所请求的配置所需的电源) 超过中心端口支持的电源值时,会发生最常见的故障。 例如,由 OriginalConfigurationValue) 指定的特定配置 (bMaxPower 为 100 毫安,但中心端口只能提供 50 毫安。 当 Usbccgp.sys 发送该配置的选择配置请求时,USB 驱动程序堆栈 (,USB 端口驱动程序) 失败请求。 Usbccgp.sys 然后通过指定 AltConfigurationValue 指示的配置发送另一个选择配置请求。 如果备用配置需要 50 毫安或更少,并且没有发生其他问题,则选择配置请求将成功完成。

兼容性功能

即使复合设备中某个函数的客户端驱动程序无法选择复合设备的配置,客户端驱动程序仍然可以向 Usbccgp.sys 发送选择配置请求。 有关如何生成该请求的信息,请参阅 如何为 USB 设备选择配置。 Usbccgp.sys 从客户端驱动程序收到选择配置请求后执行以下任务:

  1. 使用 USB 端口驱动程序用于验证任何选择配置请求的相同条件来验证收到的请求。
  2. 如果请求指定与当前设置不同的接口或管道设置,Usbccgp.sys 发送类型为URB_FUNCTION_SELECT_INTERFACE的 URB,以将现有设置更改为新接口和管道设置,从而发出选择接口请求。
  3. USBD_INTERFACE_INFORMATIONUSBD_PIPE_INFORMATION 结构的缓存内容复制到 URB 中。
  4. 完成 URB。