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

1.1.2 Использование функций CreateToolHelp32Snapshot () и Thread32xxxx() для получения сведений о приоритетах потоков процессов

Для получения сведений о приоритетах потоков необходимо извлечь из снимка состояния системы с помощью функций Thread32First() и Thtead32Next () значения соответствующих полей.

Обращение к функциям имеет вид:

Thread32First ( hSnapshot, LPTHREADEntry32)

Thtead32Next ( hSnapshot, LPTHREADEntry32).

Первый аргумент - хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).

Второй аргумент - структура, содержащая 7 полей:

  1. Первое поле этой структуры - dwSize - должно перед вызовом функции содержать размер структуры в байтах - sizeof (THREADEntry32).

  2. Поле th32OwnerProcessID содержит идентификатор родительского процесса.

  3. Поле tpBasePri содержит текущий приоритет потока.

  4. Поле tpDeltaPri содержит разность между текущим уровнем приоритета потока и базовым уровнем, то есть тем, который присваивается при создании потока.

Пример 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 показан на рис. 2.

Рисунок 2. Список потоков

1.1.3 Использование функций CreateToolHelp32Snapshot () и Module32xxxx()

для получения списка модулей

Для получения сведений о приоритетах потоков необходимо извлечь из снимка состояния системы с помощью функций Module32First() и Module32Next () значения соответствующих полей.

Обращение к функциям имеет вид:

Module32First (hSnapshot, LPMODULEENTRY32);

Module32Next (hSnapshot, LPMODULEENTRY32).

Первый аргумент - хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).

Второй аргумент - структура, содержащая 10 полей:

dwSize : DWORD -

th32ModuleID : DWORD – размер модуля

th32ProcessID : DWORD - идентификатор процесса, владеющего модулем

GlblcntUsage : DWORD - счетчик глобальных пользователей модуля

ProccntUsage : DWORD - счетчик процессов - пользователей

modBaseAddr : DWORD – базовый адрес модуля

modBaseSize : DWORD – базовый размер модуля

hModule : HMODULE - хэндл модуля

szModule : array [1.. MAX_MODULE_NAME32 + 1] of char – имя модуля

szExePath : array [1.. MAX_PATH] of char – путь размещения модуля.

1.1.4 Использование функций CreateToolHelp32Snapshot () и Heap32Listxxxx()

для получения списка куч

Для получения сведений о кучах необходимо извлечь из снимка состояния системы с помощью функций Heap32ListFirst() и Heap32ListNext () значения соответствующих полей.

Обращение к функциям имеет вид:

Heap32ListFirst (hSnapshot, LPHEAPLIST32);

Heap32ListNext (hSnapshot, LPHEAPLIST32).

Первый аргумент - хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).

Второй аргумент - структура, содержащая 4 поля:

dwSize : DWORD - размер кучи

th32ProcessID : DWORD - идентификатор процесса, владеющего кучей

th32HeapID : DWORD - идентификатор кучи

dwFlags : DWORD - тип кучи