Controladores del lado host USB en Windows

En este artículo se proporciona información general sobre la arquitectura de pila de controladores del Bus serie universal (USB).

En la ilustración siguiente se muestra el diagrama de bloques arquitectónicos de la pila de controladores USB para Windows. En el diagrama se muestran pilas de controladores USB independientes para USB 2.0 y USB 3.0. Windows carga la pila de controladores USB 3.0 cuando un dispositivo está conectado a un controlador xHCI.

Diagrama de bloques arquitectónicos para pilas de controladores USB 2.0 y 3.0.

Windows carga la pila de controladores USB 2.0 para dispositivos conectados a controladores eHCI, oHCI o uHCI. La pila de controladores USB 2.0 se incluye en Windows XP con Service Pack 1 (SP1) y versiones posteriores del sistema operativo Windows.

Pila de controladores USB 3.0

Microsoft creó los controladores USB 3.0 mediante interfaces de Kernel Mode Driver Framework (KMDF). El modelo de controlador KMDF reduce la complejidad y mejora la estabilidad.

Controlador de controlador de host USB 3.0 (Usbxhci.sys)

El controlador xHCI es el controlador de host USB 3.0. Las responsabilidades del controlador xHCI incluyen la inicialización de registros MMIO y estructuras de datos basadas en memoria del host para el hardware del controlador xHCI, la asignación de solicitudes de transferencia de controladores de nivel superior a los bloques de solicitud de transferencia y el envío de las solicitudes al hardware. Después de completar una transferencia, el controlador controla los eventos de finalización de transferencia desde el hardware y propaga los eventos hasta la pila de controladores. También controla las ranuras de dispositivo del controlador xHCI y los contextos de punto de conexión.

Windows carga el controlador xHCI como objeto de dispositivo de función (FDO) en la pila de dispositivos para el controlador de host.

Extensión del controlador de host USB (Ucx01000.sys)

El controlador de extensión del controlador de host USB (una extensión a KMDF) es la nueva extensión para el controlador de controlador host específico de clase subyacente, como el controlador xHCI. El nuevo controlador es extensible y está diseñado para admitir otros tipos de controladores de controlador de host que se esperan desarrollar en el futuro. La extensión del controlador de host USB actúa como una interfaz abstracta común para el controlador de concentrador, proporciona un mecanismo genérico para poner en cola las solicitudes al controlador del controlador de host e invalida determinadas funciones seleccionadas. Todas las solicitudes de E/S iniciadas por los controladores superiores llegan al controlador de extensión del controlador de host antes del controlador xHCI. Después de recibir una solicitud de E/S, la extensión del controlador de host valida la solicitud y, a continuación, reenvía la solicitud a la cola de KMDF adecuada asociada al punto de conexión de destino. El controlador xHCI, cuando está listo para su procesamiento, recupera la solicitud de la cola. Las responsabilidades del controlador de extensión del controlador de host USB son:

  • Proporciona objetos específicos de USB al controlador xHCI.
  • Proporciona rutinas de devolución de llamada de eventos KMDF al controlador xHCI.
  • Administra y controla las operaciones del centro raíz asociado al controlador de host.
  • Implementa características configurables por el controlador de cliente, como MDL encadenadas, secuencias, etc.

Controlador del concentrador USB (Usbhub3.sys)

El nuevo controlador de concentrador, en la pila de controladores USB para dispositivos 3.0, usa el modelo de controlador KMDF. El controlador concentrador realiza principalmente estas tareas:

  • Administra los concentradores USB y sus puertos.
  • Enumera los dispositivos y otros centros conectados a sus puertos de bajada.
  • Crea objetos de dispositivo físico (PPO) para los dispositivos y concentradores enumerados.

Windows carga el controlador de concentrador como FDO en la pila de dispositivos del concentrador. La enumeración de dispositivos y la administración del concentrador en el nuevo controlador se implementan a través de un conjunto de máquinas de estado. El controlador concentrador se basa en KMDF para la administración de energía y las funciones PnP. Además de la administración del concentrador, el controlador del concentrador también realiza comprobaciones preliminares y el procesamiento de determinadas solicitudes enviadas por el nivel de controlador de cliente USB. Por ejemplo, el controlador del concentrador analiza una solicitud de configuración de selección para determinar qué puntos de conexión configurará la solicitud. Después de analizar la información, el controlador del concentrador envía la solicitud a la extensión del controlador de host USB o al procesamiento posterior.

