pro*_*gAK 2 c++ registry winapi windows-8
我搜索了一堆,要么没有使用正确的关键词,要么有一个独特的问题,因为我没有找到任何特定于我所看到的东西。
我在工作中继承了一个项目,用 C++ 编写并使用 WindowsAPI,它应该识别当前连接到机器的 USB 驱动器,显示这些驱动器的制造商、型号和序列号。这都存储在注册表中。目前,该程序通过以下方式访问所需的注册表:
RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{53f56307-b6bf-11d0-94f2-00a0c91efb8b}"), 0, KEY_READ, &hKey)
Run Code Online (Sandbox Code Playgroud)
然后使用对每个条目的调用RegQueryInfoKey和RegEnumKeyEx评估键
的组合/#/Control/Linked,如果 Linked 等于 1,则驱动器已连接。
这在 Windows 7 中运行良好,我遇到的问题是将程序移植到 Windows 8.1 即使它们在文件资源管理器中可见,它也不会返回任何 USB 驱动器。
运行 regedit 并比较 Windows 7 和 8.1 我注意到的是,在 win8.1 中,当我展开注册表时,当我展开注册表时,我在任何地方都看不到 Control 键,我得到的只是没有设置值的 #。
所以问题是,在迁移到 Win8.1 时,我是否遗漏了什么或微软在这方面做了一些改变。如果事实证明我不能再为此目的使用此注册表,是否有人建议我如何去做?
感谢您的帮助。
我怀疑从该注册表项中读取是否曾经得到正式支持,因此它已更改的事实并不令人惊讶。
你可以做到这一点的方法之一是使用GetLogicalDriveStrings让您的系统驱动器的列表,然后测试,如果每个设备是使用USB驱动器DeviceIoControl与IOCTL_STORAGE_QUERY_PROPERTY命令。这将填写一个STORAGE_DEVICE_DESCRIPTOR结构,BusType成员将BusTypeUsb用于 USB 设备。
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |