Partilhar via


Configurando Usbccgp.sys para selecionar uma configuração USB não padrão

Este artigo fornece informações sobre as definições de registo que configuram a forma como Usbccgp.sys seleciona uma configuração USB. O tópico também descreve como o Usbccgp.sys lida com solicitações de configuração selecionada enviadas por um driver de cliente que controla uma das funções de um dispositivo composto.

Um dispositivo composto USB consiste em várias funções (dispositivos funcionais) dentro de um único dispositivo USB. Se o Windows carregar o USB Generic Parent Driver (Usbccgp.sys) fornecido pela Microsoft para um dispositivo composto, a partir desse ponto, Usbccgp.sys é responsável por selecionar a configuração do dispositivo. Cada interface ou coleção de interfaces de um dispositivo composto é, em muitos aspetos, como um dispositivo separado que tem seu próprio objeto de dispositivo físico (DOP). 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 inicialmente definida por Usbccgp.sys.

No entanto, no Windows Vista e versões posteriores do Windows, você pode adicionar os seguintes valores do Registro para especificar a configuração a ser selecionada:

Chave de registo Tipo Valor Valor padrão
ValorOriginalDeConfiguração REG_DWORD Índice de configuração USB. Usbccgp.sys usa OriginalConfigurationValue primeiro para uma solicitação de configuração selecionada. 0
AltConfigurationValue REG_DWORD O índice de configuração a ser usado se a solicitação de configuração selecionada com OriginalConfigurationValue falhar. 0

Observação

As configurações do Registro anteriores não estão presentes, por padrão. Eles devem ser adicionados sob a chave de hardware (também conhecida 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 seleção de configuração ao controlador do barramento USB principal (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 usa valores padrão se AlternateConfigurationValue ou OriginalConfigurationValue forem inválidos.

Um pedido de seleção de configuração pode falhar por vários 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 miliamperes, mas a porta do hub só é capaz de fornecer 50 miliamperes. Quando Usbccgp.sys envia um pedido de seleção de configuração para aquela configuração, a pilha de driver USB (especificamente, o driver da porta USB) não consegue processar o pedido. Usbccgp.sys envia outra solicitação de configuração seletiva especificando a configuração indicada por AltConfigurationValue. Se a configuração alternativa exigir 50 miliamperes ou menos e nenhum outro problema ocorrer, a solicitação de configuração selecionada será concluída com êxito.

Funcionalidade de compatibilidade

Mesmo que um driver de cliente para uma função no dispositivo composto não é capaz de selecionar a configuração de um dispositivo composto, o driver de 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 de configuração selecionada de um driver cliente:

  1. Valida a solicitação recebida usando os mesmos critérios usados pelo driver da porta USB para validar quaisquer solicitações de configuração selecionada.
  2. Se a solicitação especificar configurações de interface ou pipe diferentes das configurações atuais, Usbccgp.sys emitirá uma solicitação de interface selecionada enviando um URB do tipo URB_FUNCTION_SELECT_INTERFACE para alterar as configurações existentes para as novas configurações de interface e pipe.
  3. Copia o conteúdo armazenado em cache das estruturas USBD_INTERFACE_INFORMATION e USBD_PIPE_INFORMATION no URB.
  4. Completa a URB.