Согласно MSDN документации, SetupDiGetClassDevs может быть принят device instance ID получить device information set для конкретного устройства:Работает ли SetupDiGetClassDevs с идентификаторами экземпляра устройства, как задокументировано?
Чтобы вернуть только определенное устройство, установите флаг DIFCF_DEVICEINTERFACE и использовать параметр Enumerator для подачи идентификатор экземпляра устройства устройства.
Я получаю экземпляр устройства путем анализа символического имени из WM_DEVICECHANGE
сообщения DBT_DEVICEARRIVAL
события, и я проверил полученный идентификатор, сравнивая его, что вернулись из SetupDiGetDeviceInstanceId. Даже передача идентификатора экземпляра устройства, предоставленного ОС, не работает (т. Е. Вызов SetupDiGetClassDevs завершается с ERROR_INVALID_PARAMETER
).
Мое текущее обходное решение для получения структуры SP_DEVINFO_DATA
для вновь прибывшего устройства - это перечислить все устройства в одном классе и сравнить результат SetupDiGetDeviceInstanceId с символическим именем. Однако я не понимаю, почему это необходимо в соответствии с документацией ...
Кто-нибудь получил SetupDiGetClassDevs, чтобы работать таким образом? Есть ли лучший способ получения дополнительной информации для устройства, использующего данные в событии DBT_DEVICEARRIVAL?
DIGCF_DEVICEINTERFACE | DIGCF_ALLCLASSES был недостающей частью для меня. Из документации MSDN я понял, что нужен только DIGCF_DEVICEINTERFACE, но это дало ошибку 87 (плохие аргументы). – angularsen