Compartir a través de


Instalación de WinUSB (Winusb.sys) para desarrolladores

Para determinados dispositivos de bus serie universal (USB), puede instalar WinUSB (Winusb.sys) en lugar de implementar un controlador.

Importante

Este tema es para programadores. Si es un cliente que experimenta problemas con USB, consulte Corregir problemas de USB-C en Windows.

Instalación automática de WinUSB sin un archivo INF

Como proveedor de hardware OEM o independiente (IHV), puede compilar el dispositivo para que Winusb.sys se instale automáticamente en Windows 8 y versiones posteriores del sistema operativo. Este dispositivo se denomina dispositivo WinUSB y no requiere que escriba un archivo INF personalizado que haga referencia a Winusb.inf.

Al conectar un dispositivo WinUSB, el sistema lee la información del dispositivo y carga Winusb.sys automáticamente.

Para obtener más información, consulte Dispositivo WinUSB.

Instalación de WinUSB especificando la clase de dispositivo proporcionada por el sistema

Al conectar el dispositivo, es posible que observe que Windows carga Winusb.sys automáticamente. De lo contrario, siga estas instrucciones para cargar el controlador:

  1. Conecte el dispositivo al sistema host.
  2. Abra el Administrador de dispositivos y busque el dispositivo.
  3. Mantenga pulsado (o haga clic con el botón derecho) el dispositivo y seleccione Actualizar software de controlador... en el menú contextual.
  4. En el asistente, seleccione Buscar software de controlador en el equipo.
  5. Seleccione Dejarme elegir de una lista de controladores de dispositivo en mi equipo.
  6. En la lista de clases de dispositivo, seleccione Dispositivos de bus serie universal.
  7. El asistente muestra Dispositivo WinUsb. Selecciónelo para cargar el controlador.

Si los dispositivos universales de Bus serie no aparecen en la lista de clases de dispositivos, debe instalar el controlador mediante un INF personalizado. El procedimiento anterior no agrega un GUID de interfaz de dispositivo para una aplicación (aplicación para UWP o aplicación de escritorio de Windows) para acceder al dispositivo. Para agregar manualmente el GUID, siga este procedimiento.

  1. Cargue el controlador como se describe en el procedimiento anterior.

  2. Genere un GUID de interfaz de dispositivo para el dispositivo mediante una herramienta como guidgen.exe.

  3. Busque la clave del Registro para el dispositivo en esta clave:

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

  4. En la clave Parámetros del dispositivo, agregue una entrada del Registro String denominada DeviceInterfaceGUID o una entrada de varias cadenas denominada DeviceInterfaceGUIDs. Establezca el valor en el GUID que generó en el paso 2.

  5. Desconecte el dispositivo del sistema y vuelva a conectarlo al mismo puerto físico.

    Nota:

    Si cambia el puerto físico, debe repetir los pasos del 1 al 4.

Escritura de un INF personalizado para la instalación de WinUSB

Como parte del paquete de controladores, se proporciona un archivo .inf que instala Winusb.sys como controlador de función para el dispositivo USB.

En el siguiente archivo .inf de ejemplo se muestra la instalación de WinUSB para la mayoría de los dispositivos USB con algunas modificaciones, como cambiar USB_Install en los nombres de sección a un valor DDInstall adecuado. También debe cambiar las secciones de versión, fabricante y modelo según sea necesario. Por ejemplo, proporcione el nombre de un fabricante adecuado, el nombre del archivo de catálogo firmado, la clase de dispositivo correcta y el identificador de proveedor (VID) y el identificador de producto (PID) del dispositivo. Para obtener información sobre cómo crear un archivo de catálogo, consulte Creación de un archivo de catálogo para probar la firma de un paquete de controladores.

Observe también que la clase de instalación está establecida en USBDevice. Los proveedores pueden usar la clase de configuración USBDevice para dispositivos que no pertenecen a otra clase y no son controladores o concentradores de host USB.

Si va a instalar WinUSB como controlador de funciones para una de las funciones de un dispositivo compuesto USB, debe proporcionar el identificador de hardware asociado a la función, en inf. Puede obtener el identificador de hardware de la función de las propiedades del nodo de desarrollo en Administrador de dispositivos. El formato de cadena de identificador de hardware es USB\VID_vvvv&PID_pppp.

