none
Получение информации о жестком диске и разделах через WMI RRS feed

  • Вопрос

  • Добрый день,

    В общем, ситуация: есть классы Win32_DiskDrive , Win32_DiskPartition и Win32_Volume.  Надо получить информацию о разделах, но если диск MBR и есть extended раздел внутри которого есть logical, то Win32_DiskPartition видит только Primary и Extended, а logical и free space внутри него(который может использоваться для создания раздела) - нет, так как Extended занимает весь доступный объем диска.

    Есть еще класс Win32_Volume, дающий информацию о томах, но ее напрямую нельзя связать с диском.
    Вопрос: можно ли без использования WINAPI(используя только WMI) получить полную информацию о дисках и их разделах? В частности интересует полная информация о несмонтированных logical-томах и свободном месте внутри extended-раздела.

    24 июня 2015 г. 6:35

Все ответы

  • Если для C#, то предварительно добавив ссылку на System.Management.dll, можно получить информацию по каждому разделу (данные в килобайтах):

    using System.Management;

    ...

          ConnectionOptions options = new ConnectionOptions();
          ManagementScope scope = new ManagementScope("\\\\localhost\\root\\cimv2", 
          options);
          scope.Connect();
          ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
          SelectQuery query1 = new SelectQuery("Select * from Win32_LogicalDisk");

          ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
          ManagementObjectCollection queryCollection = searcher.Get();
          ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(scope, query1);
          ManagementObjectCollection queryCollection1 = searcher1.Get();

          foreach (ManagementObject m in queryCollection)
          {
              // Display the remote computer information

              Console.WriteLine("Computer Name : {0}", m["csname"]);
              Console.WriteLine("Windows Directory : {0}", m["WindowsDirectory"]);
              Console.WriteLine("Operating System: {0}", m["Caption"]);
              Console.WriteLine("Version: {0}", m["Version"]);
              Console.WriteLine("Manufacturer : {0}", m["Manufacturer"]);
              Console.WriteLine();
          }

          foreach (ManagementObject mo in queryCollection1)
          {
              // Display Logical Disks information

             Console.WriteLine("              Disk Name : {0}", mo["Name"]);
             Console.WriteLine("              Disk Size : {0}", mo["Size"]);
             Console.WriteLine("              FreeSpace : {0}", mo["FreeSpace"]);
             Console.WriteLine("          Disk DeviceID : {0}", mo["DeviceID"]);
             Console.WriteLine("        Disk VolumeName : {0}", mo["VolumeName"]);
             Console.WriteLine("        Disk SystemName : {0}", mo["SystemName"]);
             Console.WriteLine("Disk VolumeSerialNumber : {0}", mo["VolumeSerialNumber"]);
             Console.WriteLine();
          }
          string line;
          line = Console.ReadLine();


    Автор кода: George Stocker




    • Изменено TDDinAction 14 июля 2015 г. 9:07
    14 июля 2015 г. 8:18
  • а Win32_LogicalDisk не поможет решить вашу задачу?

    my blog: http://shserg.ru/

    16 июля 2015 г. 12:00