Architecture et modules de WinUSB
WinUSB se compose de deux éléments principaux :
- Winusb.sys est un pilote en mode noyau qui peut être installé en tant que pilote de filtre ou de fonction, au-dessus des pilotes de protocole dans la pile de périphériques en mode noyau d'un appareil USB.
- Winusb.dll est une DLL en mode utilisateur qui expose les fonctions WinUSB. Les applications peuvent utiliser ces fonctions pour communiquer avec Winusb.sys lorsqu'il est installé en tant que pilote de fonction d'un appareil.
Pour les appareils qui ne nécessitent pas de pilote de fonction personnalisé, Winusb.sys peut être installé dans la pile en mode noyau de l'appareil en tant que pilote de fonction. Les processus en mode utilisateur peuvent alors communiquer avec Winusb.sys en utilisant un ensemble de requêtes de contrôle d'E/S de l'appareil ou en appelant les fonctions WinUSB.
La figure suivante montre une pile de pilotes USB contenant plusieurs instances de Winusb.sys.
La figure précédente montre un exemple de configuration WinUSB qui met en œuvre trois classes d'interface d'appareil, chacune ayant une seule interface d'appareil enregistrée :
- L'instance 1 de Winusb.sys enregistre l'interface d'appareil A, qui prend en charge un pilote en mode utilisateur (Usboem.dll).
- L'instance 2 de Winusb.sys enregistre l'interface d'appareil B, qui prend en charge un pilote en mode utilisateur pour un scanner (Usbscan.exe) qui communique avec Winusb.dll en utilisant un service système (SVCHOST).
- L'instance 3 de Winusb.sys enregistre l'interface de l'appareil C, qui prend en charge un utilitaire de mise à jour du microprogramme (Usbfw.exe).
Il y a exactement une instance chargée de Winusb.sys. Un objet périphérique physique (PDO) peut représenter un appareil non composite (instance 1 dans le diagramme) ou une interface ou une collection d'interfaces sur un appareil composite (instances 2 et 3). Pour les appareils de la classe des appareils de communication mobile sans fil USB (WMCDC), un PDO peut même représenter plusieurs collections d'interfaces. (Pour plus d'informations sur les PDO pour les appareils WMCDC, voir Prise en charge de la classe des appareils de communication mobile sans fil).
Toute application en mode utilisateur peut communiquer avec la pile USB en chargeant la bibliothèque de liens dynamiques WinUSB (Winusb.dll) et en appelant les fonctions WinUSB exposées par ce module.