识别Windows中连接的驱动器

Identify connected drives in Windows

本文关键字:驱动器 连接 Windows 识别      更新时间:2023-10-16

我搜索了一堆,要么不使用正确的钥匙单词,要么有唯一的问题,因为我没有找到与我所看到的有关的任何特定的问题。

我已经继承了一个用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,即使在File Explorer中可见时,它也不会返回任何USB驱动器。

运行regedit并比较Windows 7和8.1我注意到的是,在win8.1中,当我在扩展注册表时,我什么都不会看到控制密钥时,我得到的是##,没有值集。

所以问题是,我是缺少某些东西还是微软在转向Win8.1时做出了一些更改。如果事实证明我无法再将此注册表用于此目的,是否有人建议我如何做?

谢谢您的帮助。

我怀疑从该注册表打击的阅读曾经得到正式支持,因此它的变化并不令人惊讶。

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