Instalação do WinUSB (Winusb.sys) para desenvolvedores

Para determinados dispositivos USB (Universal Serial Bus), você pode instalar o WinUSB (Winusb.sys) em vez de implementar um driver.

Importante

Este tópico é para programadores. Se você for um cliente com problemas de USB, consulte Corrigir problemas de USB-C no Windows

Instalação automática do WinUSB sem um arquivo INF

Como um OEM ou um IHV (fornecedor independente de hardware), você pode criar seu dispositivo para que o Winusb.sys seja instalado automaticamente no Windows 8 e versões posteriores do sistema operacional. Esse dispositivo é chamado de dispositivo WinUSB e não exige que você escreva um arquivo INF personalizado que faça referência ao Winusb.inf na caixa.

Quando você conecta um dispositivo WinUSB, o sistema lê as informações dele e carrega o Winusb.sys automaticamente.

Para obter mais informações, consulte Dispositivo WinUSB.

Instalação do WinUSB especificando a classe de dispositivo fornecida pelo sistema

Ao conectar seu dispositivo, você pode notar que o Windows carrega Winusb.sys automaticamente. Caso contrário, siga estas instruções para carregar o driver:

  1. Conecte o dispositivo ao sistema host.
  2. Abra Gerenciador de Dispositivos e localize o dispositivo.
  3. Selecione e segure (ou clique com o botão direito do mouse) o dispositivo e selecione Atualizar software do driver... no menu de contexto.
  4. No assistente, selecione Procurar o software de driver no computador.
  5. Selecione Permitir que eu escolha em uma lista de drivers de dispositivo no meu computador.
  6. Na lista de classes de dispositivo, selecione Dispositivos de Barramento Serial Universal.
  7. O assistente exibe o Dispositivo WinUSB. Selecione-o para carregar o driver.

Se os dispositivos Universal Serial Bus não aparecerem na lista de classes de dispositivo, você precisará instalar o driver usando um INF personalizado. O procedimento anterior não adiciona um GUID de interface do dispositivo para um aplicativo (aplicativo UWP ou aplicativo da área de trabalho do Windows) para acessar o dispositivo. É necessário adicionar o GUID manualmente seguindo este procedimento.

  1. Carregue o driver conforme descrito no procedimento anterior.

  2. Gere um GUID de interface de dispositivo para seu dispositivo, usando uma ferramenta, como guidgen.exe.

  3. Localize a chave do Registro para o dispositivo sob esta chave:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<VID_vvvv&PID_pppp>

  4. Na chave Parâmetros do Dispositivo, adicione uma entrada do Registro de Cadeia de caracteres denominada DeviceInterfaceGUID ou uma entrada de Cadeia de caracteres múltipla denominada DeviceInterfaceGUIDs. Defina o valor como o GUID gerado na etapa 2.

  5. Desconecte o dispositivo do sistema e reconecte-o à mesma porta física.

    Observação

    Se você alterar a porta física, deverá repetir as etapas de 1 a 4.

Como criar um INF personalizado para instalação do WinUSB

Como parte do pacote de driver, você precisa fornecer um arquivo .inf que instala o Winusb.sys como o driver de função para o dispositivo USB.

O arquivo .inf de exemplo a seguir mostra a instalação do WinUSB para a maioria dos dispositivos USB com algumas modificações, como alterar USB_Install em nomes de seção para um valor DDInstall. Você também deve alterar as seções de versão, fabricante e modelo, conforme necessário. Por exemplo, forneça o nome de um fabricante apropriado, o nome do arquivo de catálogo assinado, a classe de dispositivo correta e o VID (identificador de fornecedor) e o PID (identificador de produto) para o dispositivo. Para obter informações sobre como criar um arquivo de catálogo, consulte Criação de um arquivo de catálogo para assinatura de teste de um pacote de driver.

Observe também que a classe de instalação está definida como USBDevice. Os fornecedores podem usar a classe de configuração USBDevice para dispositivos que não pertencem a outra classe e não são controladores ou hubs de host USB.

Se você estiver instalando o WinUSB como o driver de função para uma das funções em um dispositivo composto USB, deverá fornecer a ID de hardware associada à função, no INF. É possível obter o ID de hardware para a função nas propriedades do devnode no Gerenciador de Dispositivos. O formato da string de ID de hardware é USB\VID_vvvv&PID_pppp.

O INF a seguir instala o WinUSB como o driver de função da placa OSR USB FX2 em um sistema baseado em x64.

A partir do Windows 10, versão 1709, o Kit de Driver do Windows fornece InfVerif.exe que você pode usar para testar um arquivo INF de driver para verificar se não há problemas de sintaxe e se o arquivo INF é universal. Recomendamos que você forneça um INF universal. Para obter mais informações, consulte Uso de um arquivo INF universal.

;
;
; Installs WinUsb
;

[Version]
Signature   = "$Windows NT$"
Class       = USBDevice
ClassGUID   = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider    = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer   = 09/04/2012,13.54.20.543
PnpLockdown = 1

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

