
- •6.050101 «Комп’ютерні науки»
- •Загальні вимоги до виконання лабораторних робіт
- •Лабораторна робота №1
- •1. Основні теоретичні відомості
- •1.1 Основні поняття
- •1.2 Створення процесу
- •1.3 Створення потоку
- •2. Хід роботи
- •4. Завдання
- •5. Контрольні запитання
- •6.Список використаної літератури
- •Додаток 1
- •Додаток 2
- •Додаток 3
- •Функція CreateProcess створює новий процес.
- •Додаток 4
- •Додаток 5
- •Addr ThreadId – Створює новий потік.
- •Додаток 6
- •Додаток 7
- •Лабораторна робота №2
- •1. Основні теоретичні відомості
- •1.1 Механізми міжпроцесової взаємодії
- •1.2 Механізми синхронізації процесів та потоків
- •1.3 Об’єкти синхронізації
- •1.4 Очікуючі функції
- •1.5 Створення атома
- •1.6 Створення каналу
- •2. Хід роботи
- •4. Завдання
- •5. Контрольні запитання
- •6.Список використаної літератури
- •Додаток 1
- •Додаток 2
- •Додаток 3
- •Додаток 4
- •Додаток 5 Детальний опис функції створення анонімного каналу
- •Додаток 6 Детальний опис функції створення іменованого каналу
- •Додаток 7
- •Додаток 8
- •Додаток 9 Текст програми створення анонімного каналу
- •Додаток 10
- •Лабораторна робота №3
- •1. Основні теоретичні відомості
- •2. Приклад програми створення dll
- •Опис програми My_dll.Asm та файлу лістінга My_dll.Def
- •4. Трансляція та компонування dll Для того, щоб відтранслювати(ml.Exe) та зкомпонувати (link.Exe) даний .Asm код, потрібно використовувати наступні параметри:
- •5. Приклад використання функції з бібліотеки
- •Приклад програми завантаження dll
- •7. Створення файлу лістінгу існуючої бібліотеки
- •8. Приклад передачі даних у функцію бібліотеки Створення динамічно завантажуваної бібліотеки
- •Передача параметру у функцію бібліотеки
- •9. Хід роботи
- •11. Завдання
- •12. Контрольні запитання
- •13. Список використаної літератури
- •Лабораторна робота №4
- •1. Основні теоретичні відомості
- •Параметри функції CreateToolhelp32Snapshot:
- •2. Перегляд процесів
- •3. Перегляд потоків
- •Значення результуючого параметру (регістр еах) таке саме як в Process32First і Process32Next.
- •4. Перегляд хіпів асоційованих з процесом
- •5. Перегляд модулів, які використовує процес
- •6. Керування процесами
- •7. Хід роботи
- •9. Завдання На 75 балів виконати 4 завдання:
- •10. Контрольні запитання
- •11. Список використаної літератури
- •Додаток 1
- •Лабораторна робота №5
- •Основні теоретичні відомості
- •1.1 Основні поняття
- •1.2 Категорії даних
- •1.3 Відкриття і закриття ключів реєстру
- •1.4 Створення підключа у відкритому ключі реєстру
- •1.5 Отримання інформації з ключа реєстру
- •1.6 Перелічення списку значень для заданого ключа реєстру
- •1.7 Виявлення змін в гілці реєстру
- •1.8 Робота з налаштуваннями операційної системи через реєстр
- •2. Хід роботи
- •4. Завдання
- •5. Контрольні запитання
- •6. Список використаної літератури
- •Додаток 1
- •Лабораторна робота №6
- •1. Основні теоретичні відомості
- •Породження процесів
- •1.2 Породження потоків
- •2. Хід роботи
- •4. Індивідуальні завдання
- •5. Контрольні запитання
- •Для нотаток Для нотаток Для нотаток
2. Перегляд процесів
Для перегляду запущених процесів використовуються дві функції 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.
3. Перегляд потоків
Щоб переглянути діючі потоки зі списку використовуються функції Thread32First і Thread32Next. Вони аналогічні вищеописаним Process32First і Process32Next з тією різницею, що працюють з структурою THREADENTRY32.
invoke Thread32First, SnapshotHandle, addr ThrEntry
invoke Thread32Next, SnapshotHandle, addr ThrEntry
де addr ThrEntry – адреса об’єкта структури THREADENTRY32. Ця структура описує один запис із списку потоків, які знаходилися в адресному просторі після виконання функції CreateToolhelp32Snapshot.
Значення результуючого параметру (регістр еах) таке саме як в 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