Класс 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 шины

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

SCSIPort— SCSI номер порта

SCSITargetId— SCSI идентификатор

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);
Оцените статью
Технологии программирования и ведение блога
Добавить комментарий