Arquitectura y módulos de WinUSB
WinUSB consta de dos componentes principales:
- Winusb.sys es un controlador en modo kernel que se puede instalar como un controlador de filtro o función, encima de los controladores de protocolo en la pila de dispositivos en modo kernel de un dispositivo USB.
- Winusb.dll es un archivo DLL en modo de usuario que expone funciones de WinUSB. Las aplicaciones pueden usar estas funciones para comunicarse con Winusb.sys cuando se instala como controlador de funciones de un dispositivo.
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. Los procesos en modo de usuario pueden comunicarse con Winusb.sys mediante un conjunto de solicitudes de control de E/S de dispositivo o mediante una llamada a las funciones de WinUSB.
En la ilustración siguiente se muestra una pila de controladores USB que contiene varias instancias de Winusb.sys.
En la ilustración anterior se muestra un ejemplo de configuración de WinUSB que implementa tres clases de interfaz de dispositivo, cada una de las cuales tiene una única interfaz de dispositivo registrada:
- La instancia 1 de Winusb.sys registra la interfaz de dispositivo A, que admite un controlador en modo de usuario (Usboem.dll).
- La instancia 2 de Winusb.sys registra la interfaz de dispositivo B, que admite un controlador en modo de usuario para un escáner (Usbscan.exe) que se comunica con Winusb.dll mediante un servicio del sistema (SVCHOST).
- La instancia 3 de Winusb.sys registra la interfaz de dispositivo C, que admite una utilidad de actualización de firmware (Usbfw.exe).
Hay exactamente una instancia cargada de Winusb.sys. Un objeto de dispositivo físico (PDO) puede representar un dispositivo no compatible (instancia 1 del diagrama) o puede representar una interfaz o una colección de interfaces en un dispositivo compuesto (instancias 2 y 3). En el caso de los dispositivos de clase de dispositivo de comunicación móvil inalámbrica USB (WMCDC), un PDO puede incluso representar varias colecciones de interfaces. (Para obtener más información sobre los PDO para dispositivos WMCDC, consulte Compatibilidad con la clase de dispositivo de comunicación móvil inalámbrica).
Cualquier aplicación en modo de usuario puede comunicarse con la pila USB cargando la biblioteca de vínculos dinámicos de WinUSB (Winusb.dll) y llamando a las funciones de WinUSB expuestas por este módulo.