
- •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. Контрольні запитання
- •Для нотаток Для нотаток Для нотаток
1.6 Перелічення списку значень для заданого ключа реєстру
Для того, щоб перелічити значення деякого відкритого ключа в реєстрі, використовується функція RegEnumValue. Ця функція копіює одне значення і блок даних кожного разу, коли викликається.
Приклад виклику функції RegEnumValue – Програма Г
.386
.model flat, stdcall
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\advapi32.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\masm32.inc
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\masm32.lib
includelib c:\masm32\lib\advapi32.lib
.data
id dd 0 ; Номер того значення з якого отримується ; інформація (0 – перший, 1 – другий, і т.д.)
Subkey db "Control Panel\International",0 ; Назва ключа, який відкривається
hkey dd ? ; Змінна, яка отримає дескриптор ключа
name_v db 255 dup (0) ; Буфер для збереження імені перелічуваного значення
name_l dd 255 ; Змінна, яка визначає довжину буфера в Г16
val_v db 255 dup (0) ; Буфер для збереження даних з перелічуваного значення
val_l dd 255 ; Змінна, яка визначає довжину буфера в Г18
tab db 9,0 ; 9 – код керуючого символу “табуляція”, 0 –заверш.стр.
.code
start:
invoke RegOpenKeyEx,\ ; Відкрити дескриптор ключа, див. програму А
HKEY_CURRENT_USER, \ ; Точка в реєстрі з якої відкривається ключ
addr Subkey, \ ; Див. Г14
0, \
KEY_EXECUTE, \ ; Доступ до відкритого ключа на зчитування
addr hkey ; Помістити дескриптор відкритого ключа в Г15
invoke RegEnumValue, \ ; Перелічити одне з значень, які містяться в ключі
hkey, \ ; Дескриптор відкритого ключа
id, \ ; Номер значення, див. Г13
addr name_v, \ ; Вказує на буфер Г16
addr name_l, \ ; Вказує на змінну Г17
0, \ ; Зарезервований і мусить бути 0
0, \ ; Тип значення нас не цікавить
addr val_v, \ ; Вказує на буфер Г18
addr val_l ; Вказує на змінну Г19
invoke StdOut, addr name_v ; Друкує назву значення
invoke StdOut, addr tab ; Друкує табуляцію
invoke StdOut, addr val_v ; Друкує вміст значення
invoke ExitProcess,0
end start
Програма Г відкриває ключ реєстру “HKEY_CURRENT_USER\Control Panel\International” (Г23) і отримує назву і вміст першого значення в цьому ключі (Г24). Виводить на екран назву і вміст значення розділені табуляцією (Г25-Г27).
Опишемо деякі аргументи функції RegEnumValue:
Г24.1 – дескриптор відкритого ключа з якого береться значення.
Г24.2 – номер значення, з якого отримується інформація. У програмі Г запитується лише перше значення. Для виводу всіх наступних значень цей параметр слід збільшувати на одиницю в кожному наступному виклику RegEnumValue поки вона не поверне в ЕАХ значення ERROR_NO_MORE_ITEMS.
Оскільки значення є несортованими, будь-яке нове значення може отримати випадковий індекс. Це означає, що функція може повертати значення в будь-якому порядку.
Г24.3 вказує на буфер Г16, який отримає ім'я значення.
Г24.4 вказує на змінну Г17, яка визначає розмір в байтах буфера Г16. Цей розмір повинен включати завершувальний нуль в кінці стрічки. Після виконання функція RegEnumValue записує в змінну Г17 кількість символів збережених у буфері Г16.
Г24.6 – містить нуль, бо тип не потрібен в даному прикладі. Але Г24.6 може вказувати на змінну, яка приймає код типу для значення. Повний список кодів подано вище в описі аргументу В21.4.
Г24.7 вказує на буфер Г18, який отримує інформаційний вміст значення. Цей параметр може бути нульовим, коли інформація не потрібна.
Г24.8 вказує на змінну Г19, яка містить розмір буфера Г18 в байтах. Коли функція RegEnumValue завершує виконання, ця змінна отримує кількість байт, які збережено в буфері Г18.
Г24.8 може приймати нуль, тільки в тому випадку, коли Г24.7 є також нульовим.