Compartilhar via


Dispositivo WinUSB

Este artigo descreve como o Windows reconhece um dispositivo WinUSB. Fabricantes e fornecedores independentes de hardware (IHV) podem usar as informações neste artigo para desenvolver um dispositivo que usa Winusb.sys como o driver de função. Este artigo mostra como carregar o driver automaticamente sem precisar fornecer um arquivo INF (informações personalizadas).

O que é um dispositivo WinUSB

Um dispositivo WinUSB é um dispositivo USB (Barramento Serial Universal) cujo firmware define determinados descritores de recursos do sistema operacional da Microsoft que relatam WINUSB como a ID compatível.

A finalidade de um dispositivo WinUSB é permitir que o Windows carregue Winusb.sys como driver de função do dispositivo sem um arquivo INF personalizado. Para um dispositivo WinUSB, você não é obrigado a distribuir arquivos INF para seu dispositivo, o que torna o processo de instalação do driver simples para os usuários finais. Por outro lado, se você precisar fornecer um INF personalizado, não deverá definir seu dispositivo como um dispositivo WinUSB e especificar a ID de hardware do dispositivo no INF.

A Microsoft fornece um arquivo Winusb.inf que contém informações necessárias para instalar Winusb.sys como driver de dispositivo para um dispositivo USB.

Antes do Windows 8, para carregar Winusb.sys como o driver de função, você precisava fornecer um INF personalizado. O INF personalizado especifica a ID de hardware do dispositivo e também inclui seções do arquivo padrão Winusb.inf. Essas seções são necessárias para instanciar o serviço, copiar binários de caixa de entrada e registrar um GUID de interface do dispositivo necessário para localizar o dispositivo e conversar com ele. Para obter mais informações, consulte Escrever um INF personalizado para instalação do WinUSB.

No Windows 8, o arquivo in-box Winusb.inf é atualizado para permitir que o Windows associe automaticamente o INF a um dispositivo WinUSB.

Instalação do dispositivo WinUSB usando o Winusb.inf integrado

No Windows 8, o arquivo In-box Winusb.inf é atualizado. O INF inclui uma seção de instalação que faz referência a uma ID compatível chamada USB\MS_COMP_WINUSB.

[Generic.Section.NTamd64]
%USB\MS_COMP_WINUSB.DeviceDesc%=WINUSB,USB\MS_COMP_WINUSB

O INF atualizado também inclui uma nova classe de instalação chamada USBDevice.

A classe de instalação USBDevice está disponível para os dispositivos para os quais a Microsoft não fornece um driver integrado. Normalmente, esses dispositivos não pertencem a classes USB bem definidas, como Áudio ou Bluetooth, e exigem um driver personalizado. Se o dispositivo for um dispositivo WinUSB, provavelmente, o dispositivo não pertence a uma classe USB. Seu dispositivo deve ser instalado na classe de instalação USBDevice. O Winusb.inf atualizado facilita esse requisito.

Sobre como usar a classe USBDevice

Não use a classe de configuração USB para dispositivos não classificados. Essa classe é reservada para instalar controladores, hubs e dispositivos compostos. O uso indevido da classe USB pode levar a problemas significativos de confiabilidade e desempenho. Use USBDevice para dispositivos não classificados.

No Windows 8, adicione essa definição ao arquivo INF para usar a classe de dispositivo USBDevice:

  [Version]
  ...
  Class=USBDevice
  ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6}
  ...

No Gerenciador de Dispositivos, veja um novo nó chamado Dispositivos USB (Barramento Serial Universal). Seu dispositivo aparece nesse nó.

No Windows 7, além das linhas anteriores, você precisa criar essas configurações do Registro no INF:

  ;---------- Add Registry Section ----------
  [USBDeviceClassReg]
  HKR,,,,"Universal Serial Bus devices"
  HKR,,NoInstallClass,,1
  HKR,,SilentInstall,,1
  HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"

No Gerenciador de Dispositivos, seu dispositivo aparece em dispositivos USB Universal Serial Bus. A descrição da classe de dispositivo é derivada da configuração do Registro especificada em seu INF.

A classe USBDevice não se limita ao WinUSB. Se você tiver um driver personalizado para seu dispositivo, poderá usar a classe de instalação USBDevice no INF personalizado.

Durante a enumeração do dispositivo, a pilha de driver USB lê a ID compatível do dispositivo. Se WINUSB for o ID compatível, o Windows o usará como identificador do dispositivo e encontrará uma correspondência no Winusb.inf atualizado e, em seguida, carregará Winusb.sys como o driver de função do dispositivo.

