Класс Win32_DiskDrive — информация о жестком диске

Класс Win32_DiskDrive — информация о жестком диске Объектная модель Windows Management Instrumentation

Класс Win32_DiskDrive позволяет получить информацию о жестком диске, точнее о его технических параметрах (количество секторов, головок, дополнительные функции и так далее). В состав класса входят 49 свойств, которые доступны только для чтения и 2 метода, которые не имеют реализации. Win32_DiskDrive происходит от класса CIM_DiskDrive, который является производным от CIM_MediaAccessDevice. Класс CIM_MediaAccessDevice происходит от CIM_LogicalDevice.

Класс находится в пространстве имен CIMV2, MOF файл — Cimwin32.mof, динамическая библиотека Cimwin32.dll, провайдер Win32. Если открыть утилиту WMI CIM Studio, выбрать в левой панели наш класс, а в правой панели перейти на вкладку Associations, то можно просмотреть ассоциативные связи с классами Win32_DiskPartition и Win32_PhysicalMedia.

Просмотр ассоциативных классов, связанных с win32_diskdrive

Аналогично, для просмотра ассоциативных связей можно в командной строке выполнить следующую команду:

wmic CLASS Win32_DiskDrive ASSOC

Так как вывод происходит в htm формате, то можно просто перенаправить его во внешний файл:

wmic CLASS Win32_DiskDrive ASSOC>"путь к файлу"

В принципе, в той же командной строке можно получить описание самого класса (точнее, список всех его свойств и методов):

wmic CLASS Win32_DiskDrive

Ниже я привел описание некоторых свойств для класса Win32_DiskDrive, которые позволяют получить информацию о жестком диске. В круглых скобках содержится имя класса, от которого свойство унаследовано.

Свойства Win32_DiskDrive

BytesPerSectorКоличество байт в каждом секторе для заданного диска.

CapabilitiesСвойство содержит информацию о дополнительных технических характеристиках в виде числовых значений, хранящихся в виде массива, (CIM_MediaAccessDevice). Примеры значений:

  • 0 — неизвестно
  • 1 — другое
  • 2 — последовательный доступ
  • 3 — случайный доступ
  • 4 — поддержка записи
  • 5 — шифрование
  • 6 — сжатие
  • 7 — поддержка съемных носителей
  • 8 — ручная очистка
  • 9 — автоматическая очистка
  • 10 — SMART уведомление
  • 11 — Поддержка Dual-Sided носителя
  • 12 — Ejection Prior to Drive Dismount Not Required — это оставим как есть :)

CapabilityDescriptionsМассив строк, в которых хранится описание характеристик, указанных в свойстве Capabilities, (CIM_MediaAccessDevice)

CaptionКраткое описание объекта, (CIM_ManagedSystemElement).

CompressionMethodАлгоритм или инструмент, используемый в устройстве для поддержки сжатия, информация о жестком диске, (CIM_MediaAccessDevice). Возвращает строки:

  • Unknown — Неизвестно, поддерживает устройство возможность сжатия или нет.
  • Compressed — Устройство поддерживает возможность сжатия данных, но его схема сжатия не известно или не разглашается.
  • Not Compressed — Устройство не поддерживает сжатие.

ConfigManagerUserConfigВозвращает логическое значение (TRUE или FALSE). Если значение TRUE, то данное устройство использует конфигурацию, определенную пользователем, (CIM_LogicalDevice).

CreationClassNameИмя класса-создателя, (CIM_LogicalDevice).

DefaultBlockSizeРазмер по умолчанию блока в байтах, (CIM_MediaAccessDevice).

DescriptionОписание объекта, (CIM_ManagedSystemElement).

DeviceIDУникальный идентификатор устройства, это свойство является ключевым, (CIM_LogicalDevice).

IndexФизический номер диска

InterfaceTypeСобственно, тип интерфейса. Возможные значения:

  • SCSI
  • HDC
  • IDE
  • USB
  • 1394

ManufacturerНаименование изготовителя диска. Например: «Seagate»

MaxBlockSizeМаксимальный размер блока в байтах, (CIM_MediaAccessDevice).

MaxMediaSizeМаксимальный размер носителя в килобайтах, (CIM_MediaAccessDevice).

MediaTypeТип носителей используемых данным устройством. Возможные значения:

  • External hard disk media
  • Removable media other than floppy
  • Fixed hard disk media
  • Format is unknown
  • Removable media
  • Fixed hard disk
  • Unknown

MinBlockSizeМинимальный размер блока в байтах, (CIM_MediaAccessDevice).

ModelНомер модели производителя.

NameМетка, определяющая объект (устройство), (CIM_ManagedSystemElement).

NeedsCleaningЕсли свойство возвращает значение True, значит устройство нуждается в очистке. Поддерживаемый тип очистки указывается в свойстве Capabilities, информация о жестком диске, (CIM_MediaAccessDevice).

NumberOfMediaSupportedМаксимальное количество носителей, которые могут поддерживаться или подключаться (при условии, что устройство поддерживает несколько индивидуальных носителей), (CIM_MediaAccessDevice).

PartitionsКоличество разделов на текущем диске, которые распознаются операционной системой.

PowerManagementCapabilitiesСвойство содержит массив, хранящий информацию о специфических элементах питания устройства, (CIM_LogicalDevice).

Возможные значения:

  • (0x0) — Неизвестно
  • (0x1) — Не поддерживается
  • (0x2) — Отключено
  • (0x3) — Включено. Функции управления питанием в настоящее время включена, но точный набор функций неизвестен или информация недоступна.
  • (0x4) — Энергосберегающий режим активируется автоматически. Устройство может изменять свое состояние питания на основе использования или по другим критериям.
  • (0x5) — Состояние питания можно настраивать. Поддерживается метод SetPowerState, который находится в родительском классе CIM_LogicalDevice и может быть реализован.
  • (0x6) — Поддержка полных циклов включения-выключения диска. Метод SetPowerState можно вызвать с установленным значением 5 (Power Cycle) параметра PowerState.
  • (0x7) — Поддерживается временное включение питания. Метод SetPowerState можно вызвать с установленным значением 5 (Power Cycle) параметра PowerState и установкой заданной даты и времени, или интервала, для включения питания. Получение информации о жестких дисках.

PowerManagementSupportedСвойство содержит логические значения. Если TRUE, то устройство поддерживает управление питанием (например, можно поставить в режим ожидания). Само свойство не означает, что функции управления питанием в настоящее время включены, только то, что логическое устройство поддерживает управление питанием, (CIM_LogicalDevice).

SCSIBusНомер SCSI шины

SCSILogicalUnitSCSI логический номер устройства (LUN)

SCSIPortSCSI номер порта

SCSITargetIdSCSI идентификатор

SectorsPerTrackКоличество секторов в каждой дорожке для даного физического диска.

SerialNumberСерийный номер устройства (например, WD-WM3493798728), определенный производителем. Фактически, из всего списка (бесполезных) свойств, данное самое важное, но….. оно не поддерживается в Windows Server 2003 и Windows XP.

SignatureИдентификация диска. Это свойство может быть использовано для определения общего ресурса. Оно было добавлено для Windows XP.

SizeРазмер диска. Он рассчитывается путем умножения общего количества цилиндров, дорожек в каждом цилиндре, секторов в каждой дорожке, и байт в каждом секторе.

StatusТекущий статус объекта, (CIM_ManagedSystemElement).

Возможные значения:

  • «OK»
  • «Error»
  • «Degraded»
  • «Unknown»
  • «Pred Fail»
  • «Starting»
  • «Stopping»
  • «Service»
  • «Stressed»
  • «NonRecover»
  • «No Contact»
  • «Lost Comm»

SystemNameНазвание компьютера, (CIM_LogicalDevice).

TotalCylindersСвойство содержит общее количество цилиндров на диске, используется 13 h прерывание BIOS.

TotalHeadsОбщее количество головок на диске, используется 13 h прерывание BIOS.

TotalSectorsОбщее количество секторов на диске, используется 13 h прерывание BIOS.

TotalTracksОбщее количество дорожек на диске, используется 13 h прерывание BIOS

TracksPerCylinderКоличество дорожек в каждом цилиндре, используется 13 h прерывание BIOS.

Нахождение класса win32_diskdrive в дереве классов

Ниже, как всегда, я приведу два сценария на языках vbscript (Win32_DiskDrive.vbs) и jscript (Win32_DiskDrive.js), они по сути просто записывают в переменную значения свойств и потом выводят эту информацию о жестком диске и все.

'**************************************************************
' Информация о жестком диске
' Win32_DiskDrive.vbs 
'**************************************************************
 
Option Explicit
 
Dim strComputer, objWMIService, colItems, MouseInfo, DiskInfo, objItem, i
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive",,48)
 
DiskInfo = "Информация о жестком диске" & vbCrlf & vbCrlf
 
' Перебираем коллекцию
For Each objItem in colItems
   DiskInfo = DiskInfo & "Availability: " & objItem.Availability & vbCrLf
   DiskInfo = DiskInfo & "BytesPerSector: " & objItem.BytesPerSector & vbCrLf
 
   ' Проверяем, существует ли массив
   If NOT isNull(objItem.Capabilities) Then
        ' Начинаем обработку массива
        For i = Lbound(objItem.Capabilities) to Ubound(objItem.Capabilities)
            'DiskInfo = DiskInfo & "Capabilities: " & objItem.Capabilities(i) & vbCrLf
            Select Case objItem.Capabilities(i)
                Case 0 DiskInfo = DiskInfo & "Capabilities: " & "неизвестно" & vbCrLf
                Case 1 DiskInfo = DiskInfo & "Capabilities: " & "другое" & vbCrLf
                Case 2 DiskInfo = DiskInfo & "Capabilities: " & "последовательный доступ" & vbCrLf
                Case 3 DiskInfo = DiskInfo & "Capabilities: " & "случайный доступ" & vbCrLf
                Case 4 DiskInfo = DiskInfo & "Capabilities: " & "поддержка записи" & vbCrLf
                Case 5 DiskInfo = DiskInfo & "Capabilities: " & "шифрование" & vbCrLf
                Case 6 DiskInfo = DiskInfo & "Capabilities: " & "сжатие" & vbCrLf
                Case 7 DiskInfo = DiskInfo & "Capabilities: " & "поддержка съемных носителей" & vbCrLf
                Case 8 DiskInfo = DiskInfo & "Capabilities: " & "ручная очистка" & vbCrLf
                Case 9 DiskInfo = DiskInfo & "Capabilities: " & "автоматическая очистка" & vbCrLf
                Case 10 DiskInfo = DiskInfo & "Capabilities: " & "SMART уведомление" & vbCrLf
                Case 11 DiskInfo = DiskInfo & "Capabilities: " & "Поддержка Dual-Sided носителя" & vbCrLf
                Case Else DiskInfo = DiskInfo & "Capabilities: " & "Ejection Prior to Drive Dismount Not Required" & vbCrLf
            End Select
        Next
    End If
 
    ' Проверяем, существует ли массив
    If NOT isNull(objItem.CapabilityDescriptions) Then
        DiskInfo = DiskInfo & "CapabilityDescriptions: " & Join(objItem.CapabilityDescriptions, ",") & vbCrLf
    End If
 
    DiskInfo = DiskInfo & "Caption: " & objItem.Caption & vbCrLf
    DiskInfo = DiskInfo & "CompressionMethod: " & objItem.CompressionMethod & vbCrLf
    DiskInfo = DiskInfo & "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode & vbCrLf
    DiskInfo = DiskInfo & "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig & vbCrLf
    DiskInfo = DiskInfo & "CreationClassName: " & objItem.CreationClassName & vbCrLf
    DiskInfo = DiskInfo & "DefaultBlockSize: " & objItem.DefaultBlockSize & vbCrLf
    DiskInfo = DiskInfo & "Description: " & objItem.Description & vbCrLf
    DiskInfo = DiskInfo & "DeviceID: " & objItem.DeviceID & vbCrLf
    DiskInfo = DiskInfo & "ErrorCleared: " & objItem.ErrorCleared & vbCrLf
    DiskInfo = DiskInfo & "ErrorDescription: " & objItem.ErrorDescription & vbCrLf
    DiskInfo = DiskInfo & "ErrorMethodology: " & objItem.ErrorMethodology & vbCrLf
    DiskInfo = DiskInfo & "Index: " & objItem.Index & vbCrLf
    DiskInfo = DiskInfo & "InstallDate: " & objItem.InstallDate & vbCrLf
    DiskInfo = DiskInfo & "InterfaceType: " & objItem.InterfaceType & vbCrLf
    DiskInfo = DiskInfo & "LastErrorCode: " & objItem.LastErrorCode & vbCrLf
    DiskInfo = DiskInfo & "Manufacturer: " & objItem.Manufacturer & vbCrLf
    DiskInfo = DiskInfo & "MaxBlockSize: " & objItem.MaxBlockSize & vbCrLf
    DiskInfo = DiskInfo & "MaxMediaSize: " & objItem.MaxMediaSize & vbCrLf
    DiskInfo = DiskInfo & "MediaLoaded: " & objItem.MediaLoaded & vbCrLf
    DiskInfo = DiskInfo & "MediaType: " & objItem.MediaType & vbCrLf
    DiskInfo = DiskInfo & "MinBlockSize: " & objItem.MinBlockSize & vbCrLf
    DiskInfo = DiskInfo & "Model: " & objItem.Model & vbCrLf
    DiskInfo = DiskInfo & "Name: " & objItem.Name & vbCrLf
    DiskInfo = DiskInfo & "NeedsCleaning: " & objItem.NeedsCleaning & vbCrLf
    DiskInfo = DiskInfo & "NumberOfMediaSupported: " & objItem.NumberOfMediaSupported & vbCrLf
    DiskInfo = DiskInfo & "Partitions: " & objItem.Partitions & vbCrLf
    DiskInfo = DiskInfo & "PNPDeviceID: " & objItem.PNPDeviceID & vbCrLf
 
    ' Проверяем, существует ли массив
    if NOT isNull(objItem.PowerManagementCapabilities) Then
        DiskInfo = DiskInfo & "PowerManagementCapabilities: " & Join(objItem.PowerManagementCapabilities, ",") & vbCrLf
    End If
 
   DiskInfo = DiskInfo & "PowerManagementSupported: " & objItem.PowerManagementSupported & vbCrLf
   DiskInfo = DiskInfo & "SCSIBus: " & objItem.SCSIBus & vbCrLf
   DiskInfo = DiskInfo & "SCSILogicalUnit: " & objItem.SCSILogicalUnit & vbCrLf
   DiskInfo = DiskInfo & "SCSIPort: " & objItem.SCSIPort & vbCrLf
   DiskInfo = DiskInfo & "SCSITargetId: " & objItem.SCSITargetId & vbCrLf
   DiskInfo = DiskInfo & "SectorsPerTrack: " & objItem.SectorsPerTrack & vbCrlf
 
   'DiskInfo = DiskInfo & "SerialNumber: " & objItem.SerialNumber & vbCrLf  ' недоступно в XP
   DiskInfo = DiskInfo & "Signature: " & objItem.Signature & vbCrLf
   DiskInfo = DiskInfo & "Size: " & objItem.Size & vbCrLf
   DiskInfo = DiskInfo & "Status: " & objItem.Status & vbCrLf
   DiskInfo = DiskInfo & "StatusInfo: " & objItem.StatusInfo & vbCrLf
   DiskInfo = DiskInfo & "SystemCreationClassName: " & objItem.SystemCreationClassName & vbCrLf
   DiskInfo = DiskInfo & "SystemName: " & objItem.SystemName & vbCrLf
   DiskInfo = DiskInfo & "TotalCylinders: " & objItem.TotalCylinders & vbCrLf
   DiskInfo = DiskInfo & "TotalHeads: " & objItem.TotalHeads & vbCrLf
   DiskInfo = DiskInfo & "TotalSectors: " & objItem.TotalSectors & vbCrLf
   DiskInfo = DiskInfo & "TotalTracks: " & objItem.TotalTracks & vbCrLf
   DiskInfo = DiskInfo & "TracksPerCylinder: " & objItem.TracksPerCylinder & vbCrLf & vbCrLf
