Как получить USB_DEVICE_DESCRIPTOR с указанием пути к устройству

Мне удалось перечислить USB-устройства с помощью SetupAPI, и я посмотрел на приложение usbview из WDK, но я все еще не могу понять, как получитьUSB_DEVICE_DESCRIPTOR.

Я бы предпочел не использовать WMI.DeviceIoControl это то, что использует пример приложения usbview, но это действительно работает, только если вы перечисляете устройства на концентраторе. Я полагаю, что если мне удастся добраться до родительского концентратора (и порта), указав путь к устройству (или Id), этот метод может работать, но я также не смог определить, как это сделать.У меня есть набор устройств, для которых я хотел бы получить дескриптор. Некоторые из них являются HID, и, возможно, некоторые из них являются устройствами WinUsb.sys. Если это устройства WinUsb, я могу использоватьWinUsb_GetDescriptor, но это не сработает для HID (и я не знаю, как отличить их от Id или Path ... интерфейс класса, я полагаю?).Я мог бы использоватьSetupDiGetDeviceRegistryProperty но в списке доступных свойств я вижу строку «Производитель», но не идентификатор поставщика.Я мог бы проанализировать это значение из пути к устройству или идентификатора устройства, но это выглядит как ... взлом. Это то, что люди делают, хотя? Кроме того, это все еще заставляет меня переходить к другим методам, если я хочу другие поля, такие как Производитель, где, если бы я мог просто получить весь USB_DEVICE_DESCRIPTOR, я думаю, у меня было бы все, что мне нужно.Очевидно, LibUsb.Net поддерживает только устройства WinUsb. Вот как это выглядит, чтобы получить дескриптор.Очевидно, у WinRT есть несколько новых API, и поэтому приложения Магазина Windows имеют хороший способ получить дескриптор. Но это определенно не приложение для Магазина Windows, и я не знаю, есть ли другой способ использовать более новые API.

Может кто-то указать мне верное направление? Разве просто невозможно получить эту информацию из WinAPI хорошим способом без запуска в Hub?

Ответы на вопрос(1)

Ваш ответ на вопрос