我正在使用 WMI 来确定何时插入/放入各种形式的媒体(USB 驱动器、CD 等)。然而,诸如“SanDisk Enterprise FIPS USB”之类的加密驱动器做了一些奇怪的事情:它们看起来像是一个 CD 驱动器,可以从中启动解锁应用程序。解锁实用程序完成后,新的 USB 逻辑磁盘可用于读/写。所以我从 WMI 看到的事件顺序是:
- USB 已插入
- 创建了 Win32_DiskDrive 对象(参见下面的\.\PHYSICALDRIVE2)
- 创建了不同的 Win32_LogicalDisks,我在下面复制了一个 (G:),并保存了启动器,另一个(M:,在我的例子中)是最终可以访问的驱动器。
但是,在实用程序运行之前不存在 Win32_DiskDriveToDiskPartition 条目,这是从硬件 ID 定位卷的常用方法。经过多次谷歌搜索和some trial and error ,我一直没能找到一种将 PHYSICALDRIVE2 关联到 G: 的架构合理的方法。网上的普遍共识是你不应该期望这样的映射存在,因为物理媒体不需要分区或卷等,但在我的情况下我基本上知道它确实存在,并且会出错如果缺少预期的映射,则以某种有意义的方式。
在这一点上,我唯一的策略是枚举所有卷并在所有 CD 驱动器中查找适当的文件,也许在我的加密 USB 驱动器连接后跟踪已识别的任何此类设备。显然,这是一个丑陋的 hack。有什么建议吗?
TargetInstance =
instance of Win32_LogicalDisk
{
Caption = "G:";
CreationClassName = "Win32_LogicalDisk";
Description = "CD-ROM Disc";
DeviceID = "G:";
DriveType = 5;
MediaType = 11;
Name = "G:";
SystemCreationClassName = "Win32_ComputerSystem";
};
instance of Win32_DiskDrive
{
Caption = "SanDisk Enterprise FIPS USB Device";
ConfigManagerErrorCode = 0;
ConfigManagerUserConfig = FALSE;
CreationClassName = "Win32_DiskDrive";
Description = "Disk drive";
DeviceID = "\\\\.\\PHYSICALDRIVE2";
FirmwareRevision = "6.61";
Index = 2;
InterfaceType = "USB";
Manufacturer = "(Standard disk drives)";
MediaLoaded = TRUE;
Model = "SanDisk Enterprise FIPS USB Device";
Name = "\\\\.\\PHYSICALDRIVE2";
Partitions = 0;
SerialNumber = "u";
Signature = 0;
Status = "OK";
SystemCreationClassName = "Win32_ComputerSystem";
};
最佳答案
我有一个以类似方式工作的 USB 3G 加密狗。
它以两个完全独立的设备呈现给计算机:一个 CD-ROM 驱动器和一个 3G 加密狗。在您的情况下,它是一个 CD-ROM 驱动器和一个硬盘驱动器。
Windows 认为 G:
实际上是一个物理光驱。 G:
不是 PHYSICALDISK2
的分区。
这就是为什么您找不到 G:
和 PHYSICALDISK2
之间的直接连接:没有。
如果你深入研究,你可以发现 CD-ROM 和磁盘在同一 USB 总线上。我不知道您是否可以通过软件最终证明它们实际上是同一台设备。
关于c++ - 插入加密U盘后,如何使用WMI找到 'launcher'逻辑盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13123719/