Esta imagem refere-se a um dispositivo MUTT (Microsoft USB Test Tool) de interface única que é definido como um dispositivo WinUSB e, como resultado, Winusb.sys é carregado como driver de função do dispositivo.

Captura de tela do Gerenciador de Dispositivos do Windows mostrando um dispositivo WinUSB.

Para versões do Windows anteriores ao Windows 8, o Winusb.inf atualizado está disponível por meio do Windows Update. Se o computador estiver configurado para obter a atualização do driver automaticamente, o driver WinUSB será instalado sem nenhuma intervenção do usuário usando o novo pacote INF.

Como alterar a descrição do dispositivo para um dispositivo WinUSB

Para um dispositivo WinUSB, o Gerenciador de Dispositivos é mostrado WinUsb Device como a descrição do dispositivo. Essa cadeia de caracteres é derivada de Winusb.inf. Se houver vários dispositivos WinUSB, todos os dispositivos obterão a mesma descrição do dispositivo.

Para identificar e diferenciar exclusivamente o dispositivo no Gerenciador de Dispositivos, o Windows 8 fornece uma nova propriedade em uma classe de dispositivo. A propriedade instrui o sistema a dar precedência à descrição do dispositivo relatada pelo dispositivo em seu descritor de cadeia de caracteres iProduct sobre a descrição no INF. A classe USBDevice definida no Windows 8 define essa propriedade.

Quando um dispositivo é instalado na classe USBDevice, o Windows consulta o dispositivo para obter uma descrição do dispositivo e define a cadeia de caracteres do Gerenciador de Dispositivos como o que for recuperado na consulta. Nesse caso, a descrição do dispositivo fornecida no INF é ignorada. Observe as cadeias de caracteres de descrição do dispositivo: MUTT na imagem anterior. O dispositivo USB fornece a cadeia de caracteres em seu descritor de cadeia de caracteres do produto.

A nova propriedade de classe não tem suporte em versões anteriores do Windows. Para ter uma descrição personalizada do dispositivo em uma versão anterior do Windows, você precisa escrever seu próprio INF personalizado.

Como configurar um dispositivo WinUSB

Para identificar um dispositivo USB como um dispositivo WinUSB, o firmware do dispositivo deve ter descritores do sistema operacional Microsoft. Para obter mais informações, consulte os descritores do sistema operacional da Microsoft para dispositivos USB.

Suporte a descritores de recursos estendidos

Para que a pilha de driver USB saiba que o dispositivo dá suporte a descritores de recursos estendidos, o dispositivo deve definir um descritor de cadeia de caracteres do sistema operacional armazenado no índice 0xEEde cadeia de caracteres. Durante a enumeração, a pilha de driver consulta o descritor de string. Se o descritor estiver presente, a pilha de driver pressupõe que o dispositivo contenha um ou mais descritores de funcionalidades do sistema operacional e os dados necessários para recuperar esses descritores de funcionalidades.

O descritor de cadeia de caracteres recuperado tem um valor de campo bMS_VendorCode . O valor indica o código do fornecedor que o conjunto de drivers USB deve usar para recuperar o descritor de funcionalidades estendidas.

Para definir um descritor de cadeia de caracteres do sistema operacional, consulte os descritores do sistema operacional da Microsoft para dispositivos USB.

Definindo a ID compatível

Um descritor de recurso de sistema operacional de ID compatível estendido é necessário para corresponder ao Winusb.inf embutido e carregar o módulo de driver do WinUSB.

O descritor de recursos do sistema operacional de ID compatível estendido inclui uma seção de cabeçalho seguida por uma ou mais seções de função, dependendo se o dispositivo é composto ou não. A seção de cabeçalho especifica o comprimento de todo o descritor, o número de seções de função e o número da versão.

Para um dispositivo não compatível, o cabeçalho é seguido por uma seção de função associada à única interface do dispositivo. O campo compatibleID dessa seção deve especificar WINUSB como o valor do campo. Para um dispositivo composto, há várias seções de função. O campo compatibleID de cada seção de função deve especificar WINUSB.

Registrando um GUID de interface do dispositivo

Um descritor de propriedades estendidas do sistema operacional é necessário para registrar o GUID da interface do dispositivo. O GUID é necessário para localizar o dispositivo de um aplicativo ou serviço, configurar o dispositivo e executar operações de E/S.

Nas versões anteriores do Windows, o registro GUID da interface do dispositivo é realizado através do INF personalizado. A partir do Windows 8, seu dispositivo deve reportar o GUID da interface usando o descritor de recurso de propriedades estendidas do SO.

