особливості програмування з використанням функцій Win32 API

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Комп'ютерна інженерія
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи
Група:
КІ 31
Варіант:
19

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки Національний університет «Львівська політехніка» Кафедра ЕОМ Звіт до лабораторної роботи № 2 з дисципліни: “Системне програмування” на тему: особливості програмування з використанням функцій Win32 API Варіант - 19 ОСОБЛИВОСТІ ПРОГРАМУВАННЯ З ВИКОРИСТАННЯМ ФУНКЦІЙ WIN32 АРІ Мета: Ознайомитись з можливостями та набути навиків програмування на Асемблері в ОС Windows та засвоїти навики використання функцій АРІ Win32. ТЕОРИТИЧНІ ВІДОМОСТІ: Win32 API (розшифровується як інтерфейс прикладного програмування) - це множина підпрограм-функцій, на яких побудована операційна система Windows, яка використовує 32х-бітну адресацію, починаючи з Windows 95 і закінчуючи Windows XP. Розробники Windows зробили багато зусиль щоб стандартизувати як назви функцій, так і їх параметри. Тому використовувати їх не так важко, якщо засвоїти деякі загальні концепції. Типи програм. Процесори сімейства Intel можуть працювати в трьох основних режимах: реальному, віртуальному і захищеному. При включенні комп’ютера його процесор працює в реальному режимі. Після завантаження операційної системи (ОС) процесор може бути переключений програмами ОС в інші режими. В реальному та віртуальному режимах використовується 16- бітна адресація з фіксованими сегментами по 64К. У захищеному режимі використовується 32х-бітна адресація з необмеженими сегментами, і адреса звертання до пам’яті формується (на апаратному рівні) за допомогою дескрипторних таблиць, в яких задаються початкові адреси сегментів, їх довжина, та права доступу до пам'яті і до портів для процесів, які їх використовують. Крім того, в захищеному режимі реалізоване апаратне переключення між задачами за допомогою спеціальних таблиць. Особливості виклику функцій API. Найбільш перспективним з точки зору програмування є захищений режим, тому що він використовує всі апаратні можливості комп’ютера. Отже, функції API для Windows відіграють ту ж саму роль, що і переривання INT 21h для DOS в реальному або віртуальному режимі, але, відмінності між ними досить суттєві, серед них: функції API не відміняють, а заміняють програмні переривання. Механізм обробки апаратних переривань залишається на рівні драйверів пристроїв; стандарт виклику функцій API грунтується на передачі параметрів через стек (а не через регістри); значення кожної функції повертається в регістрі EAX. Якщо функція повертає структуру даних, то регістр EAX містить логічну ознаку виконання, а адресу структури необхідно передати до функції як параметр; Дескриптори (хендли та атоми) - це унікальні цілі числа, які Windows використовує для ідентифікації об’єктів, які створюються або використовуються в системі. Хендли займають по 4 байти, а атоми - по 2 байти. Хендли ідентифікують вікна, меню, блоки пам’яті, екземпляри програми, пристрої виводу, файли, аудіо та відео потоки, та інші об’єкти. Атоми ідентифікують стандартні іконки, курсори та об’єкти, які не змінюються при наступному завантаженні системи. Більшість дескрипторів є значеннями індексів внутрішніх таблиць, які Windows використовує для доступу та керування своїми об'єктами. Звичайно, програми користувача (ужитки) в захищеному режимі не мають прав доступу до цих таблиць. Тому, коли необхідно отримати чи змінити дані, що пов’язані з певним об’єктом Windows, застосування використовує відповідну функцію API з параметром хендла цього об’єкту. Таким чином Windows забезпечує захист своїх даних при роботі у багатозадачному режимі. ЗАВДАННЯ Реалізувати програму, що викликає Win32 API функцію згідно варіанту заданого і виводить результат її роботи на екран. ВАРІАНТИ ЗАВДАННЯ: № варіанту Функція API  19 GetUserNameA   КОД ПРОГРАМИ: .586 ; для процесора не нижче INTEL-586 .model flat, STDCALL ; компілювати як програму для WIN32 option casemap :none ; код чутливий до регістру літер ; Визначення зовнішніх процедур: include \masm32\include\windows.inc ; завжди першим include \masm32\macros\macros.asm ; підтримка макросів MASM ; -------------------------------------------------------------- ; підключення файлів з форматами прототипів виклику функцій include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\Advapi32.inc ; -------------------------------------------------------------- ; підключення заголовків бібліотек експортованих функцій includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\Advapi32.lib .data ; вміст сегменту даних: buflen dd 256 ; визначення комірки пам'яті hello_title db ' Лабораторна робота №2 ', 0 hello_message db 'UserName: ' ; рядок байтів user_name db 256 dup (0) ; буфер заповнений нулями .code ; вміст сегменту коду: Start: ; формування параметрів для виклику заданої функції push offset buflen ; 2-й параметр: адреса buflen push offset user_name ; 1-й параметр: адреса user_name call GetUserNameA ; виклик функції API згідно варіанта ; формування параметрів вікна для відображення результату push 40h ; стиль вікна - одна кнопка "OK" ; з піктограмою "і" push offset hello_title ; адреса рядка із заголовком push offset hello_message ; адреса рядка з повідомленням push 0 ; хендл програми-власника вікна call MessageBoxA ; виклик функції API push 0 ; код виходу з програми call ExitProcess ; завершення програми end Start ; закінчення сегменту коду Параметри виклику функції: GetUserName - Як визначити ім'я поточного користувача Windows Win32 API Функція GetUserName - Отримує ім'я користувача для поточного процесу. Зазвичай це ім'я користувача зареєстрованого в системі. Ім'я поточного сеансу: BOOL GetUserName ( LPTSTR lpBuffer, // покажчик на буфер LPDWORD nSize // отримує розмір повертає кількість символів ); РЕЗУЛЬТАТ ВИКОНАННЯ: / ВИСНОВОК: На даній лабораторній роботі я навчився користуватися Win32 API для розробки програм на мові Assembler.
Антиботан аватар за замовчуванням

05.11.2016 21:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!