Pila de controladores USB 2.0

Windows carga la pila de controladores USB 2.0 para dispositivos conectados a controladores eHCI, oHCI o uHCI. Los controladores de la pila de controladores USB 2.0 se incluyen en Windows XP con SP1 y versiones posteriores del sistema operativo Windows. La pila de controladores USB 2.0 está diseñada para facilitar dispositivos USB de alta velocidad, tal como se define en la especificación USB 2.0.

En la parte inferior de la pila del controlador USB se encuentra el controlador del controlador host. Consta del controlador de puerto, Usbport.sys y uno o varios de tres controladores de minipuerto que se ejecutan simultáneamente. Cuando el sistema detecta hardware del controlador de host, carga uno de estos controladores de minipuerto. El controlador de minipuerto, después de cargarlo, carga el controlador de puerto, Usbport.sys. El controlador de puerto controla los aspectos de las tareas del controlador de host que son independientes del protocolo específico.

El controlador de miniporte Usbuhci.sys (interfaz del controlador de host universal) reemplaza al controlador de miniclase Uhcd.sys que se incluye con Windows 2000. El controlador de miniporte Usbohci.sys (interfaz del controlador host abierto) reemplaza Openhci.sys. El controlador de miniporte de Usbehci.sys admite dispositivos USB de alta velocidad y se introdujo en Windows XP con SP1 y versiones posteriores y windows Server 2003 y sistemas operativos posteriores.

En todas las versiones de Windows que admiten USB 2.0, el sistema operativo es capaz de administrar los controladores de host USB 1.1 y USB 2.0 simultáneamente. Cada vez que el sistema operativo detecta que ambos tipos de controlador están presentes, crea dos nodos de dispositivo independientes, uno para cada controlador de host. Windows carga posteriormente el controlador de miniporte de Usbehci.sys para el hardware del controlador de host compatible con USB 2.0 y Usbohci.sys o Openhci.sys para el hardware compatible con USB 1.1, en función de la configuración del sistema.

Encima del controlador de puerto es el controlador del bus USB, Usbhub.sys, también conocido como controlador del concentrador. Este es el controlador de dispositivo para cada centro del sistema.

Controlador primario genérico de clase común USB (Usbccgp.sys)

El controlador primario genérico de clase común USB es el controlador primario proporcionado por Microsoft para dispositivos compuestos. El controlador concentrador enumera y carga el controlador compuesto primario si deviceClass es 0 o 0xef y numInterfaces es mayor que 1 en el descriptor de dispositivo. El controlador de concentrador genera el identificador compatible para el controlador compuesto primario como "USB\COMPOSITE". Usbccgp.sys usa rutinas de Windows Driver Model (WDM).

El controlador compuesto primario enumera todas las funciones de un dispositivo compuesto y crea un PDO para cada una. Esto hace que la clase o el controlador cliente adecuados se carguen para cada función del dispositivo. Cada controlador de función (PDO secundario) envía solicitudes al controlador primario, que los envía al controlador del concentrador USB.

Usbccgp.sys se incluye con Windows XP con SP1 y versiones posteriores del sistema operativo Windows. En Windows 8, el controlador se ha actualizado para implementar las características de suspensión de funciones y reactivación remota, tal como se define en la especificación USB 3.0.

Para obtener más información, vea Usb Generic Parent Driver (Usbccgp.sys) (Controlador primario genérico USB [Usbccgp.sys]).

WinUSB (Winusb.sys)

Windows USB (WinUSB) es un controlador genérico proporcionado por Microsoft para dispositivos USB. La arquitectura de WinUSB consta de un controlador en modo kernel (Winusb.sys) y una biblioteca de vínculos dinámicos en modo de usuario (Winusb.dll). En el caso de los dispositivos que no requieren un controlador de función personalizado, Winusb.sys se puede instalar en la pila del modo kernel del dispositivo como controlador de función. A continuación, los procesos en modo de usuario pueden comunicarse con Winusb.sys mediante un conjunto de solicitudes de control de E/S de dispositivo o llamando a WinUsb_Xxx funciones. Para obtener más información, consulte WinUSB.

