Architettura HID
L'architettura dello stack di driver HID in Windows è basata sul driver di classe denominato hidclass.sys. I client e i minidriver di trasporto accedono al driver di classe dalla modalità utente o dalla modalità kernel.
Driver di classe HID
Il driver di classe HID fornito dal sistema è il driver di funzione WDM e il driver del bus per la classe di installazione del dispositivo HID (HIDClass). Il componente eseguibile del driver di classe HID è hidclass.sys. Il driver di classe HID è l'associazione tra client HID e vari trasporti, consentendo la scrittura di un client HID in modo indipendente dai trasporti. Questo livello di astrazione consente ai client di continuare a funzionare (senza modifiche minime) quando viene introdotto un nuovo standard o un trasporto di terze parti.
Il diagramma seguente è una rappresentazione dell'architettura HID.
Il diagramma precedente include:
- Client HID: identifica i client Windows e di terze parti e le relative interfacce.
- Driver di classe HID: eseguibile hidclass.sys .
- Minidriver di trasporto HID: identifica i trasporti di Windows e di terze parti e le relative interfacce.
Ecco il diagramma dello stack di dispositivi di un client e trasporto HID generico.
Ecco un altro diagramma dello stack di dispositivi che mostra le raccolte di tastiera e mouse HID su USB.
Client HID
I client HID sono driver, servizi o applicazioni che comunicano con HIDClass.sys e spesso rappresentano un tipo specifico di dispositivo (ad esempio, sensore, tastiera, mouse e così via). Identificano il dispositivo tramite un ID hardware o una raccolta HID specifica e comunicano con la raccolta HID tramite le indicazioni seguenti.
I driver e le applicazioni in modalità utente e i driver in modalità kernel eseguono le operazioni seguenti per gestire le raccolte HID:
- I driver e le applicazioni in modalità utente usano routine di supporto HIDClass (HidD_Xxx) per ottenere informazioni su una raccolta HID.
- I driver in modalità kernel, i driver in modalità utente e le applicazioni usano routine di supporto per l'analisi HID (HidP_Xxx) e i driver in modalità kernel usano IOCTL del driver di classe HID per gestire i report HID.
La tabella seguente semplifica le informazioni.
Modalità | Driver | Applicazioni |
---|---|---|
Modalità utente | HidD_Xxx | HidP_Xxx |
Modalità kernel | HidD_Xxx OR IOCTL_HID_xxx | N/D |
Per altre informazioni, vedere Apertura di raccolte HID.
Client HID supportati in Windows
Windows supporta le raccolte di livello superiore seguenti:
Pagina Utilizzo | Utilizzo | Note | Modalità di accesso |
---|---|---|---|
0x0001 | 0x0001 - 0x0002 | Driver di classe mouse e driver del mapper | Esclusivo |
0x0001 | 0x0004 - 0x0005 | Controller di gioco | Condiviso |
0x0001 | 0x0006 - 0x0007 | Driver di classe tastiera/tastierino | Esclusivo |
0x0001 | 0x000C | Opzione modalità di anteprima | Condiviso |
0x0001 | 0x0080 | Controlli di sistema (Alimentazione) | Condiviso |
0x000C | 0x0001 | Controlli consumer | Condiviso |
0x000D | 0x0001 | Dispositivo penna esterno | Esclusivo |
0x000D | 0x0002 | Dispositivo penna integrato | Esclusivo |
0x000D | 0x0004 | Touchscreen | Esclusivo |
0x000D | 0x0005 | Touchpad di precisione (PTP) | Esclusivo |
0x0020 | *Multiplo | Sensors | Condiviso |
0x0084 | 0x0004 | Batteria HID UPS | Condiviso |
0x008C | 0x0002 | Scanner di codice a barre (hidscanner.dll) | Condiviso |
Nella tabella precedente, la modalità di accesso per i client HID di input è esclusiva per impedire ad altri client HID di intercettare o ricevere lo stato di input globale quando non sono il destinatario di destinazione di tale input. Per motivi di sicurezza, Gestione input non elaborato (RIM) apre tutti questi dispositivi esclusivamente.
Se RIM apre un dispositivo in modalità esclusiva , l'utente può comunque aprire un'interfaccia del dispositivo HID senza richiedere autorizzazioni di lettura e scrittura e ottenere informazioni sul dispositivo HID tramite routine di supporto HIDClass (HidD_GetXxx).
La modalità di condivisione consente a più applicazioni di accedere a un dispositivo. Ad esempio, più applicazioni possono accedere a uno scanner di codice a barre per chiedere informazioni sulle funzionalità del dispositivo e recuperare le statistiche. Tuttavia, il recupero di dati decodificati da uno scanner di codice a barre viene eseguito in modalità esclusiva . Gli utilizzi vengono definiti nelle tabelle di utilizzo USB-IF.
*Multiplo: gli utilizzi dei sensori di 0x00: 0xFF vengono segmentati per scopi diversi. Ad esempio, 0x10 indica un sensore biometrico; 0x40 indica un sensore di luce. Queste allocazioni non sono contigue. Per l'elenco degli utilizzi dei sensori, vedere Definizioni di classi di dispositivi USB-IF per HID. Per informazioni sull'utilizzo dei sensori supportati in Windows, vedere Utilizzo di sensori HID.
Driver di trasporto HID
Il driver di classe HID è progettato per usare minidriver HID per accedere a un dispositivo di input hardware. Un minidriver HID astrae l'operazione specifica del dispositivo dei dispositivi di input supportati. Il minidriver HID associa l'operazione al driver di classe HID registrando con il driver di classe HID. Il driver di classe HID comunica con un minidriver HID chiamando le routine di supporto del minidriver. Il minidriver HID, a sua volta, invia le comunicazioni verso il basso lo stack di driver a un bus o a un driver di porta sottostante.
Trasporti HID supportati in Windows
Per un elenco dei trasporti HID supportati, vedere Panoramica del trasporto HID.
Il test HID generico USB in Windows Hardware Lab Kit (HLK) copre i driver HidUsb e HidClass. Non esiste alcun test HLK per minidriver HID di terze parti.