
- •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. Контрольні запитання
- •Для нотаток Для нотаток Для нотаток
Додаток 4
Текст програми відкриття глобального атома.
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
wsprintfA PROTO C :DWORD, :VARARG
wsprintf equ <wsprintfA>
.data
MsgCaption db "Повiдомлення!",0
MyAtom DWORD 0
AtomName db "Привіт Атом",0
MyAtomName db "Iм’я атома",0
ErrorFindAtom db "Атома з таким iм'ям не iснує",0
ErrorDA db "Помилка знищення атома",0
Success db "Атом успiшно знайдено",0
SuccessDA db "Aтом успiшно знищено",0
AtomCaption db "Значення атома в таблицi атомiв",0
buffer db 256 dup (?)
parameter db "%u"
.code
start:
invoke GlobalFindAtom,addr AtomName
.if eax==0
invoke MessageBox, NULL,addr ErrorFindAtom, addr MsgCaption, MB_OK
jmp exit
.endif
mov MyAtom, eax
invoke MessageBox, NULL,addr Success, addr MsgCaption, MB_OK
invoke wsprintf,addr buffer,addr parameter,MyAtom
invoke MessageBox, NULL, addr buffer, addr AtomCaption, MB_OK
invoke GlobalGetAtomName, MyAtom,addr buffer,256
invoke MessageBox, NULL ,addr buffer, addr MyAtomName, MB_OK
invoke GlobalDeleteAtom, MyAtom
.if eax==0
invoke MessageBox, NULL,addr SuccessDA,\
addr MsgCaption, MB_OK
jmp exit
.endif
invoke MessageBox, NULL,addr ErrorDA, addr MsgCaption, MB_OK
exit:
invoke ExitProcess,NULL
end start
Р
езультат
виконання
програми:
Додаток 5 Детальний опис функції створення анонімного каналу
CreatePipe proto pReadHandle:DWORD, \
pWriteHandle:DWORD, \
pPipeAttributes:DWORD, \
nBufferSize:DWORD
pReadHandle – це вказівник на змінну типу DWORD, котрий отримає дескриптор кінця читання каналу.
pWriteHandle - це вказівник на змінну типу DWORD, котрий отримає дескриптор кінця запису каналу.
pPipeAttributes – вказує на структуру SECURITY_ATTRIBUTES
Додаток 6 Детальний опис функції створення іменованого каналу
CreateNamedPipe proto lpName:DWORD,\ ; вказує на ім’я файлу
dwOpenMode:DWORD, \; режим відкриття каналу
dwPipeMode:DWORD, \ ; pipe-specific modes
nMaxInstances:DWORD,\;максимальна кількість екземплярів каналу
nOutBufferSize: DWORD, \;розмір буферу для виводу
nInBufferSize : DWORD,\ ;розмір буферу для вводу
nDefaultTimeOut : DWORD,\; час тривання екземпляра каналу
lpSecurityAttributes LPSECURITY_ATTRIBUTES <> ;вказівник на структуру безпеки
Параметр lpName вказує на стрічку, котра завершується нулем і має наступний вигляд: \\.\pipe\pipename. Ім’я каналу не повинно перевищувати 256 символів.
Параметр dwOpenMode має наступні типи:
PIPE_ACCESS_DUPLEX – канал має двонаправлений тип. Клієнт та сервер можуть читати та записувати з каналу. Цей режим дає серверу такий самий як GENERIC_READ | GENERIC_WRITE доступ до каналу. Клієнт може встановити параметри GENERIC_READ або GENERIC_WRITE, або обидва, під час під’єднання до каналу функцією CreateFile.
PIPE_ACCESS_INBOUND - Потік даних направлений тільки від клієнта до сервера. Цей режим дає серверу такий самий доступ до каналу як GENERIC_READ. Клієнт – програма повинна мати GENERIC_WRITE доступ до каналу..
PIPE_ACCESS_OUTBOUND – Потік даних напрямлений тільки від сервера до клієнта . Цей режим дає серверу такий самий доступ до каналу як GENERIC_WRITE. Клієнт – програма повинна мати GENERIC_READ доступ до каналу..
Параметр dwPipeMode визначає параметри запису, параметри очікування.
PIPE_TYPE_BYTE – Діні записуються у канал як потік байтів .
PIPE_TYPE_MESSAGE - Діні записуються у канал як потік повідомлень
PIPE_WAIT - Встановлено режим очікування. В цьому режимі функції ReadFile, WriteFile, або ConnectNamedPipe не виконуються поки є дані для зчитування, дані для запису або до каналу під’єднаний клієнт.
PIPE_NOWAIT – Знято режим очікування.
Параметр nMaxInstances визначає максимальну кількість екземплярів каналу, може бути встановленим у PIPE_UNLIMITED_INSTANCES – необмежена кількість екземплярів каналу.
Дана функція повертає дескриптор на екземпляр іменованого файлу програми- сервера. У випадку помилки функція повертає INVALID_HANDLE_VALUE. За допомогою функції GetLastError можна дізнатись номер помилки, по якому можна знайти причину її виникнення. Помилка ERROR_INVALID_PARAMETER виникає у випадку коли параметр nMaxInstances є більшим ніж PIPE_UNLIMITED_INSTANCES.