Dispositivo WinUSB

En este artículo, obtendrá información sobre cómo Windows reconoce un dispositivo WinUSB.

La información de este artículo se aplica a usted si es un oem o proveedor de hardware independiente (IHV) que desarrolla un dispositivo para el que desea usar Winusb.sys como controlador de función y desea cargar el controlador automáticamente sin tener que proporcionar un INF personalizado.

¿Qué es un dispositivo WinUSB?

Un dispositivo WinUSB es un dispositivo de bus serie universal (USB) cuyo firmware define determinados descriptores de características del sistema operativo (SO) de Microsoft que notifican el identificador compatible como "WINUSB".

El propósito de un dispositivo WinUSB es permitir que Windows cargue Winusb.sys como controlador de función del dispositivo sin un archivo INF personalizado. En el caso de un dispositivo WinUSB, no es necesario distribuir archivos INF para el dispositivo, lo que simplifica el proceso de instalación del controlador para los usuarios finales. Por el contrario, si necesita proporcionar un INF personalizado, no debe definir el dispositivo como un dispositivo WinUSB y especificar el identificador de hardware del dispositivo en inf.

Microsoft proporciona Winusb.inf que contiene información necesaria para instalar Winusb.sys como controlador de dispositivo para un dispositivo USB.

Antes de Windows 8, para cargar Winusb.sys como controlador de función, era necesario proporcionar un INF personalizado. El INF personalizado especifica el identificador de hardware específico del dispositivo y también incluye secciones de Winusb.inf. Estas secciones son necesarias para crear instancias del servicio, copiar archivos binarios de bandeja de entrada y registrar un GUID de interfaz de dispositivo que las aplicaciones necesitan para encontrar el dispositivo y comunicarse con él. Para obtener información sobre cómo escribir un INF personalizado, consulte Instalación de WinUSB (Winusb.sys).

En Windows 8, el archivo Winusb.inf incorporado se ha actualizado para permitir que Windows coincida automáticamente con inf con un dispositivo WinUSB.

Instalación de dispositivos WinUSB mediante winusb.inf

En Windows 8, se ha actualizado el archivo Winusb.inf. Inf incluye una sección de instalación que hace referencia a un identificador compatible denominado "USB\MS_COMP_WINUSB".

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

El INF actualizado también incluye una nueva clase de instalación denominada "USBDevice".

La clase de instalación "USBDevice" está disponible para aquellos dispositivos para los que Microsoft no proporciona un controlador integrado. Normalmente, estos dispositivos no pertenecen a clases USB bien definidas, como Audio, Bluetooth, etc., y requieren un controlador personalizado. Si el dispositivo es un dispositivo WinUSB, lo más probable es que el dispositivo no pertenezca a una clase USB. Por lo tanto, el dispositivo debe instalarse en la clase de instalación "USBDevice". El archivo Winusb.inf actualizado facilita ese requisito.

Acerca del uso de la clase USBDevice

No use la clase de configuración "USB" para dispositivos sin clasificar. Esa clase está reservada para instalar controladores, concentradores y dispositivos compuestos. El uso erróneo de la clase "USB" puede dar lugar a problemas significativos de confiabilidad y rendimiento. En el caso de los dispositivos sin clasificar, use "USBDevice".

En Windows 8, para usar la clase de dispositivo "USBDevice", simplemente agregue esto a su INF:

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

En Administrador de dispositivos verá un nuevo nodo Usb Serial Bus dispositivos y el dispositivo aparece bajo ese nodo.

En Windows 7, además de las líneas anteriores, debes crear esta configuración del Registro en 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"

En Administrador de dispositivos, verá que el dispositivo aparece en dispositivos USB Universal Serial Bus. Sin embargo, la descripción de la clase de dispositivo se deriva de la configuración del Registro especificada en inf.

Tenga en cuenta que la clase "USBDevice" no está limitada a WinUSB. Si tiene un controlador personalizado para el dispositivo, puede usar la clase de configuración "USBDevice" en el INF personalizado.

Durante la enumeración de dispositivos, la pila del controlador USB lee el identificador compatible del dispositivo. Si el identificador compatible es "WINUSB", Windows lo usa como identificador de dispositivo y encuentra una coincidencia en el winusb.inf actualizado y, a continuación, carga Winusb.sys como controlador de función del dispositivo.

Esta imagen es para un único dispositivo MUTT de interfaz que se define como un dispositivo WinUSB y, como resultado, Winusb.sys se carga como controlador de función para el dispositivo.

