Как известно, два одинаковых USB-устройства, не имеющих внутренних состояний, которые можно было бы использовать в качестве идентификаторов, из любой системы выглядят одинаково, и система не имеет возможности определить, какое из устройств куда подключено. Для адресации таких устройств обычно генерируются внутренние уникальные идентификаторы на основе физического адреса (контроллер/хаб/порт).
У меня сейчас нет задачи различать именно сами устройства — достаточно было бы адресовать их по подключению. Я наивно полагал, что свойство Location information (SPDRP_LOCATION_INFORMATION) как раз и является уникальным и постоянным идентификатором устройства. У меня на ноутбуке один внутренний хаб, и для всех устройств всегда Hub_#0001.
Но отправил программу пользователю, а у него между перезагрузками Location Information меняется: Port_#0001.Hub_#0003, Port_#0001.Hub_#0007, Port_#0001.Hub_#0004, Port_#0001.Hub_#0005. Судя по всему, у контроллера несколько хабов, и они определяются в случайном порядке.
Какие из доступных свойств устройства можно надежно и предсказуемо (чтоб не менялись между перезагрузками) использовать для адресации?
P.S. Уточню: требуется не способ адресации заранее неизвестного устройства в заранее неизвестной системе, а постоянный адрес уже известного устройства. То есть, в первый раз устройство будет найдено любым из доступных в системе способов (по имени или другим свойствам), а уже затем нужно определить его "физический адрес", чтобы при следующем запуске (в том числе после выключения/перезагрузки) уверенно и предсказуемо найти его уже по адресу — разумеется, при условии, что оно подключено к тому же самому разъему.