[Standard.NTamd64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002

; ========== Class definition (for Windows 8 and earlier versions)===========

[ClassInstall32]
AddReg = ClassInstall_AddReg

[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2

; =================== Installation ===================

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include =winusb.inf
Needs   = WINUSB.NT.Services

[USB_Install.HW]
AddReg=Dev_AddReg

[USB_Install.Wdf]
KmdfService=WINUSB, WinUsb_Install

[WinUsb_Install]
KmdfLibraryVersion=1.11

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

; [DestinationDirs]
; If your INF needs to copy files, you must not use the DefaultDestDir directive here.
; You must explicitly reference all file-list-section names in this section.

; =================== Strings ===================

[Strings]
ManufacturerName=""
ClassName="Universal Serial Bus devices"
DeviceName="Fx2 Learning Kit Device"
REG_MULTI_SZ = 0x00010000

Para instalar apenas uma nova classe de configuração de dispositivo personalizada, inclua uma seção ClassInstall32 em um arquivo INF do dispositivo. Os arquivos INF para dispositivos em uma classe instalada, seja uma classe de configuração de dispositivo fornecida pelo sistema ou uma classe personalizada, não devem incluir uma seção ClassInstall32.

Exceto valores específicos do dispositivo e alguns problemas observados na lista a seguir, você pode usar estas seções e diretivas para instalar o WinUSB para qualquer dispositivo USB. Esses itens de lista descrevem as inclusões e as Diretivas no arquivo .inf anterior.

  • USB_Install: as diretivas Incluir e Necessidades na seção USB_Install são obrigatórias para a instalação do WinUSB. Você não deve modificar essas diretivas.

  • USB_Install.Services: a diretiva Incluir na seção USB_Install.Services inclui o .inf fornecido pelo sistema para WinUSB (Winusb.inf). O coinstalador WinUSB instala esse arquivo .inf se ele ainda não estiver no sistema de destino. A diretiva Necessidades especifica a seção no Winusb.inf que contém informações obrigatórias para instalar o Winusb.sys como o driver de função do dispositivo. Você não deve modificar essas diretivas.

  • USB_Install.HW: esta seção é a chave no arquivo .inf. Ela especifica o GUID (identificador global exclusivo) da interface do dispositivo. A diretiva AddReg define o GUID de interface especificado no valor do Registro padrão. Quando Winusb.sys é carregado como o driver de função do dispositivo, ele lê a chave DeviceInterfaceGUIDs de valor do Registro e usa o GUID especificado para representar a interface do dispositivo. Você deve substituir o GUID neste exemplo por um que você cria especificamente para o dispositivo. Se os protocolos do dispositivo forem alterados, crie um GUID de interface de dispositivo.

    Observação

    O software no modo de usuário deve chamar SetupDiGetClassDevs para enumerar as interfaces de dispositivo registradas associadas a uma das classes de interface de dispositivo especificadas na chave DeviceInterfaceGUIDs. SetupDiGetClassDevs retorna o identificador do dispositivo que o software de modo de usuário deve transmitir para a rotina WinUsb_Initialize a fim de obter um identificador WinUSB para a interface do dispositivo. Para obter mais informações sobre essas rotinas, consulte Como acessar um dispositivo USB usando funções do WinUSB.

O INF a seguir instala o WinUSB como o driver de função da placa OSR USB FX2 em um sistema baseado em x64. O exemplo mostra INF com coinstaladores WDF.

;
;
; Installs WinUsb
;

[Version]
Signature   = "$Windows NT$"
Class       = USBDevice
ClassGUID   = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider    = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer   = 09/04/2012,13.54.20.543
PnpLockdown = 1

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

[Standard.NTamd64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002

; ========== Class definition (for Windows 8 and earlier versions) ===========

[ClassInstall32]
AddReg = ClassInstall_AddReg

[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2

; =================== Installation ===================

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include =winusb.inf
Needs   = WINUSB.NT.Services

[USB_Install.HW]
AddReg=Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

[USB_Install.CoInstallers]
AddReg=CoInstallers_AddReg
CopyFiles=CoInstallers_CopyFiles

[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01011.dll,WdfCoInstaller","WinUsbCoInstaller2.dll"

[CoInstallers_CopyFiles]
WinUsbCoInstaller2.dll
WdfCoInstaller01011.dll

[DestinationDirs]
; If your INF needs to copy files, you must not use the DefaultDestDir directive here.
CoInstallers_CopyFiles=11
; ================= Source Media Section =====================

[SourceDisksNames]
1 = %DiskName%

[SourceDisksFiles]
WinUsbCoInstaller2.dll=1
WdfCoInstaller01011.dll=1


; =================== Strings ===================

[Strings]
ManufacturerName=""
ClassName="Universal Serial Bus devices"
DeviceName="Fx2 Learning Kit Device"
DiskName="MyDisk"
REG_MULTI_SZ = 0x00010000
  • USB_Install.CoInstallers: esta seção, que inclui as seções AddReg e CopyFiles referenciadas, contém dados e instruções para instalar os coinstaladores WinUSB e KMDF e associá-los ao dispositivo. A maioria dos dispositivos USB pode usar essas seções e diretivas sem modificação.

  • As versões baseadas em x86 e x64 do Windows têm coinstaladores separados.

    Cada co-instalador tem versões gratuitas e verificadas. Use a versão gratuita para instalar o WinUSB em compilações gratuitas do Windows, incluindo todas as versões de varejo. Para instalar o WinUSB em compilações verificadas do Windows, use a versão verificada (com o sufixo "_chk").

Cada vez que o Winusb.sys é carregado, ele registra uma interface de dispositivo que tem as classes de interface de dispositivo especificadas no Registro sob a chave DeviceInterfaceGUIDs.

HKR,,DeviceInterfaceGUIDs, 0x10000,"{D696BFEB-1734-417d-8A04-86D01071C512}"

Se você usar o pacote WinUSB redistribuível para Windows XP ou Windows Server 2003, lembre-se de não desinstalar o WinUSB em seus pacotes de desinstalação. Outros dispositivos USB podem estar usando WinUSB, portanto, seus binários devem permanecer na pasta compartilhada.

Como criar um pacote de driver que instale o Winusb.sys

Para usar o WinUSB como o driver de função do dispositivo, crie um pacote de driver. O pacote de driver deve conter estes arquivos:

  • Coinstalador WinUSB (Winusbcoinstaller.dll)
  • Coinstalador KMDF (WdfcoinstallerXXX.dll)
  • Um arquivo .inf que instale o Winusb.sys como o driver de função do dispositivo. Para obter mais informações, consulte Como criar um INF personalizado para instalação do WinUSB.
  • Um arquivo de catálogo assinado para o pacote. Esse arquivo é necessário para instalar o WinUSB em versões x64 do Windows começando com o Vista.

Pacote de instalação do WinUSB.

Verifique se o conteúdo do pacote de driver atende a estes requisitos:

  • Os arquivos de co-instalador KMDF e WinUSB devem ser obtidos da mesma versão do WDK (Windows Driver Kit).
  • Os arquivos do coinstalador devem ser obtidos da versão mais recente do WDK, para que o driver dê suporte a todas as versões mais recentes do Windows.
  • O conteúdo do pacote de driver deve ser assinado digitalmente com uma assinatura de versão Winqual. Para obter mais informações sobre como criar e testar arquivos de catálogo assinados, consulte Passo a passo de assinatura de código do modo Kernel no Centro de Desenvolvimento do Windows: site de hardware.
  1. Baixe o Kit de Driver do Windows (WDK) e instale-o.

  2. Crie uma pasta de pacote de driver na máquina à qual o dispositivo USB está conectado. Por exemplo, c:\UsbDevice.

  3. Copie o coinstalador WinUSB (WinusbcoinstallerX.dll) da pasta WinDDK\<BuildNumber>\redist\winusb para a pasta do pacote de driver.

    O coinstalador WinUSB (Winusbcoinstaller.dll) instala o WinUSB no sistema de destino, se necessário. O WDK inclui três versões do coinstalador, dependendo da arquitetura do sistema: sistemas baseados em x86, baseados em x64 e baseados em Itanium. Cada co-instalador é nomeado WinusbcoinstallerX.dll e está localizado no subdiretório apropriado na pasta WinDDK\<BuildNumber>\redist\winusb.

  4. Copie o coinstalador KMDF (WdfcoinstallerXXX.dll) da pasta WinDDK\<BuildNumber>\redist\wdf para a pasta do pacote de driver.

    O coinstalador do KMDF (WdfcoinstallerXXX.dll) instala a versão correta do KMDF no sistema de destino, se necessário. A versão do coinstalador WinUSB deve corresponder ao coinstalador KMDF porque os drivers cliente baseados em KMDF, como Winusb.sys, exigem que a versão correspondente da estrutura KMDF seja instalada corretamente no sistema. Por exemplo, Winusbcoinstaller2.dll requer o KMDF versão 1.9, que Wdfcoinstaller01009.dll instala. As versões x86 e x64 do WdfcoinstallerXXX.dll estão incluídas no WDK na pasta WinDDK\<BuildNumber>\redist\wdf. A tabela a seguir mostra o coinstalador WinUSB e o coinstalador KMDF associado a serem usados no sistema de destino.

    Use esta tabela para determinar o coinstalador WinUSB e o coinstalador KMDF associado.

    Co-instalador WinUSB Versão da biblioteca do KMDF Co-instalador KMDF
    Winusbcoinstaller.dll Exige o KMDF versão 1.5 ou posterior Wdfcoinstaller01005.dll
    Wdfcoinstaller01007.dll
    Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Exige o KMDF versão 1.9 ou posterior Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Exige o KMDF versão 1.11 ou posterior WdfCoInstaller01011.dll
  5. Elabore um arquivo .inf que instale oWinusb.sys como o driver de função para o dispositivo USB.

  6. Crie um arquivo de catálogo assinado para o pacote. Esse arquivo é necessário para instalar o WinUSB em versões x64 do Windows.

  7. Conecte o dispositivo USB ao computador.

  8. Para instalar o driver, abra o Gerenciador de dispositivos. Siga as instruções no assistente para Atualizar Software de Driver e escolha a instalação manual. Para concluir a instalação, forneça o local da pasta do pacote de driver.