0

我正在尝试为一个相当简单的 USB 设备创建一个简单的读/写应用程序,但事实证明它根本不是那么简单。

我正在使用 WinUSB 和 SetupAPI DLL 并从头开始工作,因为我似乎找不到任何真正适合我需要的东西。PyWinUSB 和 PyUSB 等等等等都接近了,但是当我尝试用它们实际写入设备时,它们失败了。

无论如何,现在我仍然处于零基础。按照说明,我从 SetupAPI.dll 调用 SetupDiGetClassDevsExW 函数。该函数正确执行,如调用返回零的 kernel32.lasterror 函数所示,但我从调用中返回的唯一内容是一个整数值。那是对的吗?这甚至是正确的功能吗?(有 4 个类似,而且不只是普通的 SetupDiGetClassDevs 函数。这 4 个函数是 SetupGetClassDevsExW、SetupGetCLassDevsExA、SetupGetClassDevsA 和 SetupGetClassDevsW。)我需要创建一个类来处理它吗?我问是因为调用下一个函数 SetupDiEnumDeviceInterfaces 只返回了代码 259 的失败,根据快速谷歌搜索,这意味着 ERROR_NO_MORE_ITEMS。

我已经取得了一些进展,有人向我展示了正确的类结构方法,用于创建用于保存一些信息的结构,但由于我以前从未真正使用过 USB 设备的编程,更不用说在 Python 中了,我我还是有点卡住了。我将提供答案所需的更多信息,但现在我不想让这个 Q/A 陷入不必要的信息。

谢谢。

4

1 回答 1

0

有一个SetupDiGetClassDevsASetupDiGetClassDevsW。这些Ex版本允许连接到远程机器。版本采用A字节字符串作为第二个参数,而W版本采用 Unicode 字符串。返回值是设备信息集的句柄。

设备信息集必须使用SetupDiEnumDeviceInfo或进行迭代SetupDiEnumDeviceInterfaces。第二个函数仅在您DIGCF_DEVICEINTERFACE作为标志SetupDiGetClassDevs传递给 ClassGuid 参数并传递接口 GUID 时才有效;否则,您将传递一个设备类 GUID,并且只会SetupDiEnumDeviceInfo返回任何内容。

于 2012-10-12T15:49:51.367 回答