我正在使用 WMI 来确定何时插入/放入各种形式的媒体(USB 驱动器、CD 等)。然而,诸如“SanDisk Enterprise FIPS USB”之类的加密驱动器做了一些时髦的事情:看起来它们将自己表现为一个可以启动解锁应用程序的 CD 驱动器。解锁实用程序完成后,新的 USB 逻辑磁盘可用于读/写。所以我从 WMI 看到的事件顺序是:
- USB 已插入
- Win32_DiskDrive 对象被创建(参见下面的 \.\PHYSICALDRIVE2)
- 创建了不同的 Win32_LogicalDisks,一个我复制到下面 (G:) 并保存启动器,另一个(M:,在我的例子中)是最终可以访问的驱动器。
但是,在实用程序运行之前不存在 Win32_DiskDriveToDiskPartition 条目,这是从硬件 ID 定位卷的常用方法。经过多次谷歌搜索和一些试验和错误,我一直无法找到将 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";
};