En Windows 8, el archivo de información (INF) proporcionado por Microsoft para WinUSB, Winusb.inf, contiene USB\MS_COMP_WINUSB como una cadena de identificador de dispositivo. Esto permite que Winusb.sys se carguen automáticamente como controlador de funciones para aquellos dispositivos que tengan un identificador compatible con WinUSB coincidente en el descriptor del sistema operativo MS. Estos dispositivos se denominan dispositivos WinUSB. Los fabricantes de hardware no son necesarios para distribuir un archivo INF para su dispositivo WinUSB, lo que simplifica el proceso de instalación del controlador para el usuario final. Para obtener más información, consulte Dispositivo WinUSB.

Controlador de cliente USB

Cada dispositivo USB, compuesto o no compuesto, se administra mediante un controlador cliente. Un controlador de cliente USB es un controlador de clase o dispositivo que es un cliente de la pila de controladores USB. Estos controladores incluyen controladores específicos de la clase y del dispositivo de Microsoft o de un proveedor de terceros. Para ver una lista de controladores de clase proporcionados por Microsoft, consulte Controladores para las clases de dispositivo USB compatibles. Un controlador cliente crea solicitudes para comunicarse con el dispositivo mediante una llamada a interfaces públicas expuestas por la pila de controladores USB.

Un controlador de cliente para un dispositivo compuesto no es diferente de un controlador cliente para un dispositivo no compuesto, excepto su ubicación en la pila de controladores.

Un controlador de cliente para un dispositivo no compuesto se superpone directamente sobre el controlador del concentrador.

Para un dispositivo USB compuesto que expone varias funciones y no tiene un controlador de clase primario, Windows carga el controlador primario genérico USB (Usbccgp.sys) entre el controlador de concentrador y la capa de controlador de cliente. El controlador primario crea un PDO independiente para cada función de un dispositivo compuesto. Los controladores de cliente (FDO para funciones) se cargan encima del controlador primario genérico. Los proveedores pueden optar por proporcionar un controlador de cliente independiente para cada función.

Un controlador de cliente USB puede ejecutarse en modo de usuario o en modo kernel, en función de los requisitos del controlador. Los controladores de cliente USB se pueden escribir mediante rutinas KMDF, UMDF o WDM.

Bibliotecas auxiliares para controladores de cliente

Microsoft proporciona las siguientes bibliotecas auxiliares para ayudar a los controladores y aplicaciones en modo kernel a comunicarse con la pila de controladores USB:

  • Usbd.sys

    Microsoft proporciona la biblioteca de Usbd.sys que exporta rutinas para controladores de cliente USB. Las rutinas auxiliares simplifican las tareas operativas de un controlador cliente. Por ejemplo, mediante las rutinas auxiliares, un controlador de cliente USB puede crear bloques de solicitudes USB (URB) para determinadas operaciones específicas, como seleccionar una configuración y enviar esas direcciones URL a la pila de controladores USB.

  • Usbdex.lib

    Esta biblioteca auxiliar es nueva para Windows 8. La biblioteca exporta rutinas principalmente para asignar y compilar direcciones URL. Esas rutinas reemplazan algunas de las rutinas heredadas exportadas por Usbd.sys. Las nuevas rutinas requieren que el controlador cliente se registre con la pila del controlador USB, que mantiene el identificador para el registro. Ese identificador se usa para las llamadas a otras rutinas usbdex.lib. Algunas direcciones URL asignadas por las nuevas rutinas tienen un contexto URB que el controlador USB usa para un mejor seguimiento y procesamiento. Para obtener más información, vea Asignar y compilar direcciones URL.

  • Winusb.dll

    Winusb.dll es un archivo DLL en modo de usuario que expone funciones de WinUSB para comunicarse con Winusb.sys, que se carga como controlador de funciones de un dispositivo en modo kernel. Las aplicaciones usan estas funciones para configurar el dispositivo, recuperar información sobre el dispositivo y realizar operaciones de E/S. Para obtener información sobre el uso de estas funciones, vea Cómo acceder a un dispositivo USB mediante funciones winUSB.