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 configurazione 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. In questo modo un client HID può essere scritto in modo indipendente dai trasporti. Questo livello di astrazione consente ai client di continuare a funzionare (con poche modifiche) quando viene introdotto un nuovo standard o un trasporto di terze parti.

Di seguito è riportata una rappresentazione architetturale.

stack di driver nascosto semplificato, che mostra i client nascosti, il driver di classe hid e i componenti di trasporto nascosti.

Il diagramma precedente include quanto segue:

  • Client HID: identifica i client Windows e di terze parti e le relative interfacce.
  • Driver di classe HID: hidclass.sys eseguibile.
  • Minidriver 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.

Stack di dispositivi HID per un client e un trasporto HID generici.

Ecco un altro diagramma dello stack di dispositivi che mostra le raccolte di mouse e tastiera HID su USB.

Stack di dispositivi HID per una tastiera e il mouse 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.

Driver e applicazioni in modalità utente e driver in modalità kernel, eseguire 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 è una semplificazione delle informazioni elencate in precedenza.

Mode 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 primo livello seguenti:

Pagina Utilizzo Utilizzo Windows 7 Windows 8 Windows 10 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 del tastierino e del mapper Esclusivo
0x0001 0x000C No Opzione modalità di anteprima Condiviso
0x0001 0x0080 Controlli di sistema (alimentazione) Condiviso
0x000C 0x0001 Sì (sia per Windows 10 che per Windows 10 Mobile) Controlli consumer Condiviso (sia per Windows 10 che per Windows 10 Mobile)
0x000D 0x0001 Dispositivo penna esterno Esclusivo
0x000D 0x0002 Dispositivo penna integrato Esclusivo
0x000D 0x0004 Touchscreen Esclusivo
0x000D 0x0005 No Touchpad precisione (PTP) Esclusivo
0x0020 *Più No Sensori Condiviso
0x0084 0x0004 Batteria HID UPS Condiviso
0x008C 0x0002 No Sì (Windows 8.1 e versioni successive) 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 tale input di destinazione. Per motivi di sicurezza, Gestione input non elaborato (RIM) apre esclusivamente tutti questi dispositivi.

Se un dispositivo viene aperto in modalità esclusiva da RIM, 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 richiedere informazioni sulle funzionalità del dispositivo e recuperare le statistiche. Tuttavia, il recupero dei dati decodificati da uno scanner di codice a barre viene eseguito in modalità esclusiva . Gli utilizzi sono definiti dalle tabelle di utilizzo USB-IF.

*Multiplo: l'utilizzo dei sensori da 0x00 : 0xFF vengono segmentati per scopi diversi. Ad esempio 0x10 indica un sensore biometrico; 0x40 indica un sensore di luce. Tali allocazioni non sono contigue. Per l'elenco degli utilizzi dei sensori, vedere Definizioni della classe di dispositivi USB-IF per HID. Per informazioni sull'utilizzo dei sensori supportati in Windows, 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 un driver di porta sottostante.

Trasporti HID supportati in Windows

Vedere questa pagina per un elenco dei trasporti HID supportati.

Il test HID generico USB in Windows Hardware Lab Kit (HLK) copre i driver HidUsb e HidClass. Non esiste alcun test HLK per i mini driver HID di terze parti.