O descritor de recursos do sistema operacional de propriedades estendidas inclui uma seção de cabeçalho seguida por uma ou mais seções de propriedade personalizadas. A seção de cabeçalho descreve todo o descritor de propriedades estendidas, incluindo o tamanho total, o número da versão e o número de seções de propriedade personalizadas. Para registrar o GUID da interface do dispositivo, adicione uma seção de propriedade personalizada que define o campo DeviceInterfaceGUID como e wPropertyNameLength como 40 bytes.

Gere um GUID de interface de dispositivo exclusivo usando um gerador GUID e defina o campo bPropertyData para esse GUID, como {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}. O GUID é especificado como uma cadeia de caracteres Unicode e o comprimento da cadeia de caracteres é de 78 bytes, incluindo o terminador nulo.

       
bPropertyData 78 bytes 7B 00 38 00 46 00 45 00 36 00 44 00 34 00 44 00 37 00 2D 00 34 00 39 00 00 44 00 2D 00 34 00 31 00 45 00 37 00 2D 00 39 00 34 00 38 00 36 00 2D 00 34 00 39 00 41 00 46 00 43 00 36 00 42 00 46 00 45 00 34 00 37 00 35 00 7D 00 00 00 O valor da propriedade é {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}.

Durante a enumeração do dispositivo, a pilha de drivers USB recupera o valor DeviceInterfaceGUID do descritor de características do sistema operacional de propriedades estendidas e registra o dispositivo na chave de hardware do dispositivo. Um aplicativo pode recuperar o valor usando APIs SetupDiXxx . Consulte SetupDiOpenDevRegKey. Para obter mais informações, consulte Acessar um dispositivo USB usando funções WinUSB.

Habilitar ou desabilitar recursos de gerenciamento de energia do WinUSB

Antes do Windows 8, para configurar os recursos de gerenciamento de energia do WinUSB, você precisava escrever os valores de entrada no Registro na seção HW.AddReg do seu INF personalizado.

No Windows 8 e posterior, você pode especificar as configurações de energia no dispositivo. Você pode relatar valores por meio do descritor de funcionalidades do sistema operacional de propriedades estendidas que habilitam ou desabilitam funcionalidades no WinUSB para esse dispositivo. Há dois recursos que você pode configurar: suspensão seletiva e ativação do sistema. A suspensão seletiva permite que o dispositivo entre em o estado de baixa potência quando estiver ocioso. A ativação do sistema refere-se à capacidade de um dispositivo de despertar um sistema quando este estiver em estado de baixa potência.

Para obter mais informações, consulte o Gerenciamento de Energia do WinUSB.

Nome da propriedade Descrição
DispositivoInativoHabilitado Esse valor é definido como 1 para indicar que o dispositivo pode desligar quando ocioso (suspensão seletiva).
DefaultIdleState Esse valor é definido como 1 para indicar que o dispositivo pode ser suspenso quando ocioso por padrão.
DefaultIdleTimeout Esse valor é definido como 5000 em milissegundos para indicar a quantidade de tempo em milissegundos a aguardar antes de determinar que um dispositivo está ocioso.
ConfiguracaoUsuarioDispositivoInativoHabilitado Esse valor é definido como 1 para permitir que o usuário controle a capacidade do dispositivo de habilitar ou desabilitar a suspensão seletiva de USB. Há uma caixa de seleção Permitir que o computador desative esse dispositivo para economizar energia na página de propriedades do Gerenciamento de Energia do dispositivo. Os usuários podem ativar ou desativar a suspensão seletiva de USB.
SistemaDespertarHabilitado Esse valor é definido como 1 para permitir que o usuário controle a capacidade do dispositivo de ativar o sistema de um estado de baixa potência. Quando ativado, a caixa de seleção Permitir que este dispositivo acorde o computador aparece na página de propriedades de Gerenciamento de Energia do dispositivo. O usuário pode habilitar ou desabilitar o wake do sistema USB.

Por exemplo, para habilitar a suspensão seletiva no dispositivo, adicione uma seção de propriedade personalizada que define o campo bPropertyName como uma cadeia de caracteres Unicode DeviceIdleEnabled e wPropertyNameLength como 36 bytes. Defina o campo bPropertyData como 0x00000001. Os valores das propriedades são armazenados como inteiros de 32 bits no formato little-endian.

Durante a enumeração, a pilha de driver USB lê os descritores de características de propriedades estendidas e cria entradas do registro sob esta chave:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\<>Identificador de Instância\

Esta imagem mostra as configurações de exemplo para um dispositivo WinUSB.

Captura de tela do Editor do Registro do Windows mostrando as configurações de um dispositivo WinUSB.

Para obter mais exemplos, consulte descritores do sistema operacional da Microsoft.