识别Windows中连接的驱动器
Identify connected drives in Windows
我搜索了一堆,要么不使用正确的钥匙单词,要么有唯一的问题,因为我没有找到与我所看到的有关的任何特定的问题。
我已经继承了一个用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,即使在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
。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- 如何确定SSD驱动器是固定驱动器还是连接在USB上
- 识别Windows中连接的驱动器