Selon la documentation MSDN, SetupDiGetClassDevs peut être passé un device instance ID pour obtenir un device information set pour un dispositif spécifique:Est-ce que SetupDiGetClassDevs fonctionne avec les ID d'instance de périphérique comme documenté?
Pour revenir un périphérique spécifique, définissez le drapeau DIFCF_DEVICEINTERFACE et utiliser le paramètre recenseur pour fournir le ID d'instance de périphérique de l'unité.
je reçois l'instance de périphérique ID en analysant le nom symbolique de l'événement WM_DEVICECHANGE
message DBT_DEVICEARRIVAL
, et je l'ai vérifié l'ID résultant en le comparant à celui retourné de SetupDiGetDeviceInstanceId. Même le passage de l'ID d'instance de périphérique fourni par le système d'exploitation ne fonctionne pas (c'est-à-dire que l'appel SetupDiGetClassDevs échoue avec ERROR_INVALID_PARAMETER
). Ma solution actuelle pour récupérer une structure SP_DEVINFO_DATA
pour le périphérique nouvellement arrivé est d'énumérer tous les périphériques de la même classe et de comparer le résultat de SetupDiGetDeviceInstanceId au nom symbolique. Cependant, je ne vois pas pourquoi cela devrait être nécessaire selon la documentation ...
Quelqu'un at-il obtenu SetupDiGetClassDevs pour fonctionner de cette façon? Existe-t-il une meilleure méthode pour obtenir des informations supplémentaires pour un périphérique utilisant des données dans l'événement DBT_DEVICEARRIVAL?
Le DIGCF_DEVICEINTERFACE | DIGCF_ALLCLASSES était la partie manquante pour moi. De la documentation de MSDN j'ai compris que seulement DIGCF_DEVICEINTERFACE était nécessaire, mais cela a donné l'erreur 87 (mauvais arguments). – angularsen