Secondo la documentazione MSDN, SetupDiGetClassDevs possono essere passati un device instance ID per ottenere un device information set per un dispositivo specifico:SetupDiGetClassDev funziona con gli ID di istanza della periferica come documentati?
per restituire solo un dispositivo specifico, impostare bandiera DIFCF_DEVICEINTERFACE e utilizzare il parametro enumeratore per fornire il ID istanza dispositivo del dispositivo.
ottengo l'ID istanza dispositivo analizzando il nome simbolico dal WM_DEVICECHANGE
messaggio DBT_DEVICEARRIVAL
evento, e ho verificato l'ID risultante e confrontarlo con quello restituito dal SetupDiGetDeviceInstanceId. Anche il passaggio dell'ID di istanza del dispositivo fornito dal sistema operativo non funziona (ad esempio, la chiamata SetupDiGetClassDevs non riesce con ERROR_INVALID_PARAMETER
).
La mia soluzione attuale per recuperare una struttura SP_DEVINFO_DATA
per il dispositivo appena arrivato è enumerare tutti i dispositivi nella stessa classe e confrontare il risultato di SetupDiGetDeviceInstanceId con il nome simbolico. Tuttavia, non vedo perché questo dovrebbe essere necessario secondo la documentazione ...
Qualcuno ha ottenuto SetupDiGetClassDevs per funzionare in questo modo? Esiste un metodo migliore per ottenere ulteriori informazioni per un dispositivo che utilizza i dati nell'evento DBT_DEVICEARRIVAL?
DIGCF_DEVICEINTERFACE | DIGCF_ALLCLASSES è stata la parte mancante per me. Dalla documentazione MSDN ho capito che era necessario solo DIGCF_DEVICEINTERFACE, ma questo ha fornito l'errore 87 (argomenti non validi). – angularsen