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 artículo 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 construir el dispositivo para que el Winusb.sys se instale automáticamente. Este dispositivo se llama dispositivo WinUSB y no requiere que escriba un archivo INF personalizado que haga referencia a Winusb.inf.

Al conectar un dispositivo WinUSB, Windows 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. Haga clic con el botón derecho en 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 Permítame elegir de una lista de controladores de dispositivo en mi ordenador.
  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 de bus serie universal 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 su 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.

Este es un ejemplo de un archivo INF universal que es válido para plataformas x64 y ARM64 que ejecutan Windows 10 o posterior. En este ejemplo no se incluyen coinstaladores, lo que hace que sea apto para la firma por mediante el portal del Panel del Centro de desarrolladores de hardware.

;
; Universal INF file for WinUsb installation
;

[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 and Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64,NTarm64

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

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

; =================== 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}"

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

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

Este archivo INF universal se puede usar en varias plataformas Windows (x64 y ARM64) y es elegible para ser firmado por el portal del Panel de control del Centro de desarrolladores de hardware.

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). Windows 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 función del dispositivo, lee el valor de Registro de la clave DeviceInterfaceGUIDs 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.

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}"

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. Estos son los pasos para crear un paquete de controladores que instala Winusb.sys:

  1. Descargue el Kit de controladores de Windows (WDK) e instálelo en el equipo.

  2. Cree una carpeta del paquete de controladores en el sistema donde está conectado el dispositivo USB, C:\UsbDevice, por ejemplo.

  3. Escriba un archivo .inf que instale Winusb.sys como controlador de función para el dispositivo USB y guárdelo en la carpeta del paquete de controladores. Puede encontrar un ejemplo de cómo escribir este archivo en la sección Escritura de un INF personalizado para la instalación de WinUSB de este documento.

  4. Cree un archivo de catálogo firmado para el paquete. Este archivo es necesario para instalar WinUSB en Windows. Puedes encontrar más información sobre cómo crear y probar archivos de catálogo firmados en Kernel-Mode Tutorial de firma de código en el sitio del Centro de desarrollo de Windows: hardware.

    Diagrama que muestra el contenido de un paquete de instalación de controladores WinUSB

  5. Conecte el dispositivo USB al equipo.

  6. Abra el Administrador de dispositivos en el equipo. Siga las instrucciones del asistente para actualizar software del controlador y elija la instalación manual. Cuando se le solicite, proporcione la ubicación de la carpeta del paquete de controladores para completar la instalación.