Многие USB-устройства содержат уникальный серийный номер (который на самом деле является строкой Unicode), который хост может использовать вместе с 16-разрядным поставщиком и номерами идентификаторов продуктов для уникальной идентификации устройства.
Я пытаюсь выяснить, как написать приложение для Windows, которое могло бы отображать список всех устройств с интерфейсом USB, подключенных к системе. В списке будет по одной строке для каждого HID, включая системные клавиатуры. В списке будут столбцы для идентификатора поставщика, идентификатора продукта и серийного номера.
Я могу получить список USB HID, вызвав SetupDiGetClassDevs
с GUID, возвращаемым HidD_GetHidGuid
, и просматривая результат, повторно вызывая SetupDiEnumDeviceInterfaces
. Затем я могу позвонить SetupDiGetDeviceInterfaceDetail
, чтобы получить путь к каждому устройству, которое я могу открыть с помощью CreateFile
, при условии, что я не буду запрашивать ни разрешения на чтение, ни запись, что было бы запрещено для системной клавиатуры. Оттуда я могу получить номера поставщиков и идентификаторы продуктов, набрав HidD_GetAttributes
.
Мне трудно понять, как извлечь строку с серийным номером. Когда я ищу решения этой проблемы, я нахожу много информации о том, как получить серийные номера для запоминающих устройств USB, но ничего похожего на то, что не может быть применимо к любому другому типу USB-устройства. Я был бы счастлив обнаружить или универсальный метод или HID-специфический метод получения строки серийного номера.
У меня такое ощущение, что порт Win32 libusb
может справиться с этим без особых проблем, но, к сожалению, мне нужно решение, которое зависит только от библиотек, поставляемых с Windows, таких как библиотеки setupapi
и hid
. которые содержат функции, упомянутые выше.
Любые предложения будут очень признательны!