C++ USB 与 USB 复合设备 (usbccgp.sys) 通信

C++ USB communicate with USB Composite Device (usbccgp.sys)

本文关键字:USB usbccgp sys 通信 复合 C++      更新时间:2023-10-16

我正在使用C++和libusb-win32来尝试与商业USB设备进行通信...我对USB编程了解不多,但我想向使用嗅探器程序知道的设备发送一些命令。Libusb-win32 看起来还可以,但看起来它只能在使用该设备的 libusb 驱动程序的设备上使用。我想在具有Windows usbccgp提供的驱动程序"USB复合设备"驱动程序的设备上使用它.sys...甚至可能吗?如果没有,我该怎么做?我只需要发送一些控制传输

目前这是不可能的。 libusb 是围绕 Linux 驱动程序模型设计的,其中复合设备被系统视为单个设备。Windows 将复合设备视为多个单独的设备 - 每个接口的父复合设备和子设备。

因此,libusb 无法访问子设备,除非先将父驱动程序更改为 libusb 支持的驱动程序。可以完成,但设备将无法与供应商提供的软件一起使用。

如果要与商业设备通信,则需要联系制造商,并了解是否存在通过其驱动程序发布的该设备的接口。大多数制造商无法与产品中的通用控件请求进行交互。可能存在未记录的 IOCTL,但同样,您需要与他们合作才能获取此信息。

如果您只想挂接设备并向其发送控制请求,则需要将制造商的驱动程序替换为 libusb 驱动程序。这里的问题是,虽然你可以得到设备,但它可能无法按照你想要的方式运行,除非你欺骗制造商的行为(例如,设备可能期望一些供应商特定的通信,以使设备准备好与主机交互)。如果您确实发现问题,那么您可以通过一些硬件分析器查看USB线来对供应商特定的协议进行逆向工程。

阅读 USB 完整版,这是对 USB 协议的精彩介绍,将帮助您详细了解 USB 设备和主机 PC 之间发生的事情。