识别Windows中的已连接驱动器

时间:2014-01-20 20:03:08

标签: c++ winapi windows-8 registry

我搜索了一堆,要么没有使用正确的关键词,要么有一个独特的问题,因为我没有发现任何特定于我所看到的内容。

我继承了一个工作项目,用C ++编写并使用WindowsAPI,它应该识别当前连接到机器的USB驱动器,显示带有制造商,型号和序列号的驱动器。这都存储在注册表中。目前,该程序通过以下方式访问所需的注册表:

 RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{53f56307-b6bf-11d0-94f2-00a0c91efb8b}"), 0, KEY_READ, &hKey)

然后使用对RegQueryInfoKeyRegEnumKeyEx的调用组合来评估密钥 每个条目/#/Control/Linked,如果链接等于1,则驱动器已连接。

这在Windows 7中运行得很好,我遇到的问题是将程序移植到Windows 8.1即使它们在文件资源管理器中可见,它也不会返回任何USB驱动器。

运行regedit并比较Windows 7和8.1我注意到的是在win8.1中,当我扩展注册表时无处可去,当我扩展注册表时,我看到了Control键,我得到的是没有设置值的#。

所以问题是,我是否遗漏了某些东西,或者微软在转向Win8.1时在这方面做了一些改变。如果事实证明我不能再使用此注册表用于此目的,是否有人建议如何进行此操作?

谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

我怀疑读取该注册表项是否已得到官方支持,因此更改的事实并不令人惊讶。

您可以使用GetLogicalDriveStrings获取系统中的驱动器列表,然后使用DeviceIoControl使用IOCTL_STORAGE_QUERY_PROPERTY测试每个设备是否为USB驱动器命令。这将填写STORAGE_DEVICE_DESCRIPTOR结构,BusType成员将BusTypeUsb用于USB设备。