Как узнать серийный номер USB последовательного адаптера, учитывая COM-порт? - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу получить от Windows имени COM-порта (COM11) серийный номер USB-устройства, обеспечивающего этот COM-порт (в настоящее время я работаю с адаптерами FTDI, если это имеет значение).

Я могу использовать SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, NULL, NULL, DIGCF_PRESENT) для перечисления портов в системе, затем я могу использовать SetupDiEnumDeviceInfo и SetupDiGetDeviceRegistryProperty для получения vid / pid из идентификатора оборудования.

Но я не могу найти способ заполучить серийный номер.

Цель состоит в том, чтобы запрограммировать последовательные адаптеры с серийными номерами, которые идентифицируют их использование для программы симулятора. у нас есть (поэтому пользователь не должен выяснить, какой адаптер, какой COM-порт).

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете попробовать использовать SetupDiGetDeviceInstanceId, чтобы получить идентификатор экземпляра устройства USB-устройства, который должен быть строкой вида USB\VID_xxxx&PID_xxxx\[ID]. Если ваше устройство USB не является составным, то серийный номер будет [ID]. Вот как libusbp получает серийный номер устройства USB.

Если ваше устройство является составным, последовательный порт будет дочерним, и вам придется go подняться на один уровень выше, чтобы найти родительский элемент, представляющий фактическое USB-устройство, которое должно иметь идентификатор экземпляра устройства, который Вы заботитесь о.

Прежде чем писать какой-либо код, я бы порекомендовал проверить идентификатор экземпляра устройства в диспетчере устройств, где он называется «Путь к экземпляру устройства».

Чтобы вы почувствовали Несколько лучше при извлечении серийного номера из строки, содержащей другую информацию, идентификатор экземпляра устройства задокументирован Microsoft здесь:

https://docs.microsoft.com/en-us/windows-hardware/drivers/install/device-instance-ids

...