这来自我关于IMAPI2的另一个问题是否可以识别DVD / CD驱动器是虚拟的还是非物理的?
答案 0 :(得分:2)
虚拟驱动器的目的是完全像物理对象一样,只是没有物理介质。两种驱动器都以与设备驱动程序相同的方式与操作系统一起使用。我非常怀疑它们之间的区别在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中搜索功能将是一个非常可靠的解决方案。可能存在以不同方式识别自身的虚拟驱动器。我只测试了克隆驱动器和守护进程工具来研究你的问题。
如果您使用这种方法进行版权保护(还有什么用途呢?)那么您必须考虑虚假驱动器确定的可能性是否值得激怒您的客户。
以下是使用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"];
答案 1 :(得分:0)
查看“DriveInfo”...查看它的DriveType属性。
System.IO.DriveInfo di = new System.IO.DriveInfo(“X:\”);
答案 2 :(得分:-4)
一种方法是导航到您的计算机目录,即c:/ drive和可移动硬盘。使用物理硬盘驱动器,如果右键单击并弹出介质,cd / dvd托盘将滑出;但是,虚拟驱动器只会清除存储在驱动器上的数据,但不会将笔记本电脑/计算机上的托盘滑出。