我的 Java 程序需要获取已连接 USB 设备的驱动器号列表,但仅限于那些支持 USB 3.0 的设备(设备和它所插入的 USB 端口,以便高速运行)。
目前,我尝试通过我的 Java 程序执行的 PowerShell 命令来使用 WMI。
我已经找到了这个:Powershell: Grab USB Drive letter。但它也会列出 USB 2.0 设备。
关于版本检测,我发现:如何检查可用 USB 端口的版本?- 我试过的 PowerShell 命令是Get-WmiObject Win32_USBHub
. 这带来了几个问题。第一:它列出的东西远不止 USB 驱动器(我认为我的 PC 的所有 USB 集线器也是如此)。第二:即使列表中的所有项目都有一个字段USBVersion它始终为空。
更新
我过去几天研究的本质是,我需要连接两个领域的信息。
- 驱动器/逻辑驱动器
- 盘符
- BusType(就我而言,等于“USB”)
- USB 设备
- 供应商 ID 和产品 ID (VID&PID)
- bcdUSB(USB 设备描述符中的值,表示 USB 版本)
对于给定的驱动器号,我需要找到 bcdUSB 值。但是我还没有找到一种方法来获取与 USB 设备对应的驱动器。
到目前为止我尝试了什么
基于 PowerShell 的 WMI
我发现的相关命令是
Get-Disk // Get BusType
gwmi Win32_LogicalDisk // Get drive letter
// Those make the connection between disk and logical disk
gwmi Win32_LogicalDiskToPartition
gwmi Win32_LogicalDiskToPartition
即使我得到了 BusType,我也无法连接到 bcdUSB
usb4java (链接)
我只从这里的 USB 设备领域获取信息。我可以加载设备并查看 VID&PID 和 bcdUSB 值,但无法将其映射到驱动器和驱动器号。
lsusb 通过 Cygwin
根据这篇文章,linux命令比WMI更容易处理。所以我尝试在Windows下使用它。但我喜欢 usb4java 我只有 VID&PID + bcdUSB,而不是挂载点(驱动器号)。
搜索 Windows 注册表
我在 Windows 注册表中进行了一些字符串搜索。没有成功。
读取 Windows 事件日志
我考虑过使用 Windows 事件来检测同时连接的驱动器和 USB 设备。插入 USB 记忆棒时,我什至没有找到事件。