Configuración de Usbccgp.sys para seleccionar una configuración USB no predeterminada
En este artículo se proporciona información sobre las opciones del Registro que configuran la forma en que Usbccgp.sys selecciona una configuración USB. En el tema también se describe cómo Usbccgp.sys controla las solicitudes de configuración de selección enviadas por un controlador cliente que controla una de las funciones de un dispositivo compuesto.
Un dispositivo compuesto USB consta de varias funciones (dispositivos funcionales) dentro de un único dispositivo USB. Si Windows carga el controlador primario genérico ( Usbccgp.sys) proporcionado por Microsoft para un dispositivo compuesto, desde ese momento, Usbccgp.sys es responsable de seleccionar la configuración del dispositivo. Cada interfaz o colección de interfaces de un dispositivo compuesto es, en muchos aspectos, como un dispositivo independiente que tiene su propio objeto de dispositivo físico (PDO). Al restablecer la configuración del dispositivo, se cambia la configuración de todas las interfaces del dispositivo, no solo la que controla el controlador de cliente. El sistema operativo no permite esto. Por lo tanto, un controlador cliente que controla un conjunto de interfaces o una colección de interfaces del dispositivo compuesto no puede cambiar la configuración establecida inicialmente por Usbccgp.sys.
Sin embargo, en Windows Vista y versiones posteriores de Windows, puede agregar los siguientes valores del Registro para especificar la configuración que se va a seleccionar:
Clave del Registro | Tipo | Valor | Valor predeterminado |
---|---|---|---|
OriginalConfigurationValue | REG_DWORD | Índice de configuración USB. Usbccgp.sys usa OriginalConfigurationValue en primer lugar para una solicitud select-configuration. | 0 |
AltConfigurationValue | REG_DWORD | Índice de configuración que se va a usar si se produce un error en la solicitud select-configuration con OriginalConfigurationValue. | 0 |
Nota:
La configuración del Registro anterior no está presente de forma predeterminada. Deben agregarse bajo la clave de hardware (también conocida como "dispositivo") del dispositivo USB.
La configuración del Registro permite al controlador CCGP seleccionar una configuración alternativa.
Los valores del Registro descritos en la tabla anterior corresponden al índice de configuración definido por USB, indicado por el miembro bConfigurationValue del descriptor de configuración (USB_CONFIGURATION_DESCRIPTOR) y no por los valores bConfigurationNum notificados en el descriptor de configuración del dispositivo. En primer lugar, Usbccgp.sys envía una solicitud de configuración de selección al controlador primario de bus USB (Usbhub.sys) mediante el índice de configuración USB especificado por OriginalConfigurationValue. Si se produce un error en esa solicitud, Usbccgp.sys intenta usar el valor especificado en AlternateConfigurationValue. Usbccgp.sys usa valores predeterminados si AlternateConfigurationValue o OriginalConfigurationValue no son válidos.
Se puede producir un error en una solicitud de configuración de selección por muchas razones. El error más común se produce cuando el dispositivo no responde correctamente a la solicitud o cuando el valor bMaxPower (energía requerida por la configuración solicitada) supera el valor de energía admitido por el puerto del concentrador. Por ejemplo, bMaxPower para una configuración determinada (especificada por OriginalConfigurationValue) es de 100 miliamperios, pero el puerto del concentrador solo puede proporcionar 50 miliamperes. Cuando Usbccgp.sys envía una solicitud de configuración de selección para esa configuración, la pila del controlador USB (en concreto, el controlador de puerto USB) produce un error en la solicitud. Usbccgp.sys luego envía otra solicitud select-configuration especificando la configuración indicada por AltConfigurationValue. Si la configuración alternativa requiere 50 miliamperios o menos y no se producen otros problemas, la solicitud select-configuration se completa correctamente.
Característica de compatibilidad
Aunque un controlador de cliente para una función en el dispositivo compuesto no puede seleccionar la configuración de un dispositivo compuesto, el controlador cliente todavía puede enviar una solicitud de configuración de selección para Usbccgp.sys. Para obtener información sobre cómo crear esa solicitud, vea Cómo seleccionar una configuración para un dispositivo USB. Usbccgp.sys realiza las siguientes tareas después de recibir una solicitud de configuración de selección de un controlador cliente:
- Valida la solicitud recibida mediante los mismos criterios utilizados por el controlador de puerto USB para validar las solicitudes de configuración de selección.
- Si la solicitud especifica la configuración de interfaz o canalización diferente de la configuración actual, Usbccgp.sys emite una solicitud de interfaz de selección enviando un URB del tipo URB_FUNCTION_SELECT_INTERFACE para cambiar la configuración existente a la nueva interfaz y a la configuración de canalización.
- Copia el contenido almacenado en caché de las estructuras de USBD_INTERFACE_INFORMATION y USBD_PIPE_INFORMATION en el URB.
- Completa el URB.