Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodychka-lab_OS.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.35 Mб
Скачать

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

Щоб переглянути хіпи зі списку деякого процесу використовуються функції 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

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

Щоб переглянути модулі, які використовуються деяким процесом треба викликати функції 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

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

Щоб здійснити керування процесом потрібно обов'язково відкрити його дескриптор з допомогою функції 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]