Мое аппаратное устройство подключается к ПК и предоставляет виртуальный последовательный порт. Номер последовательного порта зависит от того, к какому физическому USB-порту подключено устройство. Может ли мое приложение узнать, к какому физическому USB-порту подключено мое устройство? Это действительно поможет мне оптимизировать код. В настоящее время мое приложение определяет фактический номер порта при каждом подключении устройства путем перебора всех возможных портов, что является длительным процессом. Если я знаю, к какому USB-порту он был подключен, я уже знаю, какой коммуникационный порт он предоставляет, и я могу сохранить / загрузить эти настройки для каждого конкретного физического USB-порта (профиля). Я использую C ++ / MFC и Windows 7. Я также хотел бы, чтобы это работало в XP.
Пример источника USBView доступен в WDK. Если вы не знакомы с этим, просто запустите его — этот инструмент просматривает все дерево USB в системе и распечатывает информацию и списки дескрипторов для каждого устройства, а также места на хост-контроллерах и концентраторах.
Начните с функции RefreshTree () в этом примере, затем вы можете следовать коду, чтобы увидеть, как он перечисляет хост-контроллеры, концентраторы и, наконец, устройства.
Самый простой способ получить исходный код для этого примера — установить WDK 7.1.0, который в настоящее время доступен здесь: http://www.microsoft.com/en-us/download/details.aspx?id=11800
Других решений пока нет …