Как определить, является ли диск виртуальным или физическим

Это возникло из моего другого вопроса об IMAPI2. Можно ли определить, является ли дисковод DVD /CD виртуальным, а не физическим?

c#
11 голосов | спросил sparky 15 ThuEurope/Moscow2011-12-15T23:38:32+04:00Europe/Moscow12bEurope/MoscowThu, 15 Dec 2011 23:38:32 +0400 2011, 23:38:32

2 ответа


0

Цель виртуального диска - действовать точно так же, как его физический аналог, только без физического носителя. Оба типа дисков работают с операционной системой так же, как драйвер устройства. Я очень сомневаюсь, что разница между ними будет видна в Win32 API. Это противоречит цели виртуального диска.

Я просмотрел информацию, предоставленную WMI (которая доступна в C #), и нашел кое-что интересное. Идентификатор устройства моего виртуального диска начинался с «SCSI», тогда как идентификатор устройства моего физического диска SATA начинался с «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"

Обратите внимание, в моем примере идентификаторы устройств, что виртуальный диск четко определен как программное обеспечение Clone Drive. Вы можете проверить производителя и название продукта по известному списку программного обеспечения виртуального диска. Это может привести к множеству ложных негативов и будет очень трудно поддерживать.

В любом случае, я не уверен, что поиск функций в идентификаторе устройства будет очень надежным решением. Там могут быть виртуальные диски, которые идентифицируют себя по-разному. Я только протестировал Clone Drive и Daemon Tools при изучении вашего вопроса.

Если бы вы использовали этот подход для защиты авторских прав (для чего бы вы его еще использовали?), вам следует подумать о том, стоит ли вероятность ложного определения виртуального диска рассердить ваших клиентов.

Вот код C # для проверки дисков с помощью WMI и доступа к идентификатору устройства. Вам нужно будет сослаться на сборку 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"];
ответил Scott 16 FriEurope/Moscow2011-12-16T11:42:29+04:00Europe/Moscow12bEurope/MoscowFri, 16 Dec 2011 11:42:29 +0400 2011, 11:42:29
0

Посмотрите на "DriveInfo" ... Посмотрите на его свойство DriveType.

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

ответил DRapp 16 FriEurope/Moscow2011-12-16T00:43:21+04:00Europe/Moscow12bEurope/MoscowFri, 16 Dec 2011 00:43:21 +0400 2011, 00:43:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132