本文章介绍如何使用VC++编程语言获取计算机上USB设备的相关信息,包括设备名称、制造商等详细内容。
USB设备种类繁多,因此对它们的查找与读写变得非常重要。然而,关于如何进行USB操作的信息却相对较少。这里通过VC++展示了一些获取USB信息的方法。
一、枚举USB设备
可以通过以下步骤来实现:首先枚举USB控制器;接着遍历该控制器上的所有HUB(集线器);然后逐一检查每个端口以获得连接的设备信息。具体操作如下:
- 为每一个主控器创建一个路径名,例如使用 \\\\.\\HCD1 和 \\\\.\\HCD2。
- 使用 `CreateFile` 函数打开这些控制器,并通过 `DeviceIoControl` 获取驱动程序名称和与之相连的HUB设备信息。
- 对于每个找到的HUB,再次调用 `CreateFile` 打开它并获取连接到该HUB的所有设备的信息。
二、枚举HID(人机接口)设备
这类设备包括USB鼠标和游戏手柄等。通过使用API函数 `HidD_GetHidGuid(&guidHID)` 来获得GUID,然后利用 `SetupDiEnumDeviceInterfaces` 函数来判断是否有相应的硬件连接到系统中。
如果发现有符合标准的设备,则可以进一步调用 `SetupDiGetDeviceInterfaceDetail` 获取其详细路径信息。接着打开该文件并使用 `HidD_GetAttributes` 来获取基本属性,或者通过发送特定命令给驱动程序(例如利用 `DeviceIoControl` 函数)来获得更详尽的信息。
在本示例代码中,如果计算机上安装了USB游戏手柄,则可以成功读取其信息。然而,在Windows XP操作系统下却无法正确识别出连接的USB鼠标。
三、枚举U盘
首先使用 API `GetDriveType` 来判断设备类型;如果是可移动存储(即返回值为REMOVABLE),则很可能是U盘。接下来,通过调用 `CreateFile` 函数打开该设备,并利用带有参数 IOCTL_STORAGE_QUERY_PROPERTY 的 `DeviceIoControl` 请求来获取有关其属性的详细信息。
四、总结
此示例项目已经能够在Windows XP环境下使用Visual C++ 6.0和XP DDK工具链成功编译运行。由于USB硬件种类繁多且控制软件各异,使得访问这些端口上的设备比串行或并行接口更为复杂。
本段落仅提供了基本的实现方案,并未涵盖所有问题(如某些特定鼠标型号在Windows XP上无法被正确识别等)。参考了诸如 USBPort 和 USBview 等开源项目。