Peuvent le port USB physique être identifié par programmation d'un périphérique dans Windows?

J'ai un périphérique USB qui énumère avec une interface différente, VID, le PID et le numéro de série lorsque le commandement de le faire, et je tiens à garder une trace de la physique de l'appareil après ce changement se produit. Ma pensée a été suivi par son moyeu et l'emplacement du port.

La Win32_PnPSignedDriver classe a un champ "Emplacement" qui semblait parfait (par exemple Port_#0001.Hub_#0010), mais qui ne contient que l'emplacement de l'appareil lorsque le pilote a d'abord été chargé. Brancher le matériel dans un autre port n'a pas de mise à jour de ce champ.

Toutefois, l'information est disponible quelque part parce qu'il est un "Lieu d'informations" terrain sous l'onglet "Détails" lors de l'affichage de l'appareil via le Gestionnaire de Périphériques. Cette information peut-elle être récupérer par le biais de Requêtes WMI ou une autre méthode? Est-il une meilleure approche pour résoudre ce problème?

EDIT: je sais que cela sonne comme une étrange scénario. Le microcontrôleur dans ces dispositifs contient une ROM qui énumère comme un CDC périphérique (port série) et permet la programmation. Au cours de la fabrication, il serait bénéfique de suivre un appareil comme il change entre le fabricant de la ROM (unique VID/PID/numéro de série) et mon custom firmware interface (différents VID/PID/numéro de série).

Il semble que j'ai peut obtenir l'emplacement de la base de registre via HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB. Je vais écrire une réponse une fois que je le vérifie.
On pourrait s'attendre à ce que, depuis la non-API WMI est nommé SetupDiGetDeviceRegistryProperty
Ressemble à la LocationInformation dans HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB n'est pas mis à jour lorsque l'appareil est branché sur un autre port, soit

OriginalL'auteur Judge Maygarden | 2011-06-20