Captura de pantalla de Windows Administrador de dispositivos que muestra un dispositivo WinUSB.

Para las versiones de Windows anteriores a Windows 8, winusb.inf actualizada está disponible a través de Windows Update. Si el equipo está configurado para obtener la actualización automática del controlador, el controlador WinUSB se instalará sin intervención del usuario mediante el nuevo paquete INF.

Cómo cambiar la descripción del dispositivo para un dispositivo WinUSB

Para un dispositivo WinUSB, Administrador de dispositivos muestra "Dispositivo WinUsb" como descripción del dispositivo. Esa cadena se deriva de Winusb.inf. Si hay varios dispositivos WinUSB, todos los dispositivos obtienen la misma descripción del dispositivo.

Para identificar y diferenciar de forma única el dispositivo en Administrador de dispositivos, Windows 8 proporciona una nueva propiedad en una clase de dispositivo que indica al sistema que dé prioridad a la descripción del dispositivo notificada por el dispositivo (en su descriptor de cadena iProduct) sobre la descripción de INF. La clase "USBDevice" definida en Windows 8 establece esta propiedad. En otras palabras, cuando un dispositivo está instalado en la clase "USBDevice", el sistema consulta el dispositivo para obtener una descripción del dispositivo y establece la cadena de Administrador de dispositivos en lo que se recupere en la consulta. En ese caso, se omite la descripción del dispositivo proporcionada en INF. Observe las cadenas de descripción del dispositivo: "MUTT" en la imagen anterior. El dispositivo USB proporciona la cadena en su descriptor de cadena de producto.

La nueva propiedad de clase no se admite en versiones anteriores de Windows. Para tener una descripción de dispositivo personalizada en una versión anterior de Windows, debe escribir su propio INF personalizado.

Configuración de un dispositivo WinUSB

Para identificar un dispositivo USB como un dispositivo WinUSB, el firmware del dispositivo debe tener descriptores de sistema operativo de Microsoft. Para obtener información sobre los descriptores, consulte las especificaciones que se describen aquí: Descriptores de sistema operativo de Microsoft.

Compatibilidad con descriptores de características extendidos

Para que la pila de controladores USB sepa que el dispositivo admite descriptores de características extendidos, el dispositivo debe definir un descriptor de cadena del sistema operativo almacenado en el índice de cadena 0xEE. Durante la enumeración, la pila de controladores consulta el descriptor de cadena. Si el descriptor está presente, la pila de controladores supone que el dispositivo contiene uno o varios descriptores de características del sistema operativo y los datos necesarios para recuperar esos descriptores de características.

El descriptor de cadena recuperado tiene un valor de campo bMS_VendorCode . El valor indica el código de proveedor que debe usar la pila del controlador USB para recuperar el descriptor de características extendido.

Para obtener información sobre cómo definir un descriptor de cadena del sistema operativo, vea "The OS String Descriptor" en las especificaciones que se describen aquí: Descriptores de sistema operativo de Microsoft.

Establecimiento del identificador compatible

Descriptor de características del sistema operativo de identificador compatible extendido que es necesario para que coincida con winusb.inf y cargue el módulo del controlador WinUSB.

El descriptor de características del sistema operativo de id. compatible extendido incluye una sección de encabezado seguida de una o varias secciones de función en función de si el dispositivo es un dispositivo compuesto o no compuesto. La sección de encabezado especifica la longitud del descriptor completo, el número de secciones de función y el número de versión. En el caso de un dispositivo no compuesto, el encabezado va seguido de una sección de función asociada a la única interfaz del dispositivo. El campo compatibleID de esa sección debe especificar "WINUSB" como valor de campo. En el caso de un dispositivo compuesto, hay varias secciones de función. El campo compatibleID de cada sección de función debe especificar "WINUSB".

Registro de un GUID de interfaz de dispositivo

Descriptor de características del sistema operativo de propiedades extendidas que es necesario para registrar su GUID de interfaz de dispositivo. El GUID es necesario para buscar el dispositivo desde una aplicación o servicio, configurar el dispositivo y realizar operaciones de E/S.

En versiones anteriores de Windows, el registro de GUID de interfaz de dispositivo se realiza a través del INF personalizado. A partir de Windows 8, el dispositivo debe notificar el GUID de interfaz mediante el descriptor de características del sistema operativo de propiedades extendidas.

