J’ai pu énumérer les périphériques USB en utilisant le SetupAPI, et j’ai regardé l’application usbview depuis le WDK, mais je n’arrive toujours pas à comprendre comment obtenir le fichier USB_DEVICE_DESCRIPTOR .
Est-ce que quelqu’un peut-il me montrer la bonne direction? N’est-il pas possible d’obtenir ces informations de la WinAPI sans commencer par le Hub?
Votre meilleur pari serait d’extraire les informations du chemin d’access du périphérique et d’utiliser les fonctions SetupDi pour obtenir les autres éléments. Pour autant que je sache, le chemin du périphérique suit toujours la même convention. c’est à dire:
“\\? \ usb # vid_ 0000 & pid_ 1111 # SERIAL # { GUID }” où 0000 est le VID et 1111 est le PID en tant que chaînes hexadécimales. SERIAL est le numéro de série fourni par le matériel ou la valeur de série atsortingbuée par le système d’exploitation.
Personnellement, j’ai trouvé une instance où je voulais absolument obtenir le descripteur de périphérique afin de tirer la série de cette façon. Dans certains cas, le système d’exploitation ne reconnaissait pas le numéro de série fourni par mon matériel. J’ai corrigé cela du côté du matériel, mais je voulais tout de même adapter l’ancien matériel du côté du PC. Ci-dessous est mon approche. Il y a peut-être quelque chose de mieux, mais c’est le meilleur que j’ai trouvé jusqu’ici. Vous pouvez toujours le considérer comme un “hack-ish”.
-MODIFIER-
Comme Ben l’a souligné dans les commentaires, vous pouvez ignorer les étapes 5, 6 et 7 en utilisant CM_Get_Device_ID sur le noeud dev du parent obtenu à l’étape 4. Modifiez les barres obliques (\) dans cette chaîne en livres (#). Ajoutez “\\? \” Et ajoutez “# {f18a0e88-c30c-11d0-8815-00a0c906bed8}”. Utilisez-le comme chemin d’access de votre périphérique à l’étape 8. Cela évite les itérations sur tous les périphériques concentrateurs de votre système 🙂