如何识别驱动器是虚拟的还是物理的

本文关键字:虚拟 驱动器 何识别 识别 | 更新日期: 2023-09-27 18:17:55

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

如何识别驱动器是虚拟的还是物理的

虚拟驱动器的目的是与物理驱动器完全相同,只是没有物理介质。这两种驱动器都以与设备驱动程序相同的方式与操作系统一起工作。我非常怀疑它们之间的差异在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中,虚拟驱动器被清楚地标识为Clone drive软件。您可以根据已知的虚拟驱动器软件列表检查制造商和产品名称。这可能会产生很多假阴性,并且很难维护。

无论哪种方式,我都不相信在设备id中搜索功能将是一个高度可靠的解决方案。可能存在标识自己不同的虚拟驱动器。我只测试了克隆驱动器和守护进程工具在研究你的问题。

如果你要使用这种方法来保护版权(你还会用它来做什么?),那么你必须考虑是否值得让你的客户生气。

下面是使用WMI检查驱动器和访问设备id的c#代码。您将需要引用系统。管理装配。

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"];

查看"DriveInfo"…看一下它的DriveType属性

先。DriveInfo di = new System.IO。DriveInfo("X: '");

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