El descriptor de características del sistema operativo de propiedades extendidas incluye una sección de encabezado seguida de una o varias secciones de propiedades personalizadas. En la sección de encabezado se describe todo el descriptor de propiedades extendidas, incluida su longitud total, el número de versión y el número de secciones de propiedades personalizadas. Para registrar el GUID de la interfaz de dispositivo, agregue una sección de propiedad personalizada que establezca el campo bPropertyName en "DeviceInterfaceGUID" y wPropertyNameLength en 40 bytes. Genere un GUID de interfaz de dispositivo único mediante un generador GUID y establezca el campo bPropertyData en ese GUID, como "{8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}". El GUID se especifica como una cadena Unicode y la longitud de la cadena es de 78 bytes (incluido el terminador null).

       
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 El valor de la propiedad es {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}.

Durante la enumeración de dispositivos, la pila del controlador USB recupera el valor DeviceInterfaceGUID de las propiedades extendidas descriptor de características del sistema operativo y registra el dispositivo en la clave de hardware del dispositivo. Una aplicación puede recuperar el valor mediante las API SetupDiXxx (consulte SetupDiOpenDevRegKey). Para obtener más información, vea Cómo acceder a un dispositivo USB mediante funciones de WinUSB.

Habilitación o deshabilitación de las características de administración de energía de WinUSB

Antes de Windows 8, para configurar las características de administración de energía de WinUSB, tenía que escribir valores de entrada del Registro en el HW. Sección AddReg de su INF personalizado.

En Windows 8 y versiones posteriores, puede especificar la configuración de energía en el dispositivo. Puede notificar valores a través del descriptor de características del sistema operativo de propiedades extendidas que habilitan o deshabilitan características en WinUSB para ese dispositivo. Hay dos características que podemos configurar: suspensión selectiva y reactivación del sistema. La suspensión selectiva permite al dispositivo entrar en estado de baja energía cuando está inactivo. La reactivación del sistema hace referencia a la capacidad de un dispositivo para reactivar un sistema cuando el sistema está en estado de bajo consumo.

Para obtener información sobre las características de administración de energía de WinUSB, consulte Administración de energía de WinUSB.

Nombre de propiedad Descripción
DeviceIdleEnabled Este valor se establece en 1 para indicar que el dispositivo puede apagarse cuando está inactivo (suspensión selectiva).
DefaultIdleState Este valor se establece en 1 para indicar que el dispositivo se puede suspender cuando está inactivo de forma predeterminada.
DefaultIdleTimeout Este valor se establece en 5000 en milisegundos para indicar la cantidad de tiempo en milisegundos que se esperarán antes de determinar que un dispositivo está inactivo.
UserSetDeviceIdleEnabled Este valor se establece en 1 para permitir al usuario controlar la capacidad del dispositivo para habilitar o deshabilitar la suspensión selectiva usb. Una casilla Permitir que el equipo desactive este dispositivo para ahorrar energía en la página de propiedades administración de energía del dispositivo y el usuario puede activar o desactivar la casilla para habilitar o deshabilitar la suspensión selectiva usb.
SystemWakeEnabled Este valor se establece en 1 para permitir al usuario controlar la capacidad del dispositivo de reactivar el sistema desde un estado de baja potencia. Cuando se habilita, la casilla Permitir que este dispositivo active el equipo aparece en la página de propiedades administración de energía del dispositivo. El usuario puede activar o desactivar la casilla para habilitar o deshabilitar la reactivación del sistema USB.

Por ejemplo, para habilitar la suspensión selectiva en el dispositivo, agregue una sección de propiedad personalizada que establezca el campo bPropertyName en una cadena Unicode, "DeviceIdleEnabled" y wPropertyNameLength en 36 bytes. Establezca el campo bPropertyData en "0x00000001". Los valores de propiedad se almacenan como enteros de 32 bits pequeños de 32 bits.

Durante la enumeración, la pila del controlador USB lee los descriptores de características de propiedades extendidas y crea entradas del Registro bajo esta clave:

HKEY_LOCAL_MACHINE\Sistema\Currentcontrolset\Enum\USB\<Parámetros de dispositivo de identificador>\<de instancia de identificador>\de dispositivo

En esta imagen se muestra la configuración de ejemplo de un dispositivo WinUSB.

Captura de pantalla del Editor del Registro de Windows que muestra la configuración de un dispositivo WinUSB.

Para obtener ejemplos adicionales, consulte las especificaciones de descriptores del sistema operativo de Microsoft.