Configurando Usbccgp.sys para selecionar uma configuração USB não padrão
Este artigo fornece informações sobre as configurações do Registro que configuram a maneira como Usbccgp.sys seleciona uma configuração USB. O tópico também descreve como Usbccgp.sys lida com solicitações de configuração de seleção enviadas por um driver cliente que controla uma das funções de um dispositivo composto.
Um dispositivo composto USB consiste em várias funções (dispositivos funcionais) em um único dispositivo USB. Se o Windows carregar o Driver Pai Genérico USB fornecido pela Microsoft (Usbccgp.sys) para um dispositivo composto, desse ponto em diante, Usbccgp.sys será responsável por selecionar a configuração do dispositivo. Cada interface ou coleção de interface de um dispositivo composto é, em muitos aspectos, como um dispositivo separado que tem seu próprio objeto de dispositivo físico (PDO). Redefinir a configuração do dispositivo altera a configuração de todas as interfaces do dispositivo, não apenas aquela que o driver do cliente controla. O sistema operacional não permite isso. Portanto, um driver de cliente que controla um conjunto de interfaces ou uma coleção de interfaces do dispositivo composto não pode alterar a configuração definida inicialmente por Usbccgp.sys.
No entanto, no Windows Vista e em versões posteriores do Windows, você pode adicionar os seguintes valores de registro para especificar a configuração a ser selecionada:
Chave do Registro | Tipo | Valor | Valor padrão |
---|---|---|---|
OriginalConfigurationValue | REG_DWORD | Índice de configuração USB. Usbccgp.sys usa OriginalConfigurationValue primeiro para uma solicitação select-configuration. | 0 |
AltConfigurationValue | REG_DWORD | O índice de configuração a ser usado se a solicitação select-configuration com OriginalConfigurationValue falhar. | 0 |
Observação
As configurações anteriores do Registro não estão presentes, por padrão. Eles devem ser adicionados sob a chave de hardware (também conhecido como "dispositivo") do dispositivo USB.
A configuração do Registro permite que o driver CCGP selecione uma configuração alternativa.
Os valores do Registro descritos na tabela anterior correspondem ao índice de configuração definido por USB, indicado pelo membro bConfigurationValue do descritor de configuração (USB_CONFIGURATION_DESCRIPTOR) e não pelos valores bConfigurationNum relatados no descritor de configuração do dispositivo. Primeiro, Usbccgp.sys envia uma solicitação de configuração de seleção para o driver de barramento USB pai (Usbhub.sys) usando o índice de configuração USB especificado por OriginalConfigurationValue. Se essa solicitação falhar, Usbccgp.sys tentará usar o valor especificado em AlternateConfigurationValue. Usbccgp.sys usará valores padrão se AlternateConfigurationValue ou OriginalConfigurationValue forem inválidos.
Uma solicitação de configuração de seleção pode falhar por muitos motivos. A falha mais comum ocorre quando o dispositivo não responde corretamente à solicitação ou quando o valor bMaxPower (energia exigida pela configuração solicitada) excede o valor de energia suportado pela porta do hub. Por exemplo, bMaxPower para uma configuração específica (especificada por OriginalConfigurationValue) é de 100 mililitros, mas a porta do hub só pode fornecer 50 mililitros. Quando Usbccgp.sys envia uma solicitação de configuração de seleção para essa configuração, a pilha de driver USB (especificamente, o driver de porta USB) falha na solicitação. Usbccgp.sys envia outra solicitação de configuração de seleção especificando a configuração indicada por AltConfigurationValue. Se a configuração alternativa exigir 50 mililitros ou menos e nenhum outro problema ocorrer, a solicitação select-configuration será concluída com êxito.
Recurso de compatibilidade
Embora um driver de cliente para uma função no dispositivo composto não seja capaz de selecionar a configuração de um dispositivo composto, o driver cliente ainda pode enviar uma solicitação de configuração de seleção para Usbccgp.sys. Para obter informações sobre como criar essa solicitação, consulte Como selecionar uma configuração para um dispositivo USB. Usbccgp.sys executa as seguintes tarefas depois de receber uma solicitação select-configuration de um driver de cliente:
- Valida a solicitação recebida usando os mesmos critérios usados pelo driver de porta USB para validar quaisquer solicitações de configuração de seleção.
- Se a solicitação especificar as configurações de interface ou pipe diferentes das configurações atuais, Usbccgp.sys emitirá uma solicitação select-interface enviando um URB do tipo URB_FUNCTION_SELECT_INTERFACE para alterar as configurações existentes para as novas configurações de interface e pipe.
- Copia o conteúdo armazenado em cache das estruturas de USBD_INTERFACE_INFORMATION e USBD_PIPE_INFORMATION no URB.
- Conclui o URB.