我搜索了一堆,要么没有使用正确的关键词,要么有一个独特的问题,因为我没有发现任何特定于我所看到的内容。
我继承了一个工作项目,用C ++编写并使用WindowsAPI,它应该识别当前连接到机器的USB驱动器,显示带有制造商,型号和序列号的驱动器。这都存储在注册表中。目前,该程序通过以下方式访问所需的注册表:
RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{53f56307-b6bf-11d0-94f2-00a0c91efb8b}"), 0, KEY_READ, &hKey)
然后使用对RegQueryInfoKey
和RegEnumKeyEx
的调用组合来评估密钥
每个条目/#/Control/Linked
,如果链接等于1,则驱动器已连接。
这在Windows 7中运行得很好,我遇到的问题是将程序移植到Windows 8.1即使它们在文件资源管理器中可见,它也不会返回任何USB驱动器。
运行regedit并比较Windows 7和8.1我注意到的是在win8.1中,当我扩展注册表时无处可去,当我扩展注册表时,我看到了Control键,我得到的是没有设置值的#。
所以问题是,我是否遗漏了某些东西,或者微软在转向Win8.1时在这方面做了一些改变。如果事实证明我不能再使用此注册表用于此目的,是否有人建议如何进行此操作?
谢谢你的帮助。
答案 0 :(得分:4)
我怀疑读取该注册表项是否已得到官方支持,因此更改的事实并不令人惊讶。
您可以使用GetLogicalDriveStrings
获取系统中的驱动器列表,然后使用DeviceIoControl
使用IOCTL_STORAGE_QUERY_PROPERTY
测试每个设备是否为USB驱动器命令。这将填写STORAGE_DEVICE_DESCRIPTOR
结构,BusType
成员将BusTypeUsb
用于USB设备。