Freigeben über


Geräteinformationssätze

Im Benutzermodus werden Geräte, die entweder Gerätesetupklassen oder Geräteschnittstellenklassen angehören, mithilfe von Geräteinformationselementen und Geräteinformationssätzen verwaltet. Ein Geräteinformationssatz besteht aus Geräteinformationselementen für alle Geräte, die zu einer Geräteeinrichtungsklasse oder Geräteschnittstellenklasse gehören.

Jedes Geräteinformationselement enthält ein Handle für die Devnode des Geräts und einen Zeiger auf eine verknüpfte Liste aller Geräteschnittstellen, die dem von diesem Element beschriebenen Gerät zugeordnet sind. Wenn ein Geräteinformationssatz Mitglieder einer Setup-Klasse beschreibt, verweist das Element möglicherweise nicht auf Geräteschnittstellen, da Mitglieder einer Setup-Klasse nicht unbedingt einer Schnittstelle zugeordnet sind.

Das folgende Diagramm zeigt die interne Struktur eines Geräteinformationssatzes.

Diagramm, das einen Geräteinformationssatz veranschaulicht.

Erstellen eines Geräteinformationssatzes

Nach dem Erstellen eines Geräteinformationssatzes mit SetupDiCreateDeviceInfoList können Geräteinformationselemente erstellt und der Liste einzeln mithilfe von SetupDiCreateDeviceInfo hinzugefügt werden. Alternativ kann SetupDiGetClassDevs aufgerufen werden, um einen Geräteinformationssatz zu erstellen, der aus allen Geräten besteht, die einer angegebenen Gerätesetupklasse oder Geräteschnittstellenklasse zugeordnet sind.

Aufzählen von Geräteinformationen

Nachdem ein Geräteinformationssatz erstellt wurde, können sowohl die Geräte als auch die Geräteschnittstellen, die zum Satz gehören, aufgezählt werden, aber für jeden Enumerationstyp sind unterschiedliche Vorgänge erforderlich. SetupDiEnumDeviceInfo listet alle Geräte auf, die zu dem Informationssatz gehören, der bestimmte Kriterien erfüllt. Jeder Aufruf von SetupDiEnumDeviceInfo extrahiert eine SP_DEVINFO_DATA Struktur, die ungefähr einem Geräteinformationselement entspricht. SP_DEVINFO_DATA enthält die GUID der Klasse, zu der das Gerät gehört, sowie eine Geräteinstanz, die auf den devnode des Geräts verweist. Der Hauptunterschied zwischen einer SP_DEVINFO_DATA-Struktur und einem vollständigen Geräteelement besteht darin, dass SP_DEVINFO_DATA nicht die verknüpfte Liste der Schnittstellen enthält, die dem Gerät zugeordnet sind. Daher kann SetupDiEnumDeviceInfo nicht zum Aufzählen der Schnittstellen im Geräteinformationssatz verwendet werden.

Rufen Sie SetupDiEnumDeviceInterfaces auf, um die Geräteschnittstellen in einem Geräteinformationssatz aufzurufen. Diese Routine führt alle Geräteinformationselemente im Geräteinformationssatz durch, extrahiert die Schnittstellen in der Schnittstellenliste der einzelnen Elemente und gibt eine Schnittstelle mit jedem Aufruf zurück. Wenn SetupDiEnumDeviceInterfaces eine SP_DEVINFO_DATA Struktur als Eingabe im zweiten Parameter übergeben wird, schränkt sie die Enumeration nur auf die Schnittstellen ein, die dem durch SP_DEVINFO_DATA angegebenen Gerät zugeordnet sind.

SetupDiEnumDeviceInterfaces gibt eine SP_DEVICE_INTERFACE_DATA Struktur zurück. SP_DEVICE_INTERFACE_DATA enthält die GUID der Schnittstellenklasse und andere Informationen zur Schnittstelle, einschließlich eines reservierten Felds, das codierte Informationen enthält, die zum Abrufen des Namens der Schnittstelle verwendet werden können. Um den Schnittstellennamen abzurufen, ist ein weiterer Schritt erforderlich: SetupDiGetDeviceInterfaceDetail muss aufgerufen werden. SetupDiGetDeviceInterfaceDetail gibt eine Struktur vom Typ SP_DEVICE_INTERFACE_DETAIL_DATA zurück, die den Pfad in der Systemobjektstruktur enthält, die die Schnittstelle definiert.