Condividi tramite


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.

Diagramma di uno stack di driver HID semplificato che mostra i client HID, il driver di classe HID e i componenti di trasporto 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.

Diagramma di uno 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 tastiera e mouse HID su USB.

Diagramma di uno stack di dispositivi HID per una tastiera e un 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.

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.