【问题标题】:How to identify if a drive is virtual or physical如何识别驱动器是虚拟驱动器还是物理驱动器
【发布时间】:2015-04-27 09:23:05
【问题描述】:

这来自我关于 IMAPI2 的另一个问题是否可以识别 DVD/CD 驱动器是虚拟的而不是物理的?

【问题讨论】:

  • @L.B OP 状态,DVD/CD 驱动器是虚拟的还是物理的;即...它是通过 MagicISO 之类的方式安装的,还是设备的物理组件。

标签: c#


【解决方案1】:

一种方法是导航到您的计算机目录,该目录包含 c:/ 驱动器和可移动硬盘。使用物理硬盘驱动器,如果您右键单击并弹出媒体,cd/dvd 托盘将滑出;但是,虚拟驱动器只会清除驱动器上存储的数据,但不会将托盘滑出笔记本电脑/计算机。

【讨论】:

  • 你也可以弄清楚你是否熟悉WMI..? google 了很多例子
【解决方案2】:

查看“DriveInfo”...查看它的 DriveType 属性。

System.IO.DriveInfo di = new System.IO.DriveInfo("X:\");

【讨论】:

    【解决方案3】:

    虚拟驱动器的目的是与其物理对应物完全一样,只是没有物理介质。这两种驱动器都以与设备驱动程序相同的方式与操作系统一起工作。我非常怀疑它们之间的区别在 Win32 API 中是否可见。这与虚拟驱动器的用途有悖常理。

    我查看了 WMI 提供的信息(可在 C# 中访问)并发现了一些有趣的东西。我的虚拟驱动器的设备 ID 以“SCSI”开头,而我的物理 SATA 驱动器的设备 ID 以“IDE”开头。我相信大多数(全部?)虚拟驱动器软件都模拟了 SCSI 驱动器。我不知道。通常,用户将拥有一个 IDE 或 SATA 光驱,它们的 id 都以“IDE”开头。

    Virtual Drive Device: "SCSI\CDROM&VEN_ELBY&PROD_CLONEDRIVE&REV_1.4\1&00000000&0&000000"
    Real Drive Device: "IDE\CDROMASUS_DRW-24B1ST_________________________1.03____\5&295AF142&0&5.0.0"
    

    请注意,在我的示例设备 ID 中,虚拟驱动器被明确标识为克隆驱动器软件。您可以对照已知的虚拟驱动器软件列表检查制造商和产品名称。这可能会产生很多假阴性并且很难维护。

    无论哪种方式,我都不相信在设备 ID 中搜索功能会是一个高度可靠的解决方案。可能存在以不同方式标识自己的虚拟驱动器。在研究您的问题时,我只测试了 Clone Drive 和 Daemon Tools。

    如果您要将这种方法用于版权保护(您还会将其用于什么用途?),那么您必须考虑虚假虚拟驱动器确定的可能性是否值得激怒您的客户。

    这是使用 WMI 检查驱动器并访问设备 ID 的 C# 代码。您将需要引用 System.Management 程序集。

    string driveLetter = "F";
    ManagementObjectSearcher diskQuery = new ManagementObjectSearcher(String.Format("SELECT * FROM Win32_CDROMDrive WHERE Drive='{0}:'", driveLetter));
    ManagementObject diskResult = diskQuery.Get().OfType<ManagementObject>().SingleOrDefault();
    string deviceID = null;
    if (diskResult != null)
        deviceID = (string)diskResult["DeviceID"];
    

    【讨论】:

      猜你喜欢
      • 2011-05-22
      • 2015-12-24
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      相关资源
      最近更新 更多