C++;USB与USB复合设备(usbccgp.sys)通信 我用C++和LIUBB-Win32尝试和一个商业设备通信…我对USB编程了解不多,但我想通过使用嗅探程序向设备发送一些命令。Libusb-win32似乎还可以,但它似乎只能在使用设备驱动程序的设备上使用。 我想在一个有windows usbccgp.sys提供的“USB复合设备”驱动程序的设备上使用它。。。有可能吗?如果没有,我怎么做? 我只需要发送一些控制传输

C++;USB与USB复合设备(usbccgp.sys)通信 我用C++和LIUBB-Win32尝试和一个商业设备通信…我对USB编程了解不多,但我想通过使用嗅探程序向设备发送一些命令。Libusb-win32似乎还可以,但它似乎只能在使用设备驱动程序的设备上使用。 我想在一个有windows usbccgp.sys提供的“USB复合设备”驱动程序的设备上使用它。。。有可能吗?如果没有,我怎么做? 我只需要发送一些控制传输,c++,usb,libusb-1.0,C++,Usb,Libusb 1.0,如果您想与商用设备通话,您需要联系制造商,了解该设备是否有通过其驱动程序发布的接口。大多数制造商将无法与产品中的通用控制请求进行交互。可能有一个未记录的IOCTL,但同样,您需要与他们合作以获取此信息 如果您只想挂接设备并向其发送控制请求,则需要将制造商的驱动程序替换为libusb驱动程序。这里的问题是,虽然您可以使用该设备,但除非您欺骗制造商的行为,否则它可能无法按您所希望的方式运行(例如,该设备可能需要一些特定于供应商的通信,以使该设备准备好与主机交互)。如果您确实看到问题,那么您可以通过一

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

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


请阅读,这是对USB协议的一个很好的介绍,它将帮助您了解USB设备和主机PC之间发生的更多情况。

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


因此,如果不先将父驱动程序更改为支持libusb的驱动程序,libusb无法访问子设备。可以这样做,但是设备将无法与供应商提供的软件配合使用。

这是一个相当广泛的问题。您确实应该花一些时间学习USB协议和USB堆栈。这是一个起点。实际上,我现在意识到该设备实际上是由windows usbccgp.sys提供的“USB复合设备”驱动程序。也许这会让它更直截了当?不,除非其中一个接口有使用说明文件。这里的想法仍然是一样的,您只需要选择通过libusb API寻址的接口,它通常通过wIndex参数提供。因此,如果一些设备使用这些Windows驱动程序,如usbccgp.sys,制造商如何编写与设备接口的软件?即使我不能与它“接口”,只要识别设备并打开与它的某种连接就是一个很好的起点。你真的需要完整地阅读USB。复合驱动程序只是处理多个USB接口的底层驱动程序。还有另一个驱动程序需要处理各个接口。例如,复合设备可以具有USB音频接口、HID接口和特定于供应商的接口。三个独特的驱动程序将每个接口作为一个独特的“设备”来处理——一个USB音频驱动程序、一个HID驱动程序和一个特定于供应商的驱动程序。在您的情况下,您需要使用libusb与设备上的一个USB接口进行接口(动词),以便能够发送命令。