微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何识别驱动器是虚拟还是物理

这是从我关于IMAPI2的另一个问题出发的,可以确定DVD / CD驱动器是虚拟的还是物理的?

解决方法

虚拟驱动器的目的是与其物理对象完全一样,只要没有物理介质即可.这两种驱动器与操作系统的工作方式与设备驱动程序相同.我非常怀疑它们之间的区别将在Win32 API中可见.这对虚拟驱动器的目的来说是直观的.

我看了WMI提供的信息(可以在C#中访问),并发现了一些有趣的东西.我的虚拟驱动器的设备ID开始于“SCSI”,而我的物理SATA驱动器的设备ID以“IDE”开头.我相信(所有的)虚拟驱动器软件大部分模拟SCSI驱动器;我不确定.通常,用户将具有IDE或SATA光驱,它们都将以“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中搜索功能将是一个高度可靠的解决方案.可能有虚拟驱动器识别自己的不同.我只测试了克隆驱动器和守护进程工具来研究你的问题.

如果您使用这种方法进行版权保护(还有什么用途?),那么您必须考虑虚假虚拟驱动器的确定机会是否值得激怒您的客户.

以下是使用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"];

原文地址:https://www.jb51.cc/csharp/94452.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