Програми розробляються в MASM32. Результат виводиться на екран консолі. Розробити програму, яка
1. виводить імена процесів у вигляді:
“ім’я батьківського процесу” -> “ім’я породженого процесу”
2. з допомогою функції GetCommandLine приймає назву процеса з командної стрічки, який необхідно завершити і завершує його.
3. кожну сек. перевіряє чи не з’явився процес з назвою “mirc”, при появі такого процесу програма повинна видавати звуковий сигнал.
4. повинна виводити імена модулів, які використовуються всіма процесами в системі.
5. виводить пріоритети для всіх потоків зареєстрованих в системі.
6. кожну сек. (використовуючи функцію Sleep) перевіряє чи не завершився процес з деяким іменем, а коли завершився видає повідомлення.
7. друкує на екран назву класу пріоритету для процеса, ідентифікатор якого задано в командному рядку (“Найнижчий” - IDLE_PRIORITY_CLASS, “Нормальний” - NORMAL_PRIORITY_CLASS, “Високий” - HIGH_PRIORITY_CLASS, “Найвищий” - REALTIME_PRIORITY_CLASS).
8. з командної стрічки приймає два параметри: ідентифікатор процесу і число, яке визначає клас пріоритету (0 - IDLE_PRIORITY_CLASS, 1 - NORMAL_PRIORITY_CLASS, 2 - HIGH_PRIORITY_CLASS, 3 - REALTIME_PRIORITY_CLASS). Програма повинна змінити пріоритет виконання заданого процесу на вказаний в другому параметрі.
|
|
9. інтерактивно записує в файл зміни в списку процесів у вигляді:
дд.мм.рррр гг:хх:сс запустився/завершився “назва процесу”
10. інтерактивно записує в файл зміни кількості потоків у вигляді:
дд.мм.рррр гг:хх:сс “назва процесу” кількість_потоків
Контрольні запитання
1. Назвати функцію і параметри для створення списку процесів та потоків.
2. Назвати функції перегляду процесів.
3. Які функції викликаються для перегляду модулів?
4. Де зберігається ідентифікатор процесу повернутий функцією Process32First?
5. Як визначити всі потоки створені заданим процесом?
6. Що необхідно зробити для керування процесом?
Список використаної літератури
1. Help по функціях API - www.nan32asm.cjb.net
2. Microsoft Windows Help - Win32 Programmers Reference
3. Технічна документація Microsoft - MSDN
Додаток 1
Текст програми виводу імен запущених процесів в системі.
.386
.model flat,stdcall
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.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
.data
Caption_s db "Process",0
Snapshot dword?
Text_s db 1024 dup (?)
PID_s db 25 dup (?)
PID_f db "%u ",0
CRLF_s db 13,10,0
lstPTR dword offset Text_s
ProcEntry PROCESSENTRY32 <sizeof(PROCESSENTRY32)>
.code
wrtdown_str proc
mov ebp, [lstPTR]; Remember the last position
@@c: mov al, [edx]; Take a letter from [edx]
mov [ebp], al; write the letter to [ebp]
or al, al ; compare the letter with zero
jz @@end ; if it is zero then it is end of line
inc ebp ; else increase ebp and edx
inc edx
jmp @@c ; loops to @@c
|
|
@@end: mov [lstPTR], ebp; Store the last position
ret
wrtdown_str endp
start:
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS, NULL
; now eax contains the snapshot handle
mov [Snapshot], eax
invoke Process32First, eax, addr ProcEntry
; now the ProcEntry contains information about the first process
@@a: invoke wsprintf, addr PID_s, addr PID_f, ProcEntry.th32ProcessID
mov edx, offset PID_s
call wrtdown_str
mov edx, offset ProcEntry.szExeFile
call wrtdown_str
mov edx, offset CRLF_s
call wrtdown_str
mov eax, [Snapshot]
invoke Process32Next, eax, addr ProcEntry
cmp eax, FALSE
jne @@a
mov eax, [Snapshot]
invoke CloseHandle, eax; closes the snapshot handle
; invoke MessageBox, 0, addr Text_s, addr Caption_s, MB_OK
invoke StdOut, addr Text_s
; prints the process list in message box
invoke ExitProcess, 0; exits the program
end start
Результат
0 [System Process]
8 System
140 SMSS.EXE
168 CSRSS.EXE
188 WINLOGON.EXE
216 SERVICES.EXE
228 LSASS.EXE
416 svchost.exe
448 spoolsv.exe
496 svchost.exe
512 kavsvc.exe
552 sqlservr.exe
624 regsvc.exe
644 mstask.exe
688 WinMgmt.exe
764 svchost.exe
1012 explorer.exe
1184 UMSD.EXE
704 kav.exe
968 internat.exe
480 acrotray.exe
1072 sqlmangr.exe
520 CMD.EXE
116 CMD.EXE
308 notepad.exe
588 ps.exe
Лабораторна робота №5
Тема: Робота з реєстром ОС Windows засобами Win32 API.
Мета: Навчитись переглядати і редагувати реєстр ОС Windows в програмному режимі засобами пакету MASM32.
Основні теоретичні відомості
Основні поняття
П'яте видання словника Microsoft Computer Dictionary визначає реєстр так:
Реєстр – ієрархічно побудована, централізована база даних в складі операційних систем Microsoft Windows 9x, Windows CE, Windows NT і Windows 2000, яка містить дані, що використовуються для конфігурації операційної системи для роботи з користувачами, програмними продуктами та пристроями.
http://support.microsoft.com/?scid=kb%3Bru%3B256986&x=0&y=3
Реєстр Windows зберігає дані в ієрархічно структурованому дереві. Кожен вузол у цьому дереві називається ключем (key). Кожен ключ може містити значення (value) та інші ключі. Зазвичай один ключ в реєстрі містить всі дані, необхідні одній програмі. Програма відкриває потрібний ключ і використовує значення асоційовані з ним. Ключ може містити довільну кількість значень в будь-якому форматі.
Кожен ключ має ім’я, яке складається з одного або більше ANSI символів — тобто символи з кодами від 32 до 127. Імена ключів не можуть містити пробілів, зворотних слешів (\) або групових символів (* і?). Імена ключів, які починаються з крапки (.) є зарезервованими. Ім’я кожного підключа є унікальним. Імена ключів не перекладаються в локалізованих версіях операційної системи, однак значення можуть бути перекладеними на інші мови.
Для того, щоб добавити нові дані до реєстру програма повинна відкрити ключ. Щоб відкрити ключ, необхідно застосувати дескриптор іншого ключа реєстру, який вже відкритий. Система оголошує стандартні дескриптори ключів, які завжди відкриті. Кожна програма може використовувати ці відкриті ключі в якості вхідних точок до реєстру.
Система забезпечує два відкриті ключі в корені реєстру: HKEY_LOCAL_MACHINE та HKEY_USERS. Додатково, система надає доступ до HKEY_CLASSES_ROOT (підключ HKEY_LOCAL_MACHINE) і HKEY_CURRENT_USER (підключ HKEY_USERS). Дані дескриптори є дійсними для всіх реалізацій реєстру Win32. Також деякі додаткові відкриті дескриптори появилися для певних платформ.
Стандартні відкриті ключі допомагають програмі взаємодіяти з реєстром і дозволяють розробляти спеціалізовані програми для адміністрування реєстру. Програми, які добавляють дані в реєстр повинні завжди працювати в базисі стандартних відкритих ключів, що дає змогу адміністративним засобам знаходити і використовувати ці дані.
Наступні стандартні відкриті ключі використовуються як точки входу в реєстр.
Точка входу | Використання |
HKEY_CLASSES_ROOT | Частини реєстру які входять до цього ключа оголошують типи (або класи) документів і властивості асоційовані з цими типами. Інформація, яка зберігається під цим ключем використовується програмами-оболонками (shell applications) і програмами, які працюють із зв’язуваними і вбудовуваними об’єктами (OLE). |
HKEY_CURRENT_USER | Частини реєстру за цим ключем оголошують настройки поточного користувача. Ці настройки включають змінні середовища, дані про групи програм, кольори, прінтери, мережеві з’єднання, автозавантажувані програми і користувацькі настройки програм. |
HKEY_DYN_DATA | Для Windows 95іWindows 98: розділи реєстру за цим ключем дозволяють нагромаджувати дані про роботу системи. |
HKEY_LOCAL_MACHINE | Розділи реєстру під цим ключем описують технічні характеристики комп’ютера, включаючи інформацію про тип шин, системну пам’ять, встановлене апаратне і програмне забезпечення. |
HKEY_PERFORMANCE_DATA | Для Windows NT: розділи реєстру цього ключа дозволяють звертатися до інформації про швидкодію системи. Насправді ця інформація безпосередньо не зберігається в реєстрі; виклик певних функцій реєстру призводить до збору запитуваної інформації. |
HKEY_USERS | Частини реєстру за цим ключем оголошують користувацьку конфігурацію по замовчуванню для нових користувачів комп’ютера і користувацьку конфігурацію для поточного користувача. |
|
|
Категорії даних
Перед записом даних в реєстр, програма повинна розділити дані на дві категорії: комп’ютерно-орієнтовані дані і користувацько-орієнтовані. Таке розрізнення дозволяє програмі підтримувати різні настройки для різних користувачів і навіть розміщувати користувацько-орієнтовані дані в мережі, реалізуючи незалежний від розміщення користувацький профіль. (користувацький профіль – це набір конфігураційних даних кожного користувача.)
Коли програма інсталюється, вона повинна записати комп’ютерно-орієнтовані дані за ключем HKEY_LOCAL_MACHINE. Як правило програма створює ключі для імені компанії, імені продукту, та номеру версії, як показано в наступному прикладі:
HKEY_LOCAL_MACHINE \ Software \MyCompany\MyProduct\1.0
Якщо програма підтримує OLE, вона повинна записати відповідні дані в HKEY_LOCAL_MACHINE\Software\Classes.
Кожна програма повинна записати користувацько-орієнтовані дані за ключем HKEY_CURRENT_USER, як показано в прикладі:
HKEY_CURRENT_USER \ Software \MyCompany\MyProduct\1.0\ ...