Compartir a través de


Dispositivo WinUSB

En este artículo se describe cómo Windows reconoce un dispositivo WinUSB. Los fabricantes y los proveedores de hardware independientes (IHV) pueden usar la información de este artículo para desarrollar un dispositivo que use Winusb.sys como controlador de funciones. En este artículo se muestra cómo cargar el controlador automáticamente sin tener que proporcionar un archivo de información personalizada (INF).

¿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 informan WINUSB como identificador compatible.

El propósito de un dispositivo WinUSB es permitir que Windows cargue Winusb.sys como controlador de funciones 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 hace que el proceso de instalación del controlador sea sencillo para los usuarios finales. Por el contrario, si necesita proporcionar un INF personalizado, no debe definir el dispositivo como WinUSB y especificar el identificador de hardware del dispositivo en el INF.

Microsoft proporciona un archivo 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 funciones, 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 integradas. 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 más información, consulte Redacción de un INF personalizado para la instalación de WinUSB.

En Windows 8, el archivo Winusb.inf se actualiza para que Windows vincule automáticamente el archivo INF con un dispositivo WinUSB.

Instalación de dispositivos WinUSB mediante winusb.inf

En Windows 8, el archivo Winusb.inf incluido se actualiza. El 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 configuración denominada USBDevice.

La clase de instalación USBDevice está disponible para los dispositivos para los que Microsoft no proporciona un controlador integrado. Normalmente, estos dispositivos no pertenecen a clases USB bien definidas, como Audio o Bluetooth, 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. El dispositivo debe instalarse en la clase de instalación USBDevice. 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 provocar problemas significativos de confiabilidad y rendimiento. Use USBDevice para dispositivos sin clasificar.

En Windows 8, agregue esta definición al archivo INF para usar la clase de dispositivo USBDevice:

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

En el Administrador de dispositivos, consulte un nuevo nodo denominado dispositivos USB Universal Serial Bus. El dispositivo aparece bajo ese nodo.

En Windows 7, además de las líneas anteriores, debes crear esta configuración del registro en el 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 el Administrador de dispositivos, el dispositivo aparece en Dispositivos USB Universal Serial Bus. La descripción de la clase de dispositivo se deriva de la configuración del registro especificada en su INF.

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

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

Esta imagen es para un dispositivo de Microsoft USB Test Tool (MUTT) de interfaz única, que se define como un dispositivo WinUSB y, como resultado, Winusb.sys se carga como el controlador funcional para el dispositivo.

Captura de pantalla del Administrador de dispositivos Windows 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 del controlador automáticamente, el controlador WinUSB se instala sin intervención del usuario mediante el nuevo paquete INF.

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

En el caso de un dispositivo WinUSB, el Administrador de dispositivos se muestra WinUsb Device como la 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 el Administrador de dispositivos, Windows 8 proporciona una nueva propiedad en una clase de dispositivo. La propiedad 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.

Cuando se instala un dispositivo en la clase de dispositivo USB, Windows consulta al dispositivo para obtener una descripción del dispositivo y establece la cadena en el Administrador de dispositivos según lo que se recupere en la consulta. En ese caso, se omite la descripción del dispositivo proporcionada en el 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 del sistema operativo De Microsoft. Para obtener más información, consulte Descriptores de SO de Microsoft para dispositivos USB.

Compatibilidad con descriptores de características extendidos

Para que la pila de controladores USB conozca que el dispositivo admite descriptores de características extendidos, el dispositivo debe definir un descriptor de cadena del sistema operativo almacenado en el índice 0xEE de cadena. 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 extendidas.

Para definir un descriptor de cadena de un sistema operativo, consulte los descriptores de SO de Microsoft para dispositivos USB.

Establecimiento del identificador compatible

Se requiere un descriptor de características del sistema operativo con un identificador compatible extendido para que coincida con el archivo incorporado Winusb.inf y cargar el módulo del controlador WinUSB.

El descriptor de características del sistema operativo de identificador compatible extendido incluye una sección de encabezado seguida de una o varias secciones de función, en función de si el dispositivo está compuesto o no. 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 compatible, 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 especificarse WINUSB como valor de campo. Para 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

Para registrar su GUID de interfaz de dispositivo, se requiere un descriptor de características de propiedades extendidas del sistema operativo. 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 la GUID de la interfaz del 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 el descriptor de propiedades extendidas completo, 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 a 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 del descriptor de características del sistema operativo en las propiedades extendidas 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, consulte Acceso a un dispositivo USB mediante funciones 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ías que escribir valores de entrada del Registro en la sección HW.AddReg de tu INF personalizado.

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

Para obtener más información, consulte Administración de energía de WinUSB.

Nombre de propiedad Descripción
DispositivoInactivoHabilitado Este valor se establece en 1 para indicar que el dispositivo puede apagarse cuando está inactivo (suspensión selectiva).
EstadoInactivoPredeterminado Este valor se establece en 1 para indicar que el dispositivo se puede suspender cuando está inactivo de forma predeterminada.
TiempoDeInactividadPredeterminado Este valor se establece en 5000 en milisegundos para indicar la cantidad de tiempo en milisegundos que se debe esperar 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. Hay 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. Los usuarios pueden habilitar o deshabilitar la suspensión selectiva de USB.
ActivaciónDelSistemaHabilitada Este valor se establece en 1 para permitir al usuario controlar la capacidad del dispositivo de reactivar el sistema desde un estado de bajo consumo. Cuando está habilitada, 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 habilitar o deshabilitar el despertar del sistema USB.

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

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\System\CurrentControlSet\Enum\USB\<Identificador de dispositivo>\<Identificador de instancia>\Parámetros 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 más ejemplos, consulte Descriptores del sistema operativo de Microsoft.