Next
 
' выводим данные
WScript.Echo  DiskInfo
//**************************************************************
// Информация о жестком диске
// Win32_DiskDrive.js 
//**************************************************************
 
var strComputer, objWMIService, colItems, MouseInfo, DiskInfo, objItem, i
var wbR = 0x10, wbF = 0x20;
 
strComputer = "."
objWMIService = GetObject("winmgmts:\\\\" + strComputer + "\\root\\cimv2")
colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", "WQL", wbR | wbF);
 
DiskInfo = "Информация о жестком диске\n\n";
 
// Перебираем коллекцию
enumItems = new Enumerator(colItems);
for (; !enumItems.atEnd(); enumItems.moveNext()) {
    objItem = enumItems.item();
 
   DiskInfo += "Availability: " + objItem.Availability+ "\n";
   DiskInfo += "BytesPerSector: " + objItem.BytesPerSector+ "\n";
 
   // Проверяем, существует ли массив
    try { 
        DiskInfo += "Capabilities: " + (objItem.Capabilities.toArray()).join(",") + "\n";
    }catch(e){ 
        DiskInfo += "Capabilities: значение отсутствует\n"; 
    }
 
    // Проверяем, существует ли массив
    try { 
        DiskInfo += "CapabilityDescriptions: " + (objItem.CapabilityDescriptions.toArray()).join(",") + "\n";
    }catch(e){ 
        DiskInfo += "CapabilityDescriptions: значение отсутствует\n"; 
    }
 
    DiskInfo += "Caption: " + objItem.Caption+ "\n";
    DiskInfo += "CompressionMethod: " + objItem.CompressionMethod+ "\n";
    DiskInfo += "ConfigManagerErrorCode: " + objItem.ConfigManagerErrorCode+ "\n";
    DiskInfo += "ConfigManagerUserConfig: " + objItem.ConfigManagerUserConfig+ "\n";
    DiskInfo += "CreationClassName: " + objItem.CreationClassName+ "\n";
    DiskInfo += "DefaultBlockSize: " + objItem.DefaultBlockSize+ "\n";
    DiskInfo += "Description: " + objItem.Description+ "\n";
    DiskInfo += "DeviceID: " + objItem.DeviceID+ "\n";
    DiskInfo += "ErrorCleared: " + objItem.ErrorCleared+ "\n";
    DiskInfo += "ErrorDescription: " + objItem.ErrorDescription+ "\n";
    DiskInfo += "ErrorMethodology: " + objItem.ErrorMethodology+ "\n";
    DiskInfo += "Index: " + objItem.Index+ "\n";
    DiskInfo += "InstallDate: " + objItem.InstallDate+ "\n";
    DiskInfo += "InterfaceType: " + objItem.InterfaceType+ "\n";
    DiskInfo += "LastErrorCode: " + objItem.LastErrorCode+ "\n";
    DiskInfo += "Manufacturer: " + objItem.Manufacturer+ "\n";
    DiskInfo += "MaxBlockSize: " + objItem.MaxBlockSize+ "\n";
    DiskInfo += "MaxMediaSize: " + objItem.MaxMediaSize+ "\n";
    DiskInfo += "MediaLoaded: " + objItem.MediaLoaded+ "\n";
    DiskInfo += "MediaType: " + objItem.MediaType+ "\n";
    DiskInfo += "MinBlockSize: " + objItem.MinBlockSize+ "\n";
    DiskInfo += "Model: " + objItem.Model+ "\n";
    DiskInfo += "Name: " + objItem.Name+ "\n";
    DiskInfo += "NeedsCleaning: " + objItem.NeedsCleaning+ "\n";
    DiskInfo += "NumberOfMediaSupported: " + objItem.NumberOfMediaSupported+ "\n";
    DiskInfo += "Partitions: " + objItem.Partitions+ "\n";
    DiskInfo += "PNPDeviceID: " + objItem.PNPDeviceID+ "\n";
 
    // Проверяем, существует ли массив
    try { 
        DiskInfo += "PowerManagementCapabilities: " + (objItem.PowerManagementCapabilities.toArray()).join(",") + "\n";
    }catch(e){ 
        DiskInfo += "PowerManagementCapabilities: значение отсутствует\n"; 
    }
 
   DiskInfo += "PowerManagementSupported: " + objItem.PowerManagementSupported + "\n";
   DiskInfo += "SCSIBus: " + objItem.SCSIBus+ "\n";
   DiskInfo += "SCSILogicalUnit: " + objItem.SCSILogicalUnit + "\n";
   DiskInfo += "SCSIPort: " + objItem.SCSIPort + "\n";
   DiskInfo += "SCSITargetId: " + objItem.SCSITargetId + "\n";
   DiskInfo += "SectorsPerTrack: " + objItem.SectorsPerTrack + "\n";
 
   //DiskInfo += "SerialNumber: " + objItem.SerialNumber + "\n";  // недоступно в XP
   DiskInfo += "Signature: " + objItem.Signature + "\n";
   DiskInfo += "Size: " + objItem.Size + "\n";
   DiskInfo += "Status: " + objItem.Status + "\n";
   DiskInfo += "StatusInfo: " + objItem.StatusInfo + "\n";
   DiskInfo += "SystemCreationClassName: " + objItem.SystemCreationClassName + "\n";
   DiskInfo += "SystemName: " + objItem.SystemName + "\n";
   DiskInfo += "TotalCylinders: " + objItem.TotalCylinders + "\n";
   DiskInfo += "TotalHeads: " + objItem.TotalHeads + "\n";
   DiskInfo += "TotalSectors: " + objItem.TotalSectors + "\n";
   DiskInfo += "TotalTracks: " + objItem.TotalTracks + "\n";
   DiskInfo += "TracksPerCylinder: " + objItem.TracksPerCylinder + "\n\n";
}
 
// выводим данные
WScript.Echo(DiskInfo);
Оцените статью
Технологии программирования и ведение блога
Добавить комментарий