Panoramica delle classi di interfaccia del dispositivo

Qualsiasi driver di un dispositivo fisico, logico o virtuale a cui il codice in modalità utente può indirizzare le richieste di I/O deve specificare un nome per i client in modalità utente. Usando il nome, un'applicazione in modalità utente (o un altro componente di sistema) identifica il dispositivo da cui richiede L/O.

In Windows NT 4.0 e versioni precedenti del sistema operativo basato su NT i driver hanno denominato i relativi oggetti dispositivo e quindi sono stati configurati collegamenti simbolici nel Registro di sistema tra questi nomi e un nome logico Win32 visibile dall'utente.

A partire da Windows 2000, i driver non denominano oggetti dispositivo. Usano invece interfacce di dispositivo raggruppate in base alle classi dell'interfaccia del dispositivo. Una classe di interfaccia del dispositivo è un modo per esportare la funzionalità del dispositivo e del driver ad altri componenti di sistema, inclusi altri driver, nonché applicazioni in modalità utente. Un driver può registrare e abilitare un'istanza dell'interfaccia del dispositivo della classe dell'interfaccia del dispositivo per ogni oggetto dispositivo a cui possono essere inviate richieste di I/O in modalità utente. Ogni classe di interfaccia del dispositivo deve rappresentare una funzionalità concettuale che qualsiasi interfaccia del dispositivo in tale classe deve supportare o rappresentare, ad esempio un determinato contratto di I/O.

Ogni classe di interfaccia del dispositivo è associata a un GUID. Il sistema definisce GUID per le classi di interfaccia dispositivo comuni nei file di intestazione specifici del dispositivo. I fornitori possono creare classi di interfaccia dispositivo aggiuntive.

Ad esempio, tre tipi diversi di dispositivi mouse possono registrare interfacce del dispositivo membri della stessa classe di interfaccia del dispositivo, anche se una si connette tramite una porta USB, una seconda tramite una porta seriale e la terza tramite una porta infrarossa. Ogni driver registra il dispositivo come membro della classe di interfaccia GUID_DEVINTERFACE_MOUSE. Questo GUID è definito nel file di intestazione Ntddmou.h.

I driver possono registrare e abilitare le interfacce del dispositivo per un dispositivo che controllano per quante classi di interfaccia del dispositivo e del driver supportano la funzionalità per. Ad esempio, un driver per un disco che può essere montato deve essere registrato sia per la classe di interfaccia del disco (GUID_DEVINTERFACE_DISK) sia per la classe di dispositivo montabile (MOUNTDEV_MOUNTED_DEVICE_GUID).

Quando un driver registra un'istanza dell'interfaccia del dispositivo di una classe di interfaccia dispositivo, la gestione I/O associa il GUID della classe di interfaccia del dispositivo a un nome di collegamento simbolico. Il driver deve abilitarel'interfaccia del dispositivo per consentire a tale collegamento simbolico di essere utilizzabile per un driver o un'applicazione a cui inviare I/O. La registrazione del nome di collegamento persiste nell'avvio del sistema, ma l'interfaccia del dispositivo deve essere abilitata dal driver in ogni enumerazione del dispositivo. Un'applicazione che usa una determinata classe di interfaccia del dispositivo può eseguire query per le istanze delle interfacce del dispositivo in tale classe e ricevere un elenco di nomi di collegamento simbolici che rappresentano i dispositivi che supportano l'interfaccia. L'applicazione può quindi usare il nome di collegamento simbolico come destinazione per le richieste di I/O.

Non confondere le interfacce del dispositivo con le interfacce che i driver possono esportare in risposta a una richiesta di IRP_MN_QUERY_INTERFACE . Tale IRP viene usato per passare punti di ingresso di routine tra i driver in modalità kernel.