C++ 在Windows中识别已连接的驱动器

C++ 在Windows中识别已连接的驱动器,c++,winapi,windows-8,registry,C++,Winapi,Windows 8,Registry,我搜索了一堆,要么没有使用正确的关键词,要么有一个独特的问题,因为我没有找到任何特定于我所看到的 我继承了一个工作项目,用C++编写,使用WiWOWSAPI,它应该识别当前连接到机器的USB驱动器,用制造商、型号和序列号显示这些驱动器。这些都存储在注册表中。当前,程序通过以下方式访问所需注册表: RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{53f56307-

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

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

 RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{53f56307-b6bf-11d0-94f2-00a0c91efb8b}"), 0, KEY_READ, &hKey)
然后使用对
RegQueryInfoKey
RegEnumKeyEx
的调用组合来计算该键
/#/Control/Linked
对于每个条目,如果Linked等于1,则驱动器已连接

这在Windows7中运行得很好,我遇到的问题是将程序移植到Windows8.1,它根本不返回任何USB驱动器,即使它们在文件资源管理器中可见

运行regedit并比较Windows 7和8.1我注意到,在win8.1中,当我展开注册表时,在任何地方都看不到控制键。当我展开注册表时,我得到的只是#,没有设置值

所以问题是,我是否遗漏了什么,或者微软在迁移到Win8.1时是否在这方面做了一些更改。如果结果证明我不能再使用此注册表进行此操作,是否有人对我如何进行此操作提出建议


感谢advance提供的帮助。

我怀疑从该注册表项读取数据是否得到过官方支持,因此它的更改并不令人惊讶

一种方法是使用获取系统中的驱动器列表,然后使用with命令测试每个设备是否为USB驱动器。这将填充一个结构,对于USB设备,
BusType
成员将是
BusTypeUsb