Según la documentación MSDN, SetupDiGetClassDevs se puede pasar un device instance ID para obtener un device information set para un dispositivo específico:¿Funciona SetupDiGetClassDevs con ID de instancia de dispositivo como está documentado?
para devolver sólo un dispositivo específico, establezca la bandera DIFCF_DEVICEINTERFACE y utilizar el parámetro Enumerador para suministrar el ID de instancia del dispositivo del dispositivo.
I obtener el ID de instancia de dispositivo mediante el análisis del nombre simbólico de la WM_DEVICECHANGE
mensaje DBT_DEVICEARRIVAL
evento, y han verificado la ID resultante comparándola con que regresaron de SetupDiGetDeviceInstanceId. Incluso pasar el Id. De instancia del dispositivo proporcionado por el SO no funciona (es decir, la llamada SetupDiGetClassDevs falla con ERROR_INVALID_PARAMETER
).
Mi solución actual para recuperar una estructura SP_DEVINFO_DATA
para el dispositivo recién llegado es enumerar todos los dispositivos en la misma clase y comparar el resultado de SetupDiGetDeviceInstanceId con el nombre simbólico. Sin embargo, no veo por qué esto debería ser necesario de acuerdo con la documentación ...
¿Alguien ha hecho que SetupDiGetClassDevs funcione de esta manera? ¿Existe un método mejor para obtener más información para un dispositivo que utiliza datos en el evento DBT_DEVICEARRIVAL?
DIGCF_DEVICEINTERFACE | DIGCF_ALLCLASSES era la parte que faltaba para mí. De la documentación de MSDN, entendí que solo DIGCF_DEVICEINTERFACE era necesario, pero eso dio el error 87 (malos argumentos). – angularsen