2

我正在使用 WMI 来确定何时插入/放入各种形式的媒体(USB 驱动器、CD 等)。然而,诸如“SanDisk Enterprise FIPS USB”之类的加密驱动器做了一些时髦的事情:看起来它们将自己表现为一个可以启动解锁应用程序的 CD 驱动器。解锁实用程序完成后,新的 USB 逻辑磁盘可用于读/写。所以我从 WMI 看到的事件顺序是:

  1. USB 已插入
  2. Win32_DiskDrive 对象被创建(参见下面的 \.\PHYSICALDRIVE2)
  3. 创建了不同的 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";
};
4

1 回答 1

0

我有一个以类似方式工作的 USB 3G 加密狗。

它以两个完全独立的设备呈现给计算机:一个 CD-ROM 驱动器和一个 3G 加密狗。在您的情况下,它是一个 CD-ROM 驱动器和一个硬盘驱动器。

Windows 认为G:实际上是一个物理 CD-ROM 驱动器。 G:不是PHYSICALDISK2.

这就是为什么您无法在G:and之间找到直接联系的原因PHYSICALDISK2:没有。

如果你挖掘得足够深,你会发现 CD-ROM 和磁盘在同一个 USB 总线上。我不知道您是否可以通过软件最终证明它们实际上是同一设备。

于 2012-10-29T20:09:46.223 回答