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

Додаток 3

Детальний опис функції CreateProcess.

invoke CreateProcess,ADDR programname,NULL,NULL,NULL,FALSE,\

NORMAL_PRIORITY_CLASS,NULL,NULL,\

ADDR startInfo,ADDR processInfo

Функція CreateProcess створює новий процес.

CreateProcess PROTO lpApplicationName:DWORD, lpCommandLine:DWORD,\

lpProcessAttributes:DWORD,lpThreadAttributes:DWORD,\

bInheritHandles:DWORD,dwCreationFlags:DWORD,\

lpEnvironment:DWORD,lpCurrentDirectory:DWORD,\

lpStartupInfo:DWORD,lpProcessInformation:DWORD

  • lpApplicationName --> Вказівник на ім’я виконуваного файлу, з шляхом або без нього, який потрібно запустити. Якщо цей параметр рівний NULL, то ім’я виконуваного файлу береться з lpCommandLine.

  • lpCommandLine --> Вказівник на командну стрічку в котрій вказаний шлях до програми, яку потрібно запустити. Якщо lpCommandLine рівний NULL, то стрічка береться з lpApplicationName.

  • lpProcessAttributes і lpThreadAttributes --> Тут вказуються атрибути безпеки для процесу і основної пам’яті. Коли параметри рівні NULL, то атрибути безпеки використовуються по замовчуванню.

  • bInheritHandles --> Прапорець, який вказує, чи потрібно наслідувати всі відкриті дескриптори процесу в новому процесі.

  • dwCreationFlags --> Декілька прапорців, які визначають поведінку процесу, який потрібно створити. Наприклад, можна створити процес і відразу призупинити його виконання, щоб можна було його провірити або змінити до його виконання. Також можна вказати клас пріоритету потоку або потоків у новому процесі. Цей клас пріоритету використовується щоб визначити запланований пріоритет віток всередині процесу. Зазвичай використовують прапорець NORMAL_PRIORITY_CLASS.

  • lpEnviroment --> Вказівник на блок пам’яті, який містить декілька змінних оточення для нового процесу. Якщо цей параметр рівний NULL, то новий процес наслідує цей вказівник від батьківського процесу.

  • lpCurrentDirectory --> Вказівник на стрічку з поточним диском і директорією для “дочірнього” процесу. NULL- якщо потрібно, щоб “дочірній” процес отримав цей вакзівник від батьківського процесу.

  • lpStartupInfo --> Вказує на структуру STARTUPINFO, яка визначає як має з’явитись основне вікно нового процесу. Ця структура містить багато членів, які виділяють появу головного вікна “дочірнього” процесу. Цю структуру можна заповнити значеннями батьківського процесу, викликавши функцію GetStartupInfo.

  • lpProcessInformation --> Вказує на структуру PROCESS_INFORMATION, яка дістає ідентифікаційну інформацію про новий процес. Структура PROCESS_INFORMATION.

Додаток 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

.data?

ThreadID DWORD ?

.data

MsgCaption db "Привiт!",0

MsgBoxText db "В цiй програмi створюється новий потік",0

MsgBoxText2 db "Це повiдомлення нового потоку",0

MsgBoxText3 db "Завершення програми, яка створює новий потік",0

.code

ThreadProc PROC Param:DWORD

invoke MessageBox, NULL,addr MsgBoxText2, addr MsgCaption, MB_OK

ret

ThreadProc ENDP

start:

invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK

mov eax,OFFSET ThreadProc

invoke CreateThread,NULL,NULL,eax, NULL,NORMAL_PRIORITY_CLASS,\

ADDR ThreadID

invoke MessageBox, NULL,addr MsgBoxText3, addr MsgCaption, MB_OK

invoke ExitProcess,NULL

end start

Результат виконання програми:

Дана програма виводить повідомлення “Привіт!”, після натиску кнопки “ОК”, створюється новий потік, котрий виводить своє повідомлення “Привіт!”. Одночасно з викликом повідомлення потоку викликається повідомлення батьківської програми (процесу) про завершення програми. Одночасно із завершенням батьківської програми (після натиску “ОК”) завершується повідомлення потоку.

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