Set di informazioni sul dispositivo

In modalità utente, i dispositivi che appartengono a classi di configurazione del dispositivo o classi di interfaccia del dispositivo vengono gestiti usando elementi di informazioni sul dispositivo e set di informazioni sul dispositivo. Un set di informazioni sul dispositivo è costituito da elementi di informazioni sul dispositivo per tutti i dispositivi appartenenti a una classe di configurazione del dispositivo o a una classe dell'interfaccia del dispositivo.

Ogni elemento di informazioni sul dispositivo contiene un handle per il nodo devnode del dispositivo e un puntatore a un elenco collegato di tutte le interfacce del dispositivo associate al dispositivo descritto da tale elemento. Se un set di informazioni sul dispositivo descrive i membri di una classe di installazione, l'elemento potrebbe non puntare ad alcuna interfaccia del dispositivo, poiché i membri della classe di installazione non sono necessariamente associati a un'interfaccia.

Il diagramma seguente illustra la struttura interna di un set di informazioni sul dispositivo.

diagramma che illustra un set di informazioni sul dispositivo.

Creazione di un set di informazioni sul dispositivo

Dopo aver creato un set di informazioni sul dispositivo con SetupDiCreateDeviceInfoList, è possibile creare e aggiungere elementi di informazioni sul dispositivo all'elenco uno alla volta usando SetupDiCreateDeviceInfo. In alternativa, è possibile chiamare SetupDiGetClassDevs per creare un set di informazioni sul dispositivo composto da tutti i dispositivi associati a una classe di configurazione del dispositivo o a una classe di interfaccia del dispositivo specificata.

Enumerazione delle informazioni sul dispositivo

Dopo aver creato un set di informazioni sul dispositivo, è possibile enumerare sia i dispositivi che le interfacce del dispositivo appartenenti al set, ma sono necessarie operazioni diverse per ogni tipo di enumerazione. SetupDiEnumDeviceInfo enumera tutti i dispositivi che appartengono al set di informazioni che soddisfano determinati criteri. Ogni chiamata a SetupDiEnumDeviceInfo estrae una struttura SP_DEVINFO_DATA che corrisponde approssimativamente a un elemento informazioni sul dispositivo. SP_DEVINFO_DATA contiene il GUID della classe a cui appartiene il dispositivo e un handle di istanza del dispositivo che punta al nodo devnode per il dispositivo. La differenza principale tra una struttura SP_DEVINFO_DATA e un elemento del dispositivo completo è che SP_DEVINFO_DATA non contiene l'elenco collegato di interfacce associate al dispositivo. Pertanto , SetupDiEnumDeviceInfo non può essere usato per enumerare le interfacce nel set di informazioni sul dispositivo.

Per enumerare le interfacce del dispositivo in un set di informazioni sul dispositivo, chiamare SetupDiEnumDeviceInterfaces. Questa routine illustra tutti gli elementi di informazioni sul dispositivo nel set di informazioni sul dispositivo, estrae le interfacce nell'elenco di interfacce di ogni elemento e restituisce un'interfaccia con ogni chiamata. Se SetupDiEnumDeviceInterfaces passa una struttura SP_DEVINFO_DATA come input nel secondo parametro, vincola l'enumerazione solo a quelle associate al dispositivo indicato da SP_DEVINFO_DATA.

SetupDiEnumDeviceInterfaces restituisce una struttura SP_DEVICE_INTERFACE_DATA . SP_DEVICE_INTERFACE_DATA contiene il GUID della classe di interfaccia e altre informazioni sull'interfaccia, incluso un campo riservato con informazioni codificate che possono essere usate per ottenere il nome dell'interfaccia. Per ottenere il nome dell'interfaccia, è necessario un ulteriore passaggio: è necessario chiamare SetupDiGetDeviceInterfaceDetail . SetupDiGetDeviceInterfaceDetail restituisce una struttura di tipo SP_DEVICE_INTERFACE_DETAIL_DATA che contiene il percorso nell'albero degli oggetti di sistema che definisce l'interfaccia.