Geräteinformationsgruppen

Im Benutzermodus werden Geräte, die zu Gerätesetupklassen oder Geräteschnittstellenklassen gehö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 auf den 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 Elemente einer Setupklasse beschreibt, verweist das Element möglicherweise nicht auf Geräteschnittstellen, da Setupklassenmember nicht notwendigerweise einer Schnittstelle zugeordnet sind.

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

Diagramm, das einen Geräteinformationssatz veranschaulicht.

Erstellen eines Geräteinformationsgruppen

Nach dem Erstellen eines Geräteinformationssatzes mit SetupDiCreateDeviceInfoList können Geräteinformationselemente mit SetupDiCreateDeviceInfo einzeln erstellt und der Liste 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.

Auflisten von Geräteinformationen

Nachdem ein Geräteinformationssatz erstellt wurde, können sowohl die Geräte als auch die Geräteschnittstellen aufgelistet werden, die zur Gruppe gehören, aber für jeden Enumerationstyp sind unterschiedliche Vorgänge erforderlich. SetupDiEnumDeviceInfo listet alle Geräte auf, die zum Informationssatz gehören und bestimmte Kriterien erfüllen. 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, und ein Instance-Handle des Geräts, das auf den Devnode für das Gerät 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 verwendet werden, um die Schnittstellen im Geräteinformationssatz aufzulisten.

Rufen Sie SetupDiEnumDeviceInterfaces auf, um die Geräteschnittstellen in einem Geräteinformationssatz aufzulisten. Diese Routine durchläuft alle Geräteinformationselemente im Geräteinformationssatz, extrahiert die Schnittstellen in der Schnittstellenliste jedes Elements und gibt eine Schnittstelle mit jedem Aufruf zurück. Wenn SetupDiEnumDeviceInterfaces eine SP_DEVINFO_DATA-Struktur als Eingabe im zweiten Parameter übergeben wird, wird die Enumeration nur auf die Schnittstellen beschränkt, die dem von 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 mit codierten Informationen, die zum Abrufen des Namens der Schnittstelle verwendet werden können. Zum Abrufen des Schnittstellennamens 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.