我正在使用WMI来确定何时插入/插入各种形式的媒体(USB驱动器,CD等)。但是,诸如“SanDisk Enterprise FIPS USB”之类的加密驱动器的功能却很时髦:它们看起来像是CD驱动器,可以从中启动解锁应用程序。解锁实用程序完成后,新的USB逻辑磁盘可用于读取/写入。因此,从WMI看事件的顺序是:
但是,直到运行实用程序之后,才存在Win32_DiskDriveToDiskPartition条目,这是从硬件ID查找卷的常用方法。经过大量的google和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:
实际上是一个物理CD-ROM驱动器。 G:
不是PHYSICALDISK2
的分区。
这就是为什么您无法在G:
和PHYSICALDISK2
之间找到直接连接的原因:没有一个。
如果您深入研究,可能表明CD-ROM和磁盘位于同一USB总线上。我不知道您是否可以通过软件最终证明它们实际上是同一设备。