Список використаної літератури

8. Help по функціях API - www.nan32asm.cjb.net

9. Microsoft Windows Help - Win32 Programmers Reference

10. Технічна документація Microsoft - MSDN

11. www.win32asm.newmail.ru/

12. Книга по програмуванню під Windows - www.win32asm.cjb.net



Лабораторна робота №4

 

Тема: Керування процесами і потоками у середовищі ОС Windows.

Мета: Навчитись керувати процесами та потоками в середовищі ОС Windows використовуючи пакет MASM32.

 

Основні теоретичні відомості

Функції WinAPI забезпечують широкі можливості для отримання інформації про запущені процеси та потоки і для керування ними.

Функція CreateToolhelp32Snapshot дозволяє отримати список запущених процесів і потоків та детальну інформацію про вказаний процес. Формат виклику:

invoke CreateToolhelp32Snapshot, dwFlags, th32ProcessID

Коли встановити параметр-індетифікатор процесу th32ProcessID, то можна отримати детальну інформацію про заданий процес. А саме, перелік модулів з яких складається процес і список хіпів виділених ним.

Примітка. Хіп (Heap) – динамічна область пам'яті виділена процесом.

Параметри функції CreateToolhelp32Snapshot:

dwFlags (вхідний) - Частини системи, які включатимуться в список (snapshot). Цей параметр може приймати одне з перелічених значень:

Значення Пояснення
TH32CS_INHERIT Позначає, що дескриптор списку є наслідуваний (передається породженому процесу).
TH32CS_SNAPALL Включає всі процеси та потоки в системі плюс хіпи та модулі для процеса вказаного в th32ProcessID. Еквівалентно вказанню значень TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODULE, TH32CS_SNAPPROCESS, TH32CS_SNAPTHREAD.
TH32CS_SNAPHEAPLIST Включає всі хіпи для процеса вказаного в th32ProcessID. Для операції перегляду хіпів, див. функцію Heap32ListFirst.
TH32CS_SNAPMODULE Включає всі модулі для процеса вказаного в th32ProcessID. Для операції перегляду модулів, див. функцію Module32First.
TH32CS_SNAPPROCESS Включає всі запущені процеси в системі. Для операції перегляду процесів див. функцію Process32First.
TH32CS_SNAPTHREAD Включає всі діючі потоки в системі. Для операції перегляду потоків див. функцію Thread32First. Щоб ідентифікувати якому процесу відповідає даний потік, зверністься до поля th32OwnerProcessID в структурі THREADENTRY32.

 

th32ProcessID (вхідний) - Ідентифікатор процесу, який використовується при побудові списку. Цей параметр може бути нульовим, щоб ідентифікувати поточний процес. Даний параметр використовується лише для значень TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODULE або TH32CS_SNAPALL. У випадку перегляду всіх доспупних процесів або потоків в системі (значення TH32CS_SNAPPROCESS або TH32CS_SNAPTHREAD) він ігнорується.

Вихідне значення (регістр ЕАХ)

При успішному виконанні функція повертає дескриптор списку. При помилці функція повертає INVALID_HANDLE_VALUE. Щоб отримати детальнішу інформацію про помилку визвіть функцію GetLastError.

Примітка. Щоб здійснити перегляд хіпів або модулів для всіх процесів в системі, вкажіть TH32CS_SNAPALL для dwFlags і встановість th32ProcessID = 0. Потім для кожного процесу в списку викличте функцію CreateToolhelp32Snapshot ще раз, задавши його ідентифікатор процесу та TH32CS_SNAPHEAPLIST або TH32_SNAPMODULE (хіпи і модулі відповідно).

Для завершення роботи з списком треба викликати функцію CloseHandle:

invoke CloseHandle, SnapshotHandle

де SnapshotHandle – дескриптор списку

Повернутий функцією список перегдядається з допомогою інших API функцій.

 

Перегляд процесів

Для перегляду запущених процесів використовуються дві функції Process32First та Process32Next. Перша призначена для отримання даних про найперший процес в списку, а друга для всіх наступних. Ці дві функції мають однакові параметри:

invoke Process32First, SnapshotHandle, addr ProcEntry

invoke Process32Next, SnapshotHandle, addr ProcEntry

де addr ProcEntry – адреса об’єкта структури PROCESSENTRY32. Ця структура описує один запис із списку процесів, які знаходилися в системному адресному просторі після виконання функції CreateToolhelp32Snapshot.

Коли вихідний параметер цих функцій (регістр ЕАХ) рівний TRUE, то успішне виконання, коли FALSE – помилка. Інформацію про помилку можна дізнатися з допомого функції GetLastError.

 

STRUC PROCESSENTRY32

dwSize                                          DWORD?; Довжина структури в байтах

cntUsage                          DWORD?; Кількість посилань на процес (зазвичай 1)

th32ProcessID                 DWORD?; Ідентифікатор процесу

th32DefaultHeapID         DWORD?; Ідентифікатор хіпу по замовч. (для вн. використ.)

th32ModuleID                 DWORD?; Ідентифікатор модуля процесу (зазвичай 0)

cntThreads                       DWORD?; Кількість запущених процесом потоків

th32ParentProcessID        DWORD?; Ідентифікатор батьківського процесу(зазвичай 0)

pcPriClassBase                  DWORD?; Базовий пріоритет потоків створених процесом

                                                                            ; (зазвичай THREAD_PRIORITY_NORMAL)

dwFlags                           DWORD?; Зарезервовано системою

szExeFile                           db MAX_PATH dup (?); Стрічка завершена нулем, яка містить

; шлях і назву виконуваного файлу

th32MemoryBase             DWORD?; Адреса, куди завантажено виконуваний файл

th32AccessKey                DWORD?; Масив з бітів, кожен з яких визначає права

                                                                 ; доступу до адресного простору процесу

ENDS PROCESSENTRY32

 

Зауваження:

Перед викликом функції Process32First, потрібно встановити dwSize рівним sizeof(PROCESSENTRY32). Коли цього не зробити функція не буде працювати.

Щоб використовувати ідентифікатори процесів та потоків з GetThreadTimes та іншими функціями, які керують процесами, ідентифікатори можна задавати безпосередньо. Однак доступ різних процесів один до одного (керування) вимагає використання функції SetProcPermissions.

 

Перегляд потоків

Щоб переглянути діючі потоки зі списку використовуються функції Thread32First і Thread32Next. Вони аналогічні вищеописаним Process32First і Process32Next з тією різницею, що працюють з структурою THREADENTRY32.

invoke Thread32First, SnapshotHandle, addr ThrEntry

invoke Thread32Next, SnapshotHandle, addr ThrEntry

де addr ThrEntry – адреса об’єкта структури THREADENTRY32. Ця структура описує один запис із списку потоків, які знаходилися в адресному просторі після виконання функції CreateToolhelp32Snapshot.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: