Blog. Just Blog

Мониторинг активности HDD на Ассемблере

09.01.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
В качестве предисловия коротенький анекдот из времен MS-DOS: "- Висим... - Не висим. - Висим! - Не висим, говорю - диском дpыгает." И действительно, активность жесткого диска, выражавшаяся в моргании соответствующего индикатора на корпусе, говорила о работе процесса, просто надо было подождать. Но иногда такие индикаторы отсутствовали или системник стоял в таком месте, что их не было видно. В этих случаях приходилось решать задачу различными программами, которые отображали активность жесткого диска как-нибудь иначе, например, морганием светодиода ScrollLock на клавиатуре.

Вот и мне захотелось сделать что-нибудь подобное. Естественно, на Ассемблере. Для начала некоторые данные, о которых не знает FASM.
  1. struct DISK_PERFORMANCE
  2.     BytesRead     dq ?
  3.     BytesWritten  dq ?
  4.     ReadTime      dq ?
  5.     WriteTime     dq ?
  6.     IdleTime      dq ?
  7.     ReadCount     dd ?
  8.     WriteCount    dd ?
  9.     QueueDepth    dd ?
  10.     SplitCount    dd ?
  11.     QueryTime     dd ?
  12.     StorageDeviceNumber dd ?
  13.     StorageManagerName  rd 8
  14. ends
  15.  
  16. IOCTL_DISK_PERFORMANCE = 0x70020
Дальше немного теории. Текущее состояние жесткого диска можно узнать при помощи функции DeviceIoControl с параметром IOCTL_DISK_PERFORMANCE. При удачном выполнении операции будет возвращена заполненная структура DISK_PERFORMANCE. В документации написано, что в полях ReadTime и WriteTime передаются счетчики времени, необходимые для выполнения операций чтения или записи. Сохранив текущее значение этих счетчиков и периодически сравнивая текущие значения с сохраненными данными, можно смело утверждать о выполнении операции жестким диском. И, соответственно, каким-то образом оповещать об этом пользователя.

Читать статью целиком »
Просмотров: 580 | Комментариев: 0

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.09 сек. / MySQL: 1 (0.0182 сек.) / Память: 4.5 Mb
Наверх