Virtual drives и WMI
От: OldDino Россия  
Дата: 31.10.06 08:11
Оценка:
Добрый день.

Мне необходимо получить сообщение о подключении виртуального диска (скажем, подключаю образ диска). Какое сообщение из WMI я должен получить?
Кроме того, для получения перечня уже подключённых виртуальных дисков я перебираю логические диски и те их них, которые не являются разделами физических дисков, считаю виртуальными. Но, честно говоря, мне этот способ не очень нравится. Может быть, кто-нибудь знает более простой способ?

С уважением,

OldDino
Re: Virtual drives и WMI
От: OldDino Россия  
Дата: 01.11.06 06:05
Оценка:
Здравствуйте, OldDino, Вы писали:

OD>Мне необходимо получить сообщение о подключении виртуального диска (скажем, подключаю образ диска). Какое сообщение из WMI я должен получить?

OD>Кроме того, для получения перечня уже подключённых виртуальных дисков я перебираю логические диски и те их них, которые не являются разделами физических дисков, считаю виртуальными. Но, честно говоря, мне этот способ не очень нравится. Может быть, кто-нибудь знает более простой способ?

Решение найдено, вопрос снимается.

OldDino
Re[2]: Virtual drives и WMI
От: Красин Россия  
Дата: 01.11.06 06:07
Оценка:
Здравствуйте, OldDino, Вы писали:

Если не затруднит, опубликуйте, пожалуйста, решение.
Re[3]: Virtual drives и WMI
От: OldDino Россия  
Дата: 01.11.06 08:21
Оценка: 15 (1)
Здравствуйте, Красин, Вы писали:

К>Если не затруднит, опубликуйте, пожалуйста, решение.


Не затруднит. Собственно, решение состоит из двух частей. Первая используется при запуске программы. Допустим, мне нужно отобразить список дисков, как в Explorer'е. Я делаю следующим образом:


          ManagementObjectQuery query = "SELECT * FROM Win32_LogicalDisk WHERE MediaType<>11";
          ManagementObjectSearcher logicalDrivesSearcher = new ManagementObjectSearcher( query );
          ManagementObjectCollection logicalDrivesCollection = logicalDrivesSearcher.Get();
          if( 0x00 != logicalDrivesCollection.Count )
          {
            foreach( ManagementObject logicalDriveObject in logicalDrivesCollection )
            {
              ManagementObjectSearcher virtualDrivesSearcher = new ManagementObjectSearcher( "ASSOCIATORS OF {" + logicalDriveObject.Path + "} WHERE AssocClass=Win32_LogicalDiskToPartition" );
              ManagementObjectCollection drivesCollection = virtualDrivesSearcher.Get();
              if( 0x00 == drivesCollection.Count )
              {
                // Найденный логический диск является виртуальным. 
              }
            }
          }


Часть вторая. Подписываюсь на сообщения __InstanceCreationEvent и InstanceDeletionEvent, у которых TargetInstance = Win32_LogicalDisk. Определяю, не является ли диск CD-ником и не соответствует ли ему какой-либо раздел на физическом носителе. Если поверки пройдены нормально, то диск — виртуальный.

С уважением,

OldDino
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.