概述...
我读过了如何获取设备的设备接口 GUID? and 如何使用设备实例 ID 打开设备的句柄?,但我仍然对如何(或者是否应该)使用感到困惑设置DiEnumDeviceInterfaces与设置DiGetDeviceInterfaceDetail得到一个设备路径可以用以下命令打开创建文件没有时访问设备设备接口类GUID 已知。我的问题是基于 MSDN 文章here and here依赖于这些功能。
更多细节...
我的最大问题是我有一个音频 USB 设备,我需要发送控制传输命令。为此,我想使用 WinUSBAPI,并要做that我需要通过 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 时,我是否可以以任何形式使用上述函数来获取完整的设备路径?
在此先感谢您的时间。