有没有一种简单有效的方法来列出 C# 或 C/C++ 中的所有 USB 设备

Is there a simple and efficient way to get listed all usb devices in C# or C/C++?

本文关键字:C++ 设备 USB 一种 简单 方法 有效 有没有      更新时间:2023-10-16

我必须制作一个程序来监控USB端口以及USB设备何时插入(游戏手柄,闪存驱动器,鼠标,ECC...我得到一个唯一标识符(设备 ID 或其他东西会很好)。
起初,我尝试使用 system.management 类使用 C#,并每秒查询cim_logicaldevice类以插入新设备。某些设备返回了更多带有 DeviceID 的行,但这不是问题。问题是程序(在任务管理器中)占用的内存不断增长。这是源代码:
http://pastebin.com/dQv3cMQC

有没有办法避免内存使用的增长?
我必须用C++或C#来做这个程序,它必须是最有效的(因为它必须永远打开)。

我建议在WDK中查看USBView示例。如果您不熟悉这一点,只需运行它 - 此工具遍历系统上的整个 USB 树,并打印出每个设备的信息和描述符列表。

在您的情况下,我将从此示例中的 RefreshTree() 函数开始,然后您可以按照代码查看它如何枚举主控制器、集线器和最终设备。对于找到的每个设备,您可以查看接口描述符中的 bInterfaceClass,以了解它通告的接口类型。

获取此示例源代码的最简单方法是安装 7.1.0 WDK,该 WDK 当前在此处可用:http://www.microsoft.com/en-us/download/details.aspx?id=11800