Laut der MSDN-Dokumentation kann SetupDiGetClassDevs an Device-Instanz-ID , um eine Geräteinformationssatz für ein bestimmtes Gerät:
Um nur ein bestimmtes Gerät zurückzugeben, legen Sie fest das DIFCF_DEVICEINTERFACE-Flag und verwenden der Enumerator-Parameter zur Bereitstellung der Geräteinstanz-ID des Geräts.
Ich erhalte die Geräteinstanz-ID, indem ich den symbolischen Namen von WM_DEVICECHANGE
analysiere. Nachricht DBT_DEVICEARRIVAL
Ereignis, und ich habe das überprüft ID, indem Sie sie mit der von SetupDiGetDeviceInstanceId zurückgegebenen ID 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, um eine SP_DEVINFO_DATA
Struktur für das neu angekommene Gerät abzurufen Auflisten aller Geräte in derselben Klasse und Vergleichen des Ergebnisses von SetupDiGetDeviceInstanceId mit dem symbolischen Namen. Ich sehe jedoch nicht, warum dies laut Dokumentation erforderlich sein sollte ...
Hat jemand SetupDiGetClassDevs auf diese Weise arbeiten lassen? Gibt es eine bessere Methode, um weitere Informationen für ein Gerät zu erhalten, das Daten im Ereignis DBT_DEVICEARRIVAL verwendet?
Offenbar müssen Sie entweder das Flag DIGCF_ALLCLASSES
angeben, um alle Klassen zu finden, die der angegebenen Geräteinstanz-ID entsprechen, oder die Klasse ClassGuid angeben und das Flag DIGCF_DEFAULT
verwenden.
Das hat für mich funktioniert:
%Vor%Mit Ausgabe:
%Vor% Es scheint, dass Sie DBT_DEVICEARRIVAL
falsch verstehen.
Es gibt ein paar verschiedene Arten von DBT_DEVICEARRIVAL
messages-- für ein Volume, für ein Handle, für eine Geräteschnittstelle. Ich schätze, Sie sprechen über die Sorte DBT_DEVTYP_DEVICEINTERFACE. In diesem Fall enthält das Feld dbcc_name
der Struktur DEV_BROADCAST_DEVICEINTERFACE
den "Geräteschnittstellenpfad".
Der "Geräteschnittstellenpfad" ist NICHT identisch mit einer "Geräteinstanz-ID".
Wenn Sie weitere Informationen zu diesem Gerät erhalten möchten, sollten Sie alle Geräte Schnittstellen von dieser GUID der Geräteschnittstelle (über SetupDiGetClassDevs mit DIGCF_DEVICEINTERFACE) auflisten und den dbcc_name mit den von% co_de abgerufenen Strings vergleichen %.
Tags und Links windows device winapi hardware-interface setupapi