Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ Монитор процессов и потоков СП_правленный.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
197 Кб
Скачать
☆
      1. Получение информации счетчиков ввода-вывода

и количества описателей (дескрипторов)

Содержимое счетчиков ввода-вывода – количество прочитанных - записанных байт может быть получено функцией GetProcessIoCounters(Handle: Thandle; pIOCounters : TProcessIOCounters ): bool.

Первый аргумент определяет процесс, второй – указатель на структуру

TProcessIOCounters = record

ReadOperationCount: int64;

WriteOperationCount: int64;

OtherOperationCount: int64;

ReadTransferCount: int64;

WriteOTransferCount: int64;

OtherOTransferCount: int64;

end;

Данная функция содержится в библиотеке kernel32.dll. Поскольку прототип данной функции в файле windows.pas отсутствует, для вызова данной функции (как и всех описанных далее в этой работе функций) используется неявный вызов. Для неявного вызова функции из библиотеки динамической загрузки (DLL) в программе должен быть создан прототип. Пример прототипа:

function GetProcessIoCounters(Hprocess: Thandle; PIOCount : TpprocessIOCounters): BOOL; stdcall external 'kernel32.dll';

Прототипы определенных таким образом функций должны содержать:

  • имя функции (регистр учитывается);

  • формальные аргументы и их типы;

  • имя содержащей функцию библиотеки.

Прототипы записываются в разделе implementation. Типы аргументов (не описанные в windows.pas) должны быть описаны в разделе type.

Для рассматриваемого примера в раздел type следует записать:

TProcessIOCounters = record

ReadOperationCount : int64;

WriteOperationCount : int64;

OtherOperationCount : int64;

ReadTransferCount : int64;

WriteOTransferCount : int64;

OtherOTransferCount : int64;

end;

TpprocessIOCounters = ^TprocessIOCounters;

а в раздел implementation вставить описание прототипа:

function GetProcessIoCounters(Hprocess: Thandle; PIOCount : TpprocessIOCounters): BOOL; stdcall external 'kernel32.dll';

Ошибка в названии библиотеки приводит к появлению на этапе выполнения сообщения «библиотека не найдена», ошибка в написании имени функции (РЕГИСТР учитывается!) – к появлению сообщения «функция XXX не найдена в библиотеке YYY».

Ecли имя функции и имя библиотеки заданы правильно, описанную функцию можно вызывать, указывая правильные типы аргументов.

Функция GetProcessHandleCount(Hprocess: Thandle; PHandCount : TphandCount ): Bool из библиотеки kernel32.dll возвращает указатель на переменную типа Dword, содержащую количество созданных указанных процессом описателей (дескрипторов). Для использования функции необходимо создать прототип для ее вызова из библиотеки, описать переменную HandCount : Dword и указать вторым аргументом функции адрес этой переменной, например:

GetProcessHandleCount (GetCurrentProcess,@HandCount);

      1. Получение информации об используемой процессом памяти

Функция GetProcessMemoryInfo(Hprocess: Thandle; pmemcount: PPROCESS_MEMORY_COUNTERS) : Bool

из библиотеки Psapi.dll содержит различную информацию об используемой процессом памяти. Процесс задается описателем (Handle), структура, содержащая информацию об использовании памяти задается указателем.

TProcess_Memory_Counters = record

size : Dword; // размер структуры

PageFaultCount: Dword; // количество страничных ошибок

PeakWorkingSetSize: cardinal; // пиковый размер используемой ОП

WorkingSetSize: cardinal; // используемый объем ОП

QuotaPeakPagePoolUsage: cardinal;//максимальный размер страничного пула памяти

QuotaPagePoolUsage: cardinal; // размер страничного пула памяти

QuotaPeakNonPagedPoolUsage: cardinal;//макс размер невыгружаемого пула памяти

QuotaNonPagePollUsage: cardinal; // размер невыгружаемого пула памяти

PageFileUsage: cardinal;

PeakPageFileUsage: cardinal;

PrivateUsage: cardinal;

end;

Для использования функции необходимо создать ее прототип для вызова из библиотеки Psapi.dll. Перед вызовом функции необходимо в первое поле структуры Process_Memory_Counters записать ее размер.

Функция GetProcessWorkingSetSize(Hprocess: Thandle; Min,Max: Cardinal) возвращает минимальный и максимальный размеры рабочего множества страниц указанного процесса (в байтах). Прототип функции описан в файле windows.pas.