Обзор...
Я прочитал Как получить GUID интерфейса устройства для устройства? и Как открыть дескриптор устройства, используя его идентификатор экземпляра устройства?, но я все еще не понимаю, как мне (и нужно ли вообще) использовать SetupDiEnumDeviceInterfaces в паре с SetupDiGetDeviceInterfaceDetail, чтобы получить DevicePath, который можно открыть с помощью CreateFile для доступа s устройство, когда нет устройства класс интерфейса известен GUID. Мой вопрос основан на статье MSDN здесь и здесь, которые полагаются на эти функции.
Подробнее…
Высокий уровень моей проблемы заключается в том, что у меня есть аудиоустройство USB, которое мне нужно для отправки команд передачи управления. Для этого я хочу использовать версию API, и для этого мне нужно получить дескриптор устройства через CreateFile. К сожалению, нет файла .inf, связанного с устройством, поэтому нет известного GUID класса интерфейса устройства. Если устройство подключить, Windows связывается с ним usbaudio.sys в качестве драйвера. Чтобы начать общение через WinUSB, я использую libwdi для установки WinUSB в качестве драйвера устройства, чтобы я мог общаться с через WinUSB API. Чтобы выполнить установку WinUSB, libwdi динамически создает пару файлов .cat и .inf с собственной подписью, для которой, к сожалению, не определен класс интерфейса устройства. На самом деле в файле INF есть следующее:
[NoDeviceInterfaceGUID]
; Avoids adding a DeviceInterfaceGUID for generic driver
Итак, несмотря на то, что я заменил usbaudio.sys на winusb.sys, я не могу связаться с устройством.
Сначала я подумал, может быть, мне стоит попробовать использовать GUID_DEVINTERFACE_USB_DEVICE, полагая, что это WinUSB и поэтому рассматривается как обычное USB-устройство. Но если я вызову
SetupDiEnumDeviceInterfaces(_deviceList,
&devInfo,
&GUID_DEVINTERFACE_USB_DEVICE,
0,
&usbInterface)
это не удается, и GetLastError немедленно возвращает 259 или ERROR_NO_MORE_ITEMS. Я предполагаю, что это означает, что он не реализует интерфейс?
Итак, в общем, когда не известен guid класса интерфейса, могу ли я использовать вышеупомянутые функции в любой форме, чтобы получить полный путь к устройству? Спасибо заранее за ваше время.