Theo tài liệu MSDN, SetupDiGetClassDevs thể được thông qua một device instance ID để có được một device information set cho một thiết bị cụ thể:Thiết lập SetupDiGetClassDev có hoạt động với các ID cá thể thiết bị như được ghi lại không?
Để trở về chỉ là một thiết bị cụ thể, thiết cờ DIFCF_DEVICEINTERFACE và sử dụng tham số Enumerator để cung cấp ID cá thể thiết bị của thiết bị.
tôi nhận được ID dụ thiết bị bằng cách phân tích các tên mang tính biểu tượng từ DBT_DEVICEARRIVAL
kiện WM_DEVICECHANGE
tin nhắn, và tôi đã xác minh ID kết quả bằng cách so sánh nó với trở về từ SetupDiGetDeviceInstanceId. Ngay cả khi truyền ID cá thể thiết bị do OS cung cấp không hoạt động (tức là cuộc gọi SetupDiGetClassDevs không thành công với ERROR_INVALID_PARAMETER
).
Cách giải quyết hiện tại của tôi để tìm cấu trúc SP_DEVINFO_DATA
cho thiết bị mới đến là liệt kê tất cả các thiết bị trong cùng một lớp và so sánh kết quả của SetupDiGetDeviceInstanceId với tên biểu tượng. Tuy nhiên, tôi không thấy lý do tại sao điều này cần thiết theo tài liệu ...
Có ai đã thiết lập SetupDiGetClassDevs để hoạt động theo cách này không? Có phương pháp nào tốt hơn để nhận thêm thông tin cho thiết bị sử dụng dữ liệu trong sự kiện DBT_DEVICEARRIVAL không?
DIGCF_DEVICEINTERFACE | DIGCF_ALLCLASSES là phần còn thiếu của tôi. Từ tài liệu MSDN tôi đã hiểu rằng chỉ có DIGCF_DEVICEINTERFACE là cần thiết, nhưng điều đó đã gây ra lỗi 87 (đối số xấu). – angularsen