El siguiente INF instala WinUSB como controlador de funciones de la placa OSR USB FX2 en un sistema basado en x64.

A partir de Windows 10, versión 1709, el Kit para controladores de Windows proporciona InfVerif.exe que puede usar para probar un archivo INF del controlador para asegurarse de que no hay problemas de sintaxis y el archivo INF es universal. Se recomienda proporcionar un INF universal. Para obtener más información, consulte Uso de un archivo 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 solo una nueva clase de configuración de dispositivo personalizado, incluya una sección ClassInstall32 en un archivo INF de dispositivo. Los archivos INF para dispositivos de una clase instalada, ya sea una clase de instalación de dispositivos proporcionada por el sistema o una clase personalizada, no deben incluir una sección ClassInstall32.

Excepto los valores específicos del dispositivo y varios problemas que se indican en la lista siguiente, puedes usar estas secciones y directivas para instalar WinUSB para cualquier dispositivo USB. Estos elementos de lista describen Includes y las Directivas en el archivo .inf anterior.

  • USB_Install: las directivas Include y Needs de la sección USB_Install son necesarias para instalar WinUSB. No debe modificar estas directivas.

  • USB_Install.Services: la directiva Include de la sección USB_Install.Services incluye el archivo .inf proporcionado por el sistema para WinUSB (Winusb.inf). El coinstaller winUSB instala este archivo .inf si aún no está en el sistema de destino. La directiva Needs especifica la sección de Winusb.inf que contiene información necesaria para instalar Winusb.sys como controlador de funciones del dispositivo. No debe modificar estas directivas.

  • USB_Install.HW: esta sección es la clave del archivo .inf. Especifica el identificador único global (GUID) de la interfaz de dispositivo para el dispositivo. La directiva AddReg establece el GUID de interfaz especificado en un valor estándar del Registro. Cuando Winusb.sys se carga como controlador de funciones del dispositivo, lee la clave DeviceInterfaceGUIDs del valor del Registro y usa el GUID especificado para representar la interfaz del dispositivo. Debe reemplazar el GUID de este ejemplo por uno que cree específicamente para el dispositivo. Si cambian los protocolos del dispositivo, cree un nuevo GUID de interfaz de dispositivo.

    Nota:

    El software en modo de usuario debe llamar a SetupDiGetClassDevs para enumerar las interfaces de dispositivo registradas asociadas a una de las clases de interfaz de dispositivo especificadas en la clave DeviceInterfaceGUIDs. SetupDiGetClassDevs devuelve el identificador de dispositivo para el dispositivo que el software en modo de usuario debe pasar a la rutina WinUsb_Initialize para obtener un identificador WinUSB para la interfaz del dispositivo. Para obtener más información sobre estas rutinas, consulte Cómo acceder a un dispositivo USB mediante funciones WinUSB.

El siguiente INF instala WinUSB como controlador de funciones de la placa OSR USB FX2 en un sistema basado en x64. En el ejemplo se muestra INF con 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 sección, que incluye las secciones AddReg y CopyFiles a las que se hace referencia, contiene datos e instrucciones para instalar los coinstaladores WinUSB y KMDF y asociarlos al dispositivo. La mayoría de los dispositivos USB pueden usar estas secciones y directivas sin modificaciones.

  • Las versiones basadas en x86 y x64 de Windows tienen coinstaladores independientes.

    Cada coinstaller tiene versiones gratuitas y comprobadas. Use la versión gratuita para instalar WinUSB en compilaciones gratuitas de Windows, incluidas todas las versiones comerciales. Para instalar WinUSB en compilaciones comprobadas de Windows, use la versión activada (con el sufijo "_chk").

Cada vez que Winusb.sys se carga, registra una interfaz de dispositivo que tiene las clases de interfaz de dispositivo que se especifican en el registro en la clave DeviceInterfaceGUIDs.

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

Si usa el paquete WinUSB redistribuible para Windows XP o Windows Server 2003, asegúrese de no desinstalar WinUSB en los paquetes de desinstalación. Es posible que otros dispositivos USB usen WinUSB, por lo que sus archivos binarios deben permanecer en la carpeta compartida.

Creación de un paquete de controladores que instala Winusb.sys

Para usar WinUSB como controlador de funciones del dispositivo, cree un paquete de controladores. El paquete de controladores debe contener estos archivos:

  • Coinstaller de WinUSB (Winusbcoinstaller.dll)
  • Coinstaller de KMDF (WdfcoinstallerXXX.dll)
  • Un archivo .inf que instale Winusb.sys como controlador de funciones del dispositivo. Para obtener más información, consulte Escritura de un INF personalizado para la instalación de WinUSB.
  • Un archivo de catálogo firmado para el paquete. Este archivo es necesario para instalar WinUSB en versiones x64 de Windows a partir de Vista.

Paquete de instalación de WinUSB.

Asegúrese de que el contenido del paquete del controlador cumpla estos requisitos:

  • Los archivos coinstaller KMDF y WinUSB deben obtenerse de la misma versión del Kit de controladores de Windows (WDK).
  • Los archivos coinstaller se deben obtener de la versión más reciente del WDK, de modo que el controlador admita todas las versiones más recientes de Windows.
  • El contenido del paquete de controladores debe estar firmado digitalmente con una firma de versión de Winqual. Para obtener más información sobre cómo crear y probar archivos de catálogo firmados, consulte Tutorial de firma de código en modo kernel en el sitio del Centro de desarrollo de Windows - Hardware.
  1. Descargue el Kit para controladores de Windows (WDK) e instálelo.

  2. Cree una carpeta de paquete de controladores en la máquina a la que está conectado el dispositivo USB. Por ejemplo, c:\UsbDevice.

  3. Copie el coinstalado WinUSB (WinusbcoinstallerX.dll) de la carpeta WinDDK\<BuildNumber>\redist\winusb en la carpeta del paquete de controladores.

    El coinstalar WinUSB (Winusbcoinstaller.dll) instala WinUSB en el sistema de destino, si es necesario. El WDK incluye tres versiones del coinstaller en función de la arquitectura del sistema: sistemas basados en x86, basados en x64 y en Itanium. Cada coinstaller se denomina WinusbcoinstallerX.dll y se encuentra en el subdirectorio adecuado en la carpeta WinDDK\<BuildNumber>\redist\winusb .

  4. Copie el coinstaller de KMDF (WdfcoinstallerXXX.dll) de la carpeta WinDDK\<BuildNumber>\redist\wdf en la carpeta del paquete de controladores.

    El coinstaller (WdfcoinstallerXXX.dll) de KMDF instala la versión correcta de KMDF en el sistema de destino, si es necesario. La versión del coinstalado de WinUSB debe coincidir con el coinstalado de KMDF porque los controladores de cliente basados en KMDF, como Winusb.sys, requieren que la versión correspondiente del marco de KMDF se instale correctamente en el sistema. Por ejemplo, Winusbcoinstaller2.dll requiere KMDF versión 1.9, que Wdfcoinstaller01009.dll instala. Las versiones x86 y x64 de WdfcoinstallerXXX.dll se incluyen con el WDK en la carpeta WinDDK\<BuildNumber>\redist\wdf. En la tabla siguiente se muestra el coinstaller de WinUSB y el coinstalador KMDF asociado que se va a usar en el sistema de destino.

    Use esta tabla para determinar el coinstalador winUSB y el coinstalador kmdf asociado.

    Coinstaller de WinUSB Versión de la biblioteca KMDF Coinstaller de KMDF
    Winusbcoinstaller.dll Necesita la versión de KMDF 1.5 o posterior Wdfcoinstaller01005.dll
    Wdfcoinstaller01007.dll
    Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Necesita la versión de KMDF 1.9 o posterior Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Necesita la versión de KMDF 1.11 o posterior WdfCoInstaller01011.dll
  5. Escriba un archivo .inf que instale Winusb.sys como controlador de función para el dispositivo USB.

  6. Cree un archivo de catálogo firmado para el paquete. Este archivo es necesario para instalar WinUSB en versiones x64 de Windows.

  7. Conecte el dispositivo USB al equipo.

  8. Para instalar el controlador, abra Administrador de dispositivos. Siga las instrucciones del asistente para actualizar software del controlador y elija la instalación manual. Para completar la instalación, proporcione la ubicación de la carpeta del paquete de controladores.