Значення результуючого параметру (регістр ЕАХ) таке саме як в Process32First і Process32Next

 

STRUC THREADENTRY32

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

cntUsage              DWORD?; Кількість посилань на потік (потік виконується, коли

                             ; це значення не рівне нулю)

th32ThreadID      DWORD?; Ідентифікатор потоку (сумісний з ідентифікатором,

                                                     ; який повертає функція CreateProcess)

th32OwnerProcessID DWORD?; Ідентифікатор процесу, який створив цей потік

tpBasePri              DWORD?; Початковий рівень пріоритету потоку (від 0 до 255)

tpDeltaPri             DWORD?; Зміна рівня пріоритету по відношенню до початкового

                             ; (знакове ціле, яке відображає цю зміну)

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

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

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

th32CurrentProcessID      DWORD?; Ідентифікатор процесу в якому виконується потік

ENDS THREADENTRY32

 

Перегляд хіпів асоційованих з процесом

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

invoke Heap32ListFirst, SnapshotHandle, addr HeapEntry

invoke Heap32ListNext, SnapshotHandle, addr HeapEntry

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

 

STRUC HEAPLIST32 

          dwSize              DWORD?; Розмір структури в байтах

          th32ProcessID DWORD?; Ідентифікатор процесу, який містить даний хіп

          th32HeapID     DWORD?; Ідентифікатор хіпу (для внутрішнього використання)

          dwFlags           DWORD?; Масив бітів для означення типу хіпу (зараз доступний

                                                            ; лише тип HF32_DEFAULT)

ENDS HEAPLIST32

 

Перегляд модулів, які використовує процес

Щоб переглянути модулі, які використовуються деяким процесом треба викликати функції Module32First і Module32Next. Вони аналогічні вищеописаним Heap32ListFirst і Heap32ListNext з тією різницею, що працюють з структурою MODULEENTRY32.

invoke Module32First, SnapshotHandle, addr ModEntry

invoke Module32Next, SnapshotHandle, addr ModEntry

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

 

STRUC MODULEENTRY32

dwSize                              DWORD?; Розмір структури в байтах

th32ModuleID      DWORD?; Збережено для сумісності (завжди рівний 1)

th32ProcessID                  DWORD?; Ідентифікатор процеса, який використовує даний модуль

GlblcntUsage        DWORD?; Кількість завантажувань модуля

ProccntUsage        DWORD?; - / / -

modBaseAddr                  DWORD?; Базова адреса модуля в контексті процеса-володаря

modBaseSize         DWORD?; Розмір модуля в байтах

hModule                DWORD?; Вказівник на модуль в контексті процеса-володаря

szModule   db (MAX_MODULE_NAME32 + 1) dup (?); Стрічка-назва модуля

szExePath  db MAX_PATH dup (?); Стрічка-шлях до модуля

ENDS MODULEENTRY32

 

Керування процесами

Щоб здійснити керування процесом потрібно обов'язково відкрити його дескриптор з допомогою функції OpenProcess:

invoke OpenProcess, dwDesiredAccess, bInheritHandle, dwProcessId

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

dwDesiredAccess (вхідний) – вказує режим з яким відкривається дескриптор процесу.

Цей аргумент за призначенням схожий до режиму відкриття файлів. Перелік доступних режимів наведено в таблиці:

 

Значення Опис
PROCESS_ALL_ACCESS Визначає всі можливі права доступу до процесу (повинй доступ)
PROCESS_CREATE_PROCESS Для внутрішнього використання
PROCESS_CREATE_THREAD Визначає право на створення потоку в заданому процесі з допомогою функції CreateRemoteThread.
PROCESS_DUP_HANDLE Дозволяє використовувати дескриптор процесу як початковий або кінцевий процес в функції DuplicateHandle для дублікації дескриптора.
PROCESS_QUERY_INFORMATION Дозволяє використовувати дескриптор процесу в таких функціях, як GetExitCodeProcess та GetPriorityClass для отримання інформації про стан процесу.
PROCESS_SET_INFORMATION Дозволяє змінювати стан процесу, зокрема встановлювати пріоритет виконання процесу з допомогою функції SetPriorityClass.
PROCESS_TERMINATE Дозволяє припиняти роботу процесу з допомогою функції TerminateProcess.
PROCESS_VM_OPERATION Дозволяє використовувати функції VirtualProtectEx і WriteProcessMemory для модифікації віртуальної пам'яті процеса.
PROCESS_VM_READ Дозволяє з допомогою функції ReadProcessMemory зчитувати інформацію з адресного простору процеса.
PROCESS_VM_WRITE Дозволяє модифікувати адресний простір процесу через функцію WriteProcessMemory.
SYNCHRONIZE Використовується для означення процесу в очікуючих функціях (див. Лаботарорну роботу 5)

 

bInheritHandle (вхідний) – визначає, чи буде створений дескриптор процесу передаватися породженим процесам. Цей параметер може приймати два значення TRUE – передається породженим процесам і FALSE – не передається.

DwProcessId – вказує ідентифікатор процеса, яким треба керувати.

 

Вихідні значення

Якщо функція виконалася успішно, то повернуте значення є відкритим дескриптором вказаного процеса. Якщо сталася помилка, повертається NULL. Для отримання детальнішої інформації про помилку можна викликати функцію GetLastError.

Після завершення роботи з дескриптором процесу, цей дескриптор потрібно закрити з допомогою функції CloseHandle.



Хід роботи

 

1. Ознайомитись з основними теоретичними відомостями даної лабораторної роботи.

2. Ознайомитись з приведеними в додатках прикладами програм.

3. Ознайомитись з додатковими джерелами, приведеними в п. 11 (Література).

4. Затвердити номер індивідуального завдання у викладача.

5. Виконати завдання згідно з номером.

 

Зміст звіту

Звіт повинен містити:

 - титульну сторінку;

 - мету роботи;

 - завдання, робочий варіант тексту програми, результат виконання програми;

 - короткі висновки по проведеній роботі.

Завдання

На 75 балів виконати 4 завдання:

Програма розробляється на мові асемблер для ОС Windows, використовуючи пакет MASM32. Результат виводиться на екран консолі.

1. Зробити програму, яка виводить назву ехе-файла, для першого процесу в списку процесів.

2. Вдосконалити програму таким чином, щоб вона виводила назви та ідентифікатори всіх процесів в системі.

3. Добавити вивід кількості потоків для кожного процесу.

4. Зробити так, щоб ця програма кожні 2 сек. записувала в файл назви ехе-файлів, ідентифікатори і кількість потоків для всіх процесів у системі. Коли файл вже існує новий список повинен заміняти старий.

 


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



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