Получить активность жесткого диска через DeviceIOControl (WinAPI)

Мне нужно отображать файловую активность ввода/вывода диска в своем приложении. Отсюда вопрос. Из чего складывается показатель активности диска (активное время) как в Диспетчере задач? Знаю что эти данные берутся из структуры DISK_PERFORMANCE в DeviceIoControl, но в документации мне не ясно, откуда и как вычислить этот показатель. Чтобы было более понятно о чем я, прикладываю скрин. введите сюда описание изображения


Ответы (1 шт):

Автор решения: Blackmeser
#r "System.Management"
using System.Management;
char driveLetter = 'C';
var path = $"Win32_PerfFormattedData_PerfDisk_PhysicalDisk.Name='0 {driveLetter}:'";
var wmiObj = new ManagementObject(path);
wmiObj.Properties.Cast<PropertyData>()
   .ToDictionary(p => p.Name, p => p.Value)
   .ToList()
   .ForEach(a => WriteLine($"{a.Key}\t{a.Value}"));

Мой вывод:

AvgDiskBytesPerRead     0
AvgDiskBytesPerTransfer 161280
AvgDiskBytesPerWrite    161280
AvgDiskQueueLength      0
AvgDiskReadQueueLength  0
AvgDisksecPerRead       0
AvgDisksecPerTransfer   0
AvgDisksecPerWrite      0
AvgDiskWriteQueueLength 0
Caption 
CurrentDiskQueueLength  0
Description 
DiskBytesPersec         646075
DiskReadBytesPersec     0
DiskReadsPersec         0
DiskTransfersPersec     4
DiskWriteBytesPersec    646075
DiskWritesPersec        4
Frequency_Object    
Frequency_PerfTime  
Frequency_Sys100NS  
Name    0               C:
PercentDiskReadTime     0
PercentDiskTime         1
PercentDiskWriteTime    1
PercentIdleTime         98
SplitIOPerSec           0
Timestamp_Object    
Timestamp_PerfTime  
Timestamp_Sys100NS  

Нужный вам параметр: PercentDiskTime

Взято отсюда: https://stackoverflow.com/questions/36977903/how-can-we-get-disk-performance-info-in-c-sharp

→ Ссылка