Architettura e moduli WinUSB
WinUSB è costituito da due componenti principali:
- Winusb.sys è un driver in modalità kernel che può essere installato come driver di filtro o funzione, sopra i driver di protocollo nello stack di dispositivi in modalità kernel di un dispositivo USB.
- Winusb.dll è una DLL in modalità utente che espone funzioni WinUSB. Le applicazioni possono usare queste funzioni per comunicare con Winusb.sys quando viene installato come driver di funzione di un dispositivo.
Per i dispositivi che non richiedono un driver di funzione personalizzato, Winusb.sys può essere installato nello stack in modalità kernel del dispositivo come driver di funzione. I processi in modalità utente possono quindi comunicare con Winusb.sys usando un set di richieste di controllo di I/O del dispositivo o chiamando funzioni WinUSB.
La figura seguente mostra uno stack di driver USB che contiene diverse istanze di Winusb.sys.
La figura precedente mostra un esempio di configurazione WinUSB che implementa tre classi di interfaccia dispositivo, ognuna delle quali ha un'unica interfaccia del dispositivo registrata:
- L'istanza 1 di Winusb.sys registra l'interfaccia del dispositivo A, che supporta un driver in modalità utente (Usboem.dll).
- L'istanza 2 di Winusb.sys registra l'interfaccia del dispositivo B, che supporta un driver in modalità utente per uno scanner (Usbscan.exe) che comunica con Winusb.dll usando un servizio di sistema (SVCHOST).
- L'istanza 3 di Winusb.sys registra l'interfaccia del dispositivo C, che supporta un'utilità di aggiornamento del firmware (Usbfw.exe).
Esiste esattamente un'istanza caricata di Winusb.sys. Un oggetto dispositivo fisico (PDO) può rappresentare un dispositivo noncomposito (istanza 1 nel diagramma) oppure può rappresentare un'interfaccia o una raccolta di interfacce in un dispositivo composito (istanze 2 e 3). Per i dispositivi WMCDC (Wireless Mobile Communication Device Class) USB, un PDO può anche rappresentare diverse raccolte di interfacce. Per altre informazioni sui PDO per i dispositivi WMCDC, vedere Supporto per la classe di dispositivi di comunicazione mobile wireless.
Qualsiasi applicazione in modalità utente può comunicare con lo stack USB caricando la libreria di collegamento dinamico WinUSB (Winusb.dll) e chiamando le funzioni WinUSB esposte da questo modulo.