【问题标题】:Identify connected drives in Windows在 Windows 中识别连接的驱动器
【发布时间】:2014-01-20 20:03:07
【问题描述】:

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

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

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

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

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

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

所以问题是,在迁移到 Win8.1 时,是我遗漏了什么还是微软在这方面做了一些改变。如果事实证明我不能再为此目的使用此注册表,是否有人对我如何去做有建议?

提前感谢您的帮助。

【问题讨论】:

    标签: c++ winapi windows-8 registry


    【解决方案1】:

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

    您可以执行此操作的一种方法是使用GetLogicalDriveStrings 获取系统中的驱动器列表,然后使用DeviceIoControlIOCTL_STORAGE_QUERY_PROPERTY 命令测试每个设备是否是USB 驱动器。这将填写一个STORAGE_DEVICE_DESCRIPTOR 结构,而对于USB 设备,BusType 成员将是BusTypeUsb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      相关资源
      最近更新 更多