Студопедия — Получение дополнительной информации о процессах и потоках
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Получение дополнительной информации о процессах и потоках






 

Задача получения списка выполняющихся в системе процессов и их базовых свойств является одной из основных при выполнении мониторинга ресурсов как отдельного ПК, так и ЛВС в целом. Для ее решения используются базовые функции Win32 API – CreateToolHelp32Snapshot(), Process32First(), Process32Next(), Thread32First(), Thread32Next(), Module32First(), Module32Next(), Heap32ListFirst(), Heap32ListNext(), рассмотренные в первой части работы.

Для получения дополнительной информации – о времени работы процессов и их потоков, используемой памяти и других ресурсов – служат функции Win32 API GetProcessTimes(), GetThreadTimes(), GetProcessIoCounters(), GetProcessHandleCount(), GetProcessMemoryInfo(), GetProcessWorkingSetSize(), EnumDeviceDrivers(),

GetDeviceDriverBaseNameA(), GetDeviceDriverFileNameA().

 

2.1.1 Получение информации о времени выполнения процессов и потоков

 

Функция GetProcessTimes(Handle: Thandle; CreateTime, ExitTime, KernelTime, UserTime: TFileTime) используется для получения времени запуска (создания), времени завершения, времени работы процесса в режиме ядра и пользователя. Процесс задается описателем (Handle), время возвращается ОС в переменных типа TFileTime. Время отсчитывается в 100 наносекундных интервалах с 1.01.1601 по Гринвичу. Для представления времени старта и завершения в привычном формате используются функции:

FileTimeToLocalFileTime(Tproc, LocalFileTime: TFileTime)

FileTimeToSystemTime(fTime: TFileTime; SysT: TSystemTime)

Используя поля структуры TSystemTime, можно получить дату и время старта или завершения процесса с точностью до миллисекунды.

Функция GetThreadTimes(Handle: Thandle; CreateTime, ExitTime, KernelTime, UserTime: TFileTime) используется для получения времени запуска (создания), времени завершения, времени работы потока в режиме ядра и пользователя. Поток задается описателем (Handle), время возвращается ОС в переменных типа TFileTime. Время отсчитывается в 100 наносекундных интервалах с 1.01.1601 по Гринвичу. Для представления времени старта и завершения в привычном формате используются функции:

FileTimeToLocalFileTime(Tproc, LocalFileTime: TFileTime)

FileTimeToSystemTime(fTime: TFileTime; SysT: TSystemTime)

Используя поля структуры TSystemTime, можно получить дату и время старта или завершения потока.

Для получения значений описателей процесса и потока в общем случае следует использовать функции OpenProcess() (см. часть 1) и OpenThread() – ее аргументы аналогичны. Необходимые значения идентификаторов процесса или потока получаются с помощью функций, рассмотренных в первой части работы.

В частном случае, когда интерес представляет текущий процесс (поток), описатель процесса (потока) возвращается функциями GetCurrentProcess() и GetCurrentThread(). Эти функции не имеют аргументов.

 


2.1.2 Получение информации счетчиков ввода-вывода

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

 

Содержимое счетчиков ввода-вывода – количество прочитанных - записанных байт может быть получено функцией 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);

 

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

 

Функция 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.

 

2.1.4 Получение информации о загруженных драйверах

 

Для получения информации о загруженных в память драйверах и их адресах используются функции EnumDeviceDrivers(), GetDeviceDriverBaseNameA(), GetDeviceDriverFileNameA(), вызываемые из библиотеки Psapi.dll. Прототипы функций имеют следующий вид:

function EnumDeviceDrivers(lp: pointer; cb: DWORD; lpcbNeeded: lpDWORD): BOOL; stdcall external 'psapi.dll';

 

function GetDeviceDriverBaseNameA(lp: pointer; lpBaseName: lpstr; nSize: DWORD): BOOL; stdcall external 'psapi.dll';

 

function GetDeviceDriverFileNameA(lp: pointer; lpFilename:LPTSTR; nSize: DWORD): DWORD; stdcall external 'psapi.dll';

Функция EnumDeviceDrivers (lp: pointer; cb: DWORD; lpcbNeeded: lpDWORD): BOOL возвращает массив указателей на загруженные в ОП драйверы. Указатель на массив задается первым аргументом функции, второй аргумент (входной параметр) задает размер массива, если этот размер является недостаточным, требуемый размер возвращается функцией в третьем параметре.

Пример вызова функции:

var

pdriver: array [1..138] of cardinal;

lpcbNeeded: dword;

if EnumDeviceDrivers(@pdriver, sizeof(pdriver), @lpcbNeeded)

then

label1.Caption:= inttostr(lpcbNeeded)

Для получения списка имен драйверов служит функция GetDeviceDriverBaseNameA(lp: pointer; lpBaseName: lpstr; nSize: DWORD). Она получает адрес загруженного драйвера (первый аргумент) и размер имени драйвера (третий аргумент) и возвращает имя драйвера.

Пример вызова функции:

var

pdriver: array [1..138] of cardinal;

lpcbNeeded: dword;

i: integer;

basename: lpstr;

for I:= 1 to lpcbneeded div 4 do

begin

getmem(basename,50);

GetDeviceDriverBaseNameA(pointer(pdriver[i]), BaseName, 50);

 







Дата добавления: 2015-09-07; просмотров: 593. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Случайной величины Плотностью распределения вероятностей непрерывной случайной величины Х называют функцию f(x) – первую производную от функции распределения F(x): Понятие плотность распределения вероятностей случайной величины Х для дискретной величины неприменима...

Схема рефлекторной дуги условного слюноотделительного рефлекса При неоднократном сочетании действия предупреждающего сигнала и безусловного пищевого раздражителя формируются...

Классификация и основные элементы конструкций теплового оборудования Многообразие способов тепловой обработки продуктов предопределяет широкую номенклатуру тепловых аппаратов...

Именные части речи, их общие и отличительные признаки Именные части речи в русском языке — это имя существительное, имя прилагательное, имя числительное, местоимение...

Интуитивное мышление Мышление — это пси­хический процесс, обеспечивающий познание сущности предме­тов и явлений и самого субъекта...

Studopedia.info - Студопедия - 2014-2024 год . (0.007 сек.) русская версия | украинская версия