Laut MSDN-Dokumentation kann SetupDiGetClassDevs eine device instance ID geleitet werden, um eine device information set für ein bestimmtes Gerät zu erhalten:Funktioniert SetupDiGetClassDevs mit Geräteinstanz-IDs wie dokumentiert?
Um nur ein bestimmtes Gerät zurückgeben, setzen die DIFCF_DEVICEINTERFACE Flagge und verwenden der Enumerator Parameter die zu liefern Geräteinstanz-ID des Geräts.
ich das Gerät Instanz-ID durch den symbolischen Namen aus dem WM_DEVICECHANGE
Nachricht DBT_DEVICEARRIVAL
Ereignisse Parsen, und ich habe die resultierende ID verifiziert, indem sie es zu, dass zurück von SetupDiGetDeviceInstanceId vergleichen. Selbst das Übergeben der vom Betriebssystem bereitgestellten Geräteinstanz-ID funktioniert nicht (d. H. Der Aufruf von SetupDiGetClassDevs schlägt mit ERROR_INVALID_PARAMETER
fehl).
Meine aktuelle Problemumgehung zum Abrufen einer SP_DEVINFO_DATA
Struktur für das neu eintreffende Gerät ist, alle Geräte in der gleichen Klasse aufzuzählen und das Ergebnis von SetupDiGetDeviceInstanceId mit dem symbolischen Namen zu vergleichen. Allerdings sehe ich nicht, warum dies gemäß der Dokumentation erforderlich sein sollte ...
Hat jemand SetupDiGetClassDevs auf diese Weise arbeiten? Gibt es eine bessere Methode, um weitere Informationen für ein Gerät zu erhalten, das Daten im Ereignis DBT_DEVICEARRIVAL verwendet?
Die DIGCF_DEVICEINTERFACE | DIGCF_ALLCLASSES war der fehlende Teil für mich. Aus MSDN-Dokumentation habe ich verstanden, dass nur DIGCF_DEVICEINTERFACE notwendig war, aber das gab Fehler 87 (schlechte Argumente). – angularsen