
- •Монитор процессов и потоков
- •Введение
- •1. Базовые функции
- •Краткие теоретические сведения
- •1.1. Получение списка процессов, выполняющихся в системе
- •1.1.1 Использование функций CreateToolHelp32Snapshot () и Process32xxxx()
- •1.1.2 Использование функций CreateToolHelp32Snapshot () и Thread32xxxx()
- •1.1.3 Использование функций CreateToolHelp32Snapshot () и Module32xxxx()
- •1.1.4 Использование функций CreateToolHelp32Snapshot () и Heap32Listxxxx()
- •1.2 Завершение выбранного процесса
- •1.3 Мониторинг процессов
- •2. Дополнительные функции
- •Краткие теоретические сведения
- •2.1 Получение дополнительной информации о процессах и потоках
- •Получение информации о времени выполнения процессов и потоков
- •Получение информации счетчиков ввода-вывода
- •Получение информации об используемой процессом памяти
- •Получение информации о загруженных драйверах
- •Методика выполнения
- •3. Отчет о выполненной контрольной работе
- •4. Контрольные вопросы
- •Библиографический список
1.1.2 Использование функций CreateToolHelp32Snapshot () и Thread32xxxx()
для получения сведений о приоритетах потоков процессов
Для получения сведений о приоритетах потоков необходимо извлечь из снимка состояния системы с помощью функций Thread32First() и Thtead32Next () значения соответствующих полей.
Обращение к функциям имеет вид:
Thread32First (hSnapshot, LPTHREADEntry32)
Thtead32Next (hSnapshot, LPTHREADEntry32).
Первый аргумент – хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).
Второй аргумент – структура, содержащая 7 полей:
Первое поле – dwSize – размер структуры в байтах. Это единственное поле, которое должно быть заполнено до вызова функции Thread32First. Заполнить его можно, используя выражение sizeof(ThreadEntry32).
Поле – cntUsageth – не используется и всегда устанавливается в ноль.
Поле – 32ThreadID – не используется и всегда устанавливается в ноль.
Поле – th32OwnerProcessID – содержит идентификатор родительского процесса.
Поле – tpBasePri – содержит текущий приоритет потока.
Поле – tpDeltaPri – содержит разность между текущим уровнем приоритета потока и базовым уровнем, то есть тем, который присваивается при создании потока.
Поле – dwFlags – не используется и всегда устанавливается в ноль.
Пример 2. Получить список выполняющихся в системе потоков, используя рассмотренные выше функции. Вывести содержимое полей 2 и 3 структуры THREADEntry32.
На форме размещены компоненты ListView, Label и Button, обработчик события OnClick имеет вид:
var
Sh: Thandle;
Th: TTHREADENTRY32;
LstIt: TlistItem;
begin
Sh:= CreateToolHelp32Snapshot(TH32CS_SNAPALL,0);
Th.dwSize:= sizeof(TTHREADEntry32);
Thread32First(sh,Th);
ListView1.Items.Clear;
LstIt:=ListView1.Items.Add;
LstIt.Caption:=IntToStr(Th.th32OwnerProcessID);
LstIt.SubItems.Add(IntToStr(Th.tpBasePri));
repeat
LstIt:=ListView1.Items.Add;
LstIt.Caption:=IntToStr(Th.th32OwnerProcessID);
LstIt.SubItems.Add(IntToStr(Th.tpBasePri))
until not Thread32Next(sh,Th);
CloseHandle(Sh);
end;
Созданы 2 Columns, имеющие заголовки «Идент процесса» и «Базовый приор потока» (свойства ListView).
ВАЖНО! Свойство ViewStyle компонента ListView должно быть установлено
в vsReport.
Результат выполнения примера 2 показан на рис. 3.
Рис. 3. Список потоков
1.1.3 Использование функций CreateToolHelp32Snapshot () и Module32xxxx()
для получения списка модулей
Для получения сведений о приоритетах потоков необходимо извлечь из снимка состояния системы с помощью функций Module32First() и Module32Next() значения соответствующих полей.
Обращение к функциям имеет вид:
Module32First (hSnapshot, LPMODULEENTRY32);
Module32Next (hSnapshot, LPMODULEENTRY32).
Первый аргумент – хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).
Второй аргумент – структура, содержащая 10 полей:
Первое поле – dwSize – размер структуры в байтах. Это единственное поле, которое должно быть заполнено до вызова функции Module 32First. Заполнить его можно, используя выражение sizeof(ModuleEntry32);
th32ModuleID: DWORD – размер модуля;
th32ProcessID: DWORD – идентификатор процесса, владеющего модулем;
GlblcntUsage: DWORD – счетчик глобальных пользователей модуля;
ProccntUsage: DWORD – счетчик процессов - пользователей;
modBaseAddr: BYTE – базовый адрес модуля;
modBaseSize: DWORD – базовый размер модуля;
hModule: HMODULE – хэндл модуля;
szModule: array [1.. MAX_MODULE_NAME32 + 1] of char – имя модуля;
szExePath: array [1.. MAX_PATH] of char – путь размещения модуля.