我正在使用WMI来确定何时插入/插入各种形式的媒体(USB驱动器,CD等)。但是,诸如“SanDisk Enterprise FIPS USB”之类的加密驱动器的功能却很时髦:它们看起来像是CD驱动器,可以从中启动解锁应用程序。解锁实用程序完成后,新的USB逻辑磁盘可用于读取/写入。因此,从WMI看事件的顺序是:

  • 已插入USB
  • Win32_DiskDrive对象已创建(请参见下面的\。\ PHYSICALDRIVE2)
  • 创建了
  • 不同的Win32_LogicalDisks,我在下面(G :)复制了一个,并保存了启动器,另一个(在我的情况下为M :)是最终可以访问的驱动器。

  • 但是,直到运行实用程序之后,才存在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总线上。我不知道您是否可以通过软件最终证明它们实际上是同一设备。

    09-20 15:59