Тема: Реестр Widows 7

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
  • Формат файла:
    MS Word
  • Размер файла:
    123,75 Кб
Реестр Widows 7
Реестр Widows 7
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Вступ

реєстр програмування алгоритм windows

Темою курсового проекту є розробка програмного додатку зчитування даних з реєстру ОС Windows.

Методом дослідження курсової роботи є аналіз та обробка літератури, в якій висвітлюється потрібне нам питання. До складу літератури входять підручники, журнали, довідкова та наукова література. Такий метод дослідження дозволяє отримати відносно цілісне уявлення про дану проблему.

Курсовий проект складається з вступу, основної частини та висновку. Основна частина містить 3 розділи.

В першому розділі розглядається Опис предметної області. Перший розділ дає змогу уявити про реєстр ОС Windows 7. Також розглядаються структура реєстру ОС Windows 7. Крім того описуються роль реєстру в ОС Windows 7.

В другому розділі описується Робота з реєстром ОС Windows У другому розділі наводиться структура Windows-додатку. Також описані функції WinAPI роботи с реєстром. Крім того приводиться інформація, про REG-файл. В третьому розділі розглядаємо розробку програмного додатку зчитування даних з реєстру ОС Windows. Також розглядається вибір середовища програмування, крім того приводиться інформація про алгоритм задачі.

Така структура курсової роботи дозволяє найбільш повно розкрити обрану тему.

1. Опис предметної області

.1Постановка завдання

У даному курсовому проекті необхідно вивчити теоретичний матеріал з теми Розробка програмного додатку зчитування даних з реєстру, описати алгоритм програми і реалізувати його за допомогою мови низького рівня асемблера. Програма повинна виконуватися в операційній системі Windows, тобто мати графічний інтерфейс і відповідати структурі Windows-додатку. Програмний продукт має виконувати такі функції:

відкривати ключ реєстру;

отримувати інформацію про ключ реєстру;

повертати тип та дані вказаного значення по імені;

зберігати дані в полі відкритого ключа реєстру;

створювати зазначений ключ;

звільняти дескриптор зазначеного ключа.

1.2 Реєстр ОС Windows 7

Реєстр - це база даних Windows. Вона містіть відомості, без яких нормальна робота в системі неможлива. Тут є дані про обладнання та програмах і їх параметрах, про профілі облікових записів користувачів комп'ютерів. Операційна система й інше програмне забезпечення (ПЗ) постійно працюють з реєстром. Реєстр, крім того є частою мішенню для шкідливого ПЗ. Реєстр є важливим компонентом, в якові не слід вносити зміні без крайньої споживи. Проте в деяких випадках без втручання в реєстру не обійтися.

Отже, якщо реєстр - це база даних Windows, то потрібен певний інструмент для роботи з даною базою. Таким інструментом в Windows є Редактор реєстру. Зверніть увагу, що ярлик цієї програми ви не знайдете на Робочому столі, а також в меню кнопки Пуск. Звичайний користувач не повинен знати про існування даної програми. Тому поступимо таким чином. Натиснемо кнопку Пуск і в рядку пошуку наберемо слово regedit. Ви побачите в розділі Програми пункт regedit.exe - це і є файл редактора реєстру Windows.

Тепер розглянемо саму програму. Її інтерфейс нагадує Провідник. Зліва ви бачите ієрархічне дерево зі значками папок - це розділи реєстру. Як і у випадках з звичайними папками, які можуть містити вкладені папки, розділи можуть мати вкладені підрозділи. У правій частині редактора ми бачимо назви параметрів, тип параметрів і їх значення. Розглянемо елементи реєстру докладніше.

Незважаючи на те, що розробники Microsoft свого часу доклали максимум зусиль, щоб підвищити як швидкість завантаження Windows Vista, так і її продуктивність, багато користувачів продовжували нарікати, що їх очікування щодо цього не виправдалися. Часто можна було почути, що Windows XP SP3 істотно швидше, ніж Vista. Навіть поява продуктів Service Pack 1 і 2 для Windows Vista цього розчарування не зменшили. Саме тому при розробці Windows 7 продуктивність була поставлена, так би мовити, у главу кута. Вже ранні бета-версії Windows 7 і завантажувалися істотно швидше, і в процесі роботи демонстрували значно вищу продуктивність, ніж Windows Vista і Windows XP. За рахунок чого ж це було досягнуто? В основному - за рахунок зведення до мінімуму кількості сервісів, що стартують при запуску системи, кількості дискових операцій, операцій читання і запису в реєстр і індексованих файлів. Що ще важливіше, Windows 7 не тільки серйозно підвищує продуктивність, але і відрізняється від своїх попередниць набагато більш ефективним енергоспоживанням. Починаючи з Windows 7, у системних сервісів зявилася можливість триггерного запуску (triggered startup). Це означає, що тепер для сервісу немає необхідності постійно працювати у фоновому режимі з метою моніторингу подій, як це було в більш ранніх версіях Windows. У Windows 7 сервіси можуть стартувати тільки при настанні певних подій. Розробники програмного забезпечення мають можливість конфігурування тригерів і розробки своїх сервісів у відповідності з цими новими вимогами. До теперішнього часу в Інтернеті вже зявилося безліч статей, що пропонують огляди та порівняльний аналіз продуктивності Windows 7, Windows Vista і Windows XP2. І з кожним днем зявляються все нові і нові огляди, які в більшості своїй підтверджують сказане - так, Windows 7 дійсно є найшвидшою з усіх операційних систем Microsoft, існуючих на сьогоднішній день. Оптимальна настройка і конфігурація системи дозволять вам змусити її працювати ще швидше і буквально вичавити з неї максимум.

Сама по собі концепція реєстру не нова для Windows. Проте сучасний реєстр - це гігантський крок вперед у досягненні керованості всієї системи в цілому з єдиного джерела - реєстраційної бази даних (registry database). Ця база даних і є основним сховищем всіх мережевих, системних і користувальницьких параметрів налаштування Windows. Нагадаємо, що в еру панування MS-DOS і ранніх версій Windows (які представляли собою просто надбудову над MS-DOS) всі програми зберігали конфігураційну інформацію в ініціалізації файл (INI-файлах). Ними служили звичайні файли формату ASCII, які були доступні кожному і могли редагуватися будь-яким текстовим редактором. Першою операційною системою з сімейства Windows, що одержала широке поширення, стала Microsoft Windows 3.11. Саме в ній зявився зачаток сучасного реєстру - файл Reg.dat. Втім, в Windows 3.1 цей зародковий реєстр цілком мирно співіснував з традиційними файлами налаштувань.

1.3 Роль реєстру в ОС Windows 7

Буває така проблема, коли важливу роботу необхідно зробити терміново, але на екрані зявляються дивні і «лякаючи» повідомлення, що інформують про неможливість завантаження операційної системи через те, що реєстр пошкоджений. А адже з такою проблемою час від часу стикаються всі люблячі експерименти користувачі операційних систем з сімейства Windows NТ. Це було справедливо для Windows NT/2000/XP і це залишилося в силі як для Windows Vista, так і для Windows 7. В Windows Vista виводяться на екран повідомлення, яке стало більш інформативними, і в Windows 7 ця тенденція була продовжена. І хоча середовище відновлення після збоїв (Windows Recovery Environment, WinRE) стала в останніх версіях Windows істотно могутніше і зручніше, ніж Консоль відновлення (Recovery Console), Windows 2000/XP чітко демонструють, що навіть єдина помилка в системному реєстрі може вплинути на всю системну конфігурацію і запросто перешкодити завантаженні.

Так само, як і в більш ранніх версіях Windows, в Windows 7 є додатки, налаштувати які можна тільки шляхом конфігурування системного реєстру. Саме тому важливо знання архітектури реєстру, його внутрішнього устрою, а також наявність практичних навичок роботи з ним.

Реєстр складний для розуміння і розшифровки, однак він являє собою найважливіший компонент будь-якої сучасної операційної системи з сімейства Windows. Windows 7, як і будь-яка інша операційна система з лініїки Windows NT, працювати без нього не зможе. Реєстр - це централізована база даних, яка зберігає всі налаштування операційної системи і працюючих у ній додатків. У цьому сенсі реєстр аналогічний різноманітним INI-файлів, а також файлів Autoexec.bat і Config.sys, які існували в ранніх версіях Windows. Реєстр містить інформацію про всі апаратних пристроях, включаючи пристрої Plug and Play (PnP), дані OLE, відомості про розширення імен файлів, всіх системних компонентах і працюючих в системі додатках, мережеві параметри, інформацію безпеки і т. п. Узагальнено кажучи, якщо на компютері є програмний або апаратний компонент, який так чи інакше впливає на його роботу, то інформація про нього зберігається і в реєстрі. Спрощена схема, що демонструє системні компоненти та їх взаємодія з реєстром, наведена на рисунку 1.3.

Рисунок 1.1 - Спрощена схема системних компонентів реєстру ОС Windows 7

Як правило реєстр можна розглядати як записну книжку Windows - як тільки системі потрібна якась інформація, то вона шукає її в реєстрі. Реєстр дуже обширний і дати однозначне його визначення неможливо. Приблизно, Реєстр - компонент ОС компютера, який в ієрархічній базі даних зберігає найважливіші установки та інформацію про додатки, системних операціях і користувальницької конфігурації. Реєстр виконує такі основні функції:

відстежує всі системні пристрої та їх установки;

працює як база даних, яка уніфікує функціонування додатків;

перевіряє наявність необхідних драйверів для інсталюємого обладнання;

надає системні сервіси, які необхідні для роботи багатьох програм;

забезпечує запуск необхідного додатку при клацанні мишею;

зберігає інформацію що відноситься до системних правилам.

Отже, розглянемо коротко, як компоненти Windows 7 використовують системний реєстр.

Програми установки - програма Windows 7 Setup при першому запуску збирає інформацію про систему і створює системний реєстр на основі зібраної інформації. Інші програми-установники, що виробляють установку драйверів або додатків, читають інформацію з системного реєстру і додають туди свою конфігурацію. Якщо програма-інсталятор розроблена коректно, то вона читає інформацію з системного реєстру і визначає, чи присутні в системі компоненти, необхідні для успішного завершення процесу інсталяції. Завдяки наявності системного реєстру як централізованої бази даних про всі програмних і апаратних компонентах, всі програми можуть спільно використовувати цю інформацію і більш успішно взаємодіяти один з одним. Будь-який додаток, що претендує на статус Designed for Windows 7, повинно реєструвати свої конфігураційні дані в системному реєстрі і надавати коректно працюючу утиліту деінсталяції. Збережена в реєстрі реєстраційна інформація додатків дозволяє коректно виконати процедуру деінсталяції, що не видаляючи спільно використовуваних компонентів (DLL, OCX і т. п.), які можуть бути необхідні для роботи інших додатків.

Менеджер завантаження Windows - в порівнянні з попередніми версіями систем з сімейства Windows NT послідовність завантаження Windows, починаючи з Windows Vista, зазнала змін. Більш докладно ці питання будуть розглядатися в розділі 7, поки ж досить відзначити, що Диспетчер завантаження (файл Bootmgr) отримує доступ до бази даних BCD (Boot Configuration Data), яка, як уже говорилося, зберігається в реєстрі. Після читання конфігураційних даних завантаження Менеджер завантаження передає управління завантажувач Windows - файлу Winload.exe, який, в першу чергу, читає необхідні дані з реєстру, а потім завантажує в память ядро операційної системи (% system32% \ ntoskrnl.exe) і рівень апаратних абстракцій (% system32% \ hal.dll), а також всі драйвери початкового завантаження і DLL режиму ядра. Ось чому в разі відсутності або пошкодження файлів реєстру операційна система просто не завантажиться.

Диспетчер PnP (PnP Manager) - компонент режиму ядра, що вперше зявився в Windows 2000. Диспетчер PnP виконує виявлення пристроїв і їх ідентифікацію за так званим ідентифікатором постачальника (vendor ID, VID) і ідентифікатором пристрої (device ID, DID). Комбінація цих двох чисел унікальним чином визначає пристрій. Виявивши унікальну комбінацію VID і DID, Диспетчер PnP запрошувати з реєстру інформацію про шину, на якій виявлено пристрій, і перевіряє, чи встановлений драйвер для цього пристрою. Якщо драйвер пристрою ще не встановлений, то Диспетчер PnP інформує про це підсистему PnP режиму користувача. Ця підсистема повинна виявити відповідний INF-файл для інсталяції драйвера і почати його установку. У даному прикладі пристрій являв собою КПК, вперше підключений до компютера, що працює під управлінням Windows 7. Операційна система правильно впізнала пристрій, почала установку його драйвера, після чого не минуло й хвилини, як драйвер пристрою був встановлений, а саме воно - готово до роботи. Після завершення установки драйвера відразу ж було запущено додаток Windows Mobile Device Center, що пропонує почати роботу з даними КПК - виконати синхронізацію даних або почати обмін файлами без синхронізації. Таким чином, незважаючи на те, що процес установки нового обладнання за умови його сумісності з Windows 7 відбувається автоматично, насправді системний реєстр активно бере участь у цьому процесі.

1.4 Структура реєстру

Для розуміння логічної структури реєстру найпростіше провести аналогію зі структурою файлової системи на диску. Реєстр містить ключі (keys), які аналогічні каталогом, і параметри (values), які можна порівняти з файлами, що зберігаються на диску. Ключі реєстру є контейнери, у складі яких можуть міститися як вкладені ключі (subkeys), так і параметри. Параметри реєстру (як і файли) містять дані. Ключі, що знаходяться на верхньому рівні цієї ієрархічної структури, називаються кореневими ключами (root keys). Схема іменування ключів і параметрів реєстру також запозичується від схеми іменування шляхів до файлів і каталогів, прийнятої для файлової системи. Порівняйте, наприклад, типовий шлях до каталогу (WORK \ BHV) і типовий шлях до вкладеного ключу реєстру (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentСontrolSet). Реєстр Windows 7, як і реєстр Windows 2000/XP \ Vista, містить 5 кореневих ключів: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS і HKEY_CURRENT_CONFIG.

Всі імена кореневих ключів починаються з рядка HKEY_, що вказує розробникам програмного забезпечення на те, що це - дескриптор, який може використовуватися програмою. Дескриптор (handle) - це значення, що застосовується для унікального опису ресурсу, до якого програма може отримати доступ.

Кореневі ключі реєстру:

HKEY_LOCAL_MACHINE;

HKEY_CLASSES_ROOT;

HKEY_CURRENT_CONFIG;

HKEY_CURRENT_USER;

HKEY_USERS.

Ключ HKEY_LOCAL_MACHINE містить глобальну інформацію про апаратні засоби і операційній системі, в тому числі: тип шини, системна память, драйвери пристроїв і керуючі дані, використовувані при запуску системи. Інформація, що міститься у складі цього ключа, діє стосовно всіх користувачам, які реєструються в системі. На верхньому рівні ієрархії реєстру для цього ключа є три псевдоніма: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG і HKEY_DYN_DATA.

Ключ HKEY_CLASSES_ROOT містить асоціацію між додатками і типами файлів (з розширення імені файлу). Крім того, цей ключ зберігає інформацію OLE, асоційовану з обєктами COM, а також дані по асоціаціям файлів і класів (еквівалент реєстру ранніх версій Windows, що служили налаштуванням над MS-DOS). Параметри цього ключа збігаються з параметрами, розташованими під ключем HKEY_LOCAL_MACHINE\ Software \ Classes. Детальну інформацію про ключ HKEY_CLASSES_ROOT можна знайти в керівництві OLE Programmers Reference, що входить до складу продукту Windows Platform Software Development Kit (SDK).

Ключ HKEY_CURRENT_CONFIG містить конфігураційні дані для поточного апаратного профілю. Апаратні профілі (Hardware profiles) представляють собою набори змін, внесених в стандартну конфігурацію сервісів і пристроїв, встановлену даними ключів Software і System кореневого ключа HKEY_LOCAL_MACHINE. У ключі HKEY_CURRENT_CONFIG відображаються тільки зміни. Параметри цього ключа зявляються також під ключем HKEY_LOCAL_MACHINE\System\CurrentControSet\HardwareProfiles\Current.

Ключ HKEY_CURRENT_USER містить профіль користувача, на даний момент зареєстрованого в системі, включаючи змінні оточення, настройку робочого столу, параметри налаштування мережі, принтерів і додатків. Цей ключ являє собою посилання на ключ HKEY_USERS\user_SID, де user_SID - ідентіфкатор безпеки (Security ID) користувача, зареєстрованого в системі на поточний момент.

Ключ HKEY_USERS містить всі активно завантажені користувача профілі, включаючи HKEY_CURRENT_USER, а також користувальницький профіль за стандартом (. DEFAULT). Користувачі, які отримують віддалений доступ до сервера, не мають профілів, які утримуються під цим ключем, - їх профілі завантажуються в реєстри на власних компютерах.

Параметри є важливою частиною реєстру після розділів. Кожен параметр має своє ім'я, значення і тип значення. Розглянемо найбільш часто використовуваних типів даних:

REG_BINARY - двійкові дані (Binary Value) є набором двійкових даних, доступних для редагування в шістнадцятиричному форматі. Подібний тип даних використовується для зберігання відомостей про апаратні ресурси;

REG_DWORD - ціле число (DWORD Value) може задаватися в двійковому, десятковому і шістнадцятиричному форматах. Це один з найвживаніших типів параметрів. Дуже часто він працює своєрідним перемикачем: 1 - включення (True) /0 - виключення (False). У реєстрі Windows 7 присутньо два види DWORD: 32-бітове значення і 64-бітове значення.

REG_MULTI_SZ - багаторядковий текст (Multi-String Value) зазвичай використовується для вистави;

REG_SZ - звичайний рядок в кодуванні Unicode будь-якої довжини. Найчастіше в цьому типові даних зберігається інформація, яка прочитуватиметься користувачем, шляхом доступу, назви пристроїв;

REG_NONE - служить як семафор, тобто параметр існує, але не містить ніякого значення. Деякі застосування перевіряють наявність цього параметра і, виходячи з результату перевірки, виконують або не виконують дію.

2. Робота з реєстром ОС Windows

.1 Структура Windows-додатку

При написанні будь-яких програм для Windows необхідний файл включаємий файл windows.h. У ньому містяться прототипи всіх функцій Windows, визначені типи і структури даних, глобальні змінні і константи. Як вже наголошувалося вище, додаток Windows містить, принаймні, три принципово важливих модуля:

Функція Winmain;

Функція GetMessage;

Функція Wndproc.

Функція Winmain викликається системою як початкова точка входу, що базується на Windows, прикладної програми.

Синтаксис функції:WINAPI Winmain (HINSTANCE hinstance, // дескриптор поточного екземпляра вікна HINSTANCE hprevinstance, // дескриптор попереднього екземпляра вікна LPSTR lpcmdline, // покажчик на командний рядок int ncmdshow // показує стан вікна);

Параметри функції:

hInstance - [in] Дескриптор поточного екземпляра прикладної програми;

nCmdShow - [in] Визначає, як вікно має бути показане.

Якщо функція досягла мети, то завершується тоді, коли прийме повідомлення Wm_quit, при цьому вона повинна повернути значення виходу, що міститься в параметрі wparam цього повідомлення. Якщо функція завершується перед введенням циклу повідомлень, вона повинна повернути нуль.ініціалізує прикладну програму, відображає на екрані її основне вікно і, потім, входить в видобуває і розподіляє цикл повідомлень, що є керуючою структурою верхнього рівня для інших елементів виконання прикладної програми. Цикл повідомлень завершується тоді, коли він отримує повідомлення WM_QUIT. У цей момент, WinMain завершує роботу прикладної програми, повертаючи значення, передане в параметр wParam повідомлення WM_QUIT. Якщо WM_QUIT було отримано в результаті виклику PostQuitMessage, значення wParam - значення параметра nExitCode функції PostQuitMessage. Для отримання додаткової інформації, див Створення циклу обробки повідомлень. Додатки ANSI можуть використовувати параметр lpCmdLine функції WinMain, щоб звернутися до командного рядка, виключаючи імя програми. Причина цього в тому, що WinMain не може повертати рядки УНІКОД через те, що lpCmdLine використовує тип даних LPSTR, не тип даних LPTSTR. Функція GetCommandLine може бути використана для звернення до рядків Unicode в командному рядку, тому що вона використовує тип даних LPTSTR.

Віконна функція Wndproc призначена для організації адекватної реакції з боку Windows-програми на дії користувача і підтримки в актуальному стані того вікна додатка, повідомлення якого вона обробляє. Додаток може мати кілька віконних функцій, їх кількість визначається кількістю класів вікон, зареєстрованих в системі функцією RegisterClass (). Функції RegisterClass () за допомогою примірника структури типу WNDCLASS передається покажчик на певну віконну функція Windows-програми. Дана функція до кінця роботи програми повязана з екземплярами вікон, які, в свою чергу, створюються іншою функцією API - CreateWindow ().

Таким чином, при надходженні повідомлення Windows викликає віконну функцію і передає їй ряд параметрів, які беруться з відповідних полів повідомлення. Із заголовка віконної функції LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lparam) видно, що вона отримує при активації її (функцією DispatchMessage ()) 4 параметра. Перший параметр (hwnd) - дескриптор вікна, якому призначено дане повідомлення. Це - той самий дескриптор, який був отриманий нами як результат роботи функції CreateWindow (), і в нашому варіанті програми тут же втрачено, так як був оголошений як локальна для функції Create () змінна. Тепер цей же дескриптор повернувся до нас з Windows як параметр віконної функції. Він особливо корисний у тих випадках, коли на базі одного класу створюється кілька розрізняються чимось вікон. Якщо клас один, то і віконна функція для всіх цих вікон одна; аналізуючи тоді параметр hwnd, програма може визначити, в яке саме вікно прийшло повідомлення. У нас вікно одне, однак, аргумент hwnd все ж таки знадобиться. Другий параметр (msg) визначає код прийшов повідомлення. Оскільки повідомлень багато, віконна функція повинна, перш за все, проаналізувати цей код і здійснити перехід на фрагмент обробки відповідного повідомлення. wParam і lParam - додаткові параметри, які є копіями відповідних полів структури надійшло повідомлення. Решта два поля структури msg - time і POINT використовуються досить рідко, і при необхідності їх значення можна витягти безпосередньо з екземпляра структури повідомлення. Центральним місцем віконної функції є синтаксична конструкція, в завдання якої входить розпізнавання надійшло повідомлення за його типу і передача управління на ту гілку коду віконної функції, яка продовжує далі роботу з параметрами повідомлення. Для цього використовується оператор switch case (перемикач).

Всі параметри, одержувані функцією WinMain, формуються операційною системою. Параметри hinstance і hPrevinstance являють собою відповідно ідентифікатори поточної та попередньої копії додатку. Додатки WIN32 функціонують в ізольованих віртуальних адресних просторах і в силу цього не мають можливості визначити через параметр hPrevinstance, не запущене чи додаток вдруге. Цей параметр використовувався в попередніх версіях Windows, для додатків WIN32 він завжди дорівнює нулю. Параметр lpszCmdLine - далекий покажчик на рядок запуску програми, параметр nCmdShow вказує рекомендований додатком спосіб представлення головного вікна при запуску. Додаток може ігнорувати цей параметр, однак це не є хорошим стилем програмування. Зазвичай значення даного параметра передається без змін функції ShowWindow для відображення на екрані головного вікна програми. Нижче наведені можливі значення параметра nCmdShow, визначені як константи з префіксами SW_:

SW_HIDE - приховати вікно і активізувати інше вікно;

SW_MINIMIZE - мінімізувати вікно і активізувати вікно верхнього рівня в системному списку;

SW_RESTORE - активізувати і відобразити вікно в його первісному розмірі і позиції;

SW_SHOW - активізувати і відобразити вікно в його поточному розмірі і позиції;

SW_SHOWMAXIMIZED - активізувати і відобразити вікно в повному розмірі;

SW_SHOWMINIMIZED - активізувати і відобразити вікно у вигляді піктограми;

SW_SHOWMINNOACTIVE - відобразити вікно у вигляді піктограми, активне вікно залишається активним;

SW_SHOWNA - відобразити вікно в поточному стані, активне вікно залишається активним;

SW_SHOWNOACTIVATE - відобразити вікно в його останньому розмірі і позиції, активне вікно залишається активним;

SW_SHOWNORMAL - аналогічно SW_RESTORE.

Модифікатор виклику WINAPI визначає порядок приміщення в стек параметрів функції при виклику. Для функцій також визначені наступні модифікатори:

# define CALLBACK __ stdcall;

# define WINAPI __ stdcall;

# define APIENTRY WINAPI;

- # define APIPRIVATE __ stdcall;

- # define PASCAL __ stdcall.

Функція GetMessage витягує чергове повідомлення з черги повідомлень викликав її потоку. Параметр lpmsg - далекий покажчик на структуру типу MSG. Параметр hwnd (ідентифікатор вікна) визначає конкретне вікно з числа вікон, створених потоком, якому надіслано повідомлення. Повідомлення, що ініціюються пристроями введення, такими як клавіатура або миша, надсилаються вікна, володіє фокусом введення (активного вікна). У кожен момент часу потік або взагалі не володіє фокусом введення (користувач працює з вікном іншого потоку), або фокус введення належить одному з його вікон. Якщо в якості другого параметра функції GetMessage вказано NULL (або 0), то повідомлення будуть вибиратися для всіх вікон, що належать викликав функцію потоку. Третій і четвертий параметри функції GetMessage задають діапазон номерів повідомлень, що витягають із черги. Якщо обидва параметри містять нуль, то витягуються всі повідомлення, спрямовані потоку. Функція GetMessage повертає значення FALSE в разі, якщо витягується повідомлення WM_QUIT, у всіх інших випадках повертається значення TRUE. Вибірка повідомлення WM_QUIT призводить до виходу з циклу, після чого зазвичай потік завершується. Слід також відзначити важливу особливість функції GetMessage: якщо функція виявляє, що черга повідомлень потоку порожня, то потік блокується і йому не виділяється процесорний час доти, поки нове повідомлення не надійде до черга. Якщо порожні черзі всіх прикладних потоків, то зазвичай процесорний час розподіляється між низькопріоритетним системними потоками, зокрема, запускається хранитель екрану.

Синтаксис:GetMessage (lpMsg,hWnd,wMsgFilterMin,wMsgFilterMax);

Параметри функції:

lpMsg - [out] приймає інформацію з черги повідомлень потоку;

hWnd - [in] Дескриптор вікна, чиї повідомлення повинні бути вилучені. Вікно повинне належати викликає потоку;

wMsgFilterMin - [in] Визначає цілу величину самого маленького значення повідомлення, яке буде витягнуто. Використовуйте повідомлення WM_KEYFIRST, щоб задати перше повідомлення клавіатури або WM_MOUSEFIRST, щоб задати перше повідомлення миші.

Якщо функція витягує якесь повідомлення, а не WM_QUIT, величина що повертається буде значенню - не нуль. Якщо функція витягує повідомлення WM_QUIT, величина, що повертається - нуль. Якщо є помилка, величина, що повертається - (мінус). Наприклад, функція завершується помилкою, якщо hWnd - неприпустимий дескриптор вікна або lpMsg - неприпустимий покажчик. Щоб отримати додаткові відомості про помилку, викличте функцію GetLastError.

2.2 Функції WinAPI роботи з реєстром ОС Windows

Реєстр Windows (системний реєстр) - ієрархічно побудована база даних параметрів і налаштувань в більшості операційних систем Microsoft Windows.

Для роботи з реєстром використовуємо такі функції:

RegCloseKey;

- RegCreateKey;

- RegDeleteKey;

- RegDeleteValue;

- RegEnumKey;

- RegEnumValue;

RegOpenKey.

Функція RegCloseKey закриває відкритий раніше розділ реєстру.

Синтаксис:RegCloseKey (hKey

);

Функція вимагає єдиний параметр типу FIXED - маніпулятор відкритого розділу. При успішному завершенні функція повертає T, в іншому випадку повертається список з двох цілих: -1 і цілочисельний код помилки.

Функція RegCreateKey дозволяє створити неіснуючий розділ реєстру і відкрити його. Якщо розділ вже існує, то функція відкриває його.

Синтаксис:

LONG WINAPI RegCreateKey (

_In_ HKEY hKey,

_In_opt_ LPCTSTR lpSubKey,

_Out_ PHKEY phkResult

);

Першим параметром функції повинна бути бітова константа, що ідентифікує одну з кореневих гілок реєстру. Другим параметром повинна бути рядок - ім'я розділу. Ім'я розділу може містити розділити рівнів - зворотний слеш. У цьому випадку функція створить необхідну ланцюжок вкладених розділів. Третім параметром функція вимагає ціле число (FIXED), що задає статус створюваного ключа. Якщо заданий нуль, то ключ буде збережений у реєстрі, якщо задана одиниця-то ключ збережеться тільки до перезавантаження Windows. Останній четвертий параметр задає права доступу до заданого маніпулятору. Права доступу - це одна з бітових констант.

Функція завжди повертає список з двох цілих. Ознакою успішного завершення є відмінність голови списку від -1. У цьому випадку голова списку є маніпулятором відкритого розділу. Другий елемент списку може приймати значення 1 або 2. Одиниця означає, що необхідний розділ створено в процесі виклику. Двійка означає, що розділ існував раніше.

Функція RegDeleteKey дозволяє видалити розділ (ключ) реєстру з усіма його підрозділами.

Синтаксис:RegDeleteKey (hKey,lpSubKey

);

Функція приймати два параметри: позначення кореневого розділу (BITS) і повного «шляху» до розділу (STRING). Роздільником рівнів є зворотний слеш. Важливо відзначити, що відкривати розділ не потрібно.

Функція при успішному завершенні повертає T, а в разі помилки - список з двох елементів. Перший дорівнює -1, другий являє собою код завершення.

Функція RegDeleteValue дозволяє видалити параметр з попередньо відкритого розділу.

Синтаксис:RegDeleteValue (hKey,lpValueName

);

Функція приймає два параметри: маніпулятор розділу (FIXED) і ім'я параметра (STRING). При успіху функція повертає T, а при помилці - список з двох елементів: перший дорівнює -1, другий дорівнює коду завершення.

Функція RegEnumKey дозволяє перерахувати підрозділи попередньо відкритого розділу.

Синтаксис:

LONG RegEnumKey (hKey,dwIndex,lpName,cbName

);

Функція приймає два параметри: маніпулятор відкритого розділу (FIXED) і номер запитуваної підрозділу (FIXED). При успішному завершенні функція повертає список з трьох елементів: нуля (ознака успішного завершення), імені підрозділу та імені класу підрозділу. При невдалому завершенні функція повертає список з двох елементів. Перший з них - мінус одиниця (ознака помилки), другий - код завершення.

Функція RegEnumValue дозволяє перерахувати параметри попередньо відкритого ключа.

Синтаксис:RegEnumValue (hKey,dwIndex,lpValueName,lpcbValueName,lpType,lpData,lpcbData

);

Функція вимагає два параметри: маніпулятор розділу (FIXED) і номер параметра (FIXED). Параметри нумеруються з нуля.

Якщо процедура повертає список, перший першим елементом якого є нуль (ознака успіху), другим елементом є ім'я чергового параметра, третім елементом є тип параметра, четвертим (і, можливо, подальшими) є складові частини значення параметра. При невдалому завершенні першим елементом списку буде -1, а друга - код завершення.

Синтаксис:RegOpenKey (hKey, // дескриптор открытого ключаlpSubKey, // адрес имени открываемого подключаphkResult // адрес дескриптора открытого ключа

);

Функція вимагає три параметри: гілка реєстру (BITS), шлях до потрібного розділу (STRING) і права доступу (BITS). При успішному завершенні функція повертає список з двох елементів: нуля (ознака успіху) і маніпулятора відкритого розділу.

2.3 REG-файл

файл - файл в який можна вносити зміни до реєстру шляхом внесення нових значень для потрібних параметрів в самому редакторові реєстру або за допомогою імпорту. Але є і інший спосіб. Можна заздалегідь підготувати файл в заданому форматі, і потрібні параметри автоматично встановляться в реєстрі. Для цих цілей використовуються текстові файли з розширенням REG.

От як виглядає приклад reg-файлу, який дозволить створити той же розділ з параметрами, які вводилися на попередніх практичних заняттях.Registry Editor Version 5.00 Встановлюємо нові параметри для розділу Test [Hkey_current_user\software\test] «Catname»= «За курсач потрібно ставити 5» «Catage»=dword:00000008

Розглянемо формат REG-файлів. Спочатку йде заголовок файлу Windows Registry Editor Version 5.00.

Потрібно зауважити, що в більш ранніх операційних системах, Windows 98 і Windows NT 4.0, використовувався заголовок REGEDIT4. Якщо у вас збереглися подібні старі файли, то не лякайтеся. Windows 7 зрозуміє цей файл і коректно обробить інформацію. А ось зворотний процес буде недоступний - Windows 98 не зможе розпізнати новий заголовок і видасть помилку. Одна важлива деталь - після заголовка обовязково йде порожній рядок. Якщо вам потрібно включити в документ коментар, щоб не забути про призначення параметра, то поставте спочатку символ «;» (крапка з комою). При експорті розділу Test з минулого прикладу жодних коментарів не додається. Я це зробив вже після створення REG-файлу. Коментар служить для зручності самого користувача і до реєстру не вноситься. Встановлюємо нові параметри для розділу Test. Далі вказується розділ реєстру, який полягає у квадратні дужки. Зверніть увагу, що якщо зазначений у файлі розділ в реєстрі не існує, то він буде створений: [HKEY_CURRENT_USER \ Software \ Test] І нарешті, останній штрих - ви вказуєте параметр реєстру і його значення: «CatName» = 'Курсач на 5' В REG-файлі може міститися кілька розділів і параметрів реєстру, які пишуться з нового рядка, але заголовок використовується тільки один на самому початку. Наприкінці кожного файлу також має бути присутня порожній рядок. Як бачите, формат REG-фай-лов зовсім не складний і їх можна створювати самостійно, не вдаючись до допомоги інших програм.

Писати REG-файл можна в будь-якому текстовому редакторі, наприклад в Блокноті. Створіть новий текстовий документ, наберіть наведений вище код (рис. 2.1) і збережіть файл з розширенням REG. Якщо ви хочете потренуватися в створенні подібних файлів, то простіше згенерувати їх за допомогою експорту з редактора реєстру, а потім внести зміни в Блокноті.

Рисунок 2.1 - Редагування тексту файлу в текстовому редакторі

Крім редактора реєстру, що має графічний інтерфейс, у складі Windows 7 є також утиліта командного рядка REG.EXE, призначена для досвідчених користувачів. З її допомогою можна створювати різні сценарії для виконання різних завдань, повязаних з експортом та імпортом розділів реєстру

Для експорту параметрів реєстру за допомогою командного рядка використовується команда REG EXPORT, що володіє наступним синтаксисом: REG EXPORT< імя_розділу> <імя файлу> [/ y]

Параметри:

<імя_розділу> - повний шлях до розділу реєстру у вигляді: КОРІНЬ \ Підрозділ (тільки для локального компютера). В якості кореня використовуються значення HKLM-|-HKCU-|-HKCR-|-HKU-|-HKCC. В якості підрозділу використовується повний шлях до розділу реєстру в обраному кореневому розділі;

<імя_файлу> - імя файлу на диску, в якому будуть записані експортовані запису;

/у - необовязковий параметр. З його допомогою можна виводити вікно з попередженням про те, що на диску вже існує файл з таким же імям.

За допомогою команди REG ADD можна додати параметри до реєстру. Таким чином, можна включити команди для додавання параметрів до складу сценарію, не вдаючись до допомоги REG-файлів.

Синтаксис:ADD<імя_розділу > [/v <імя_параметра> | / ve] [/t <тип>] [/s < роздільник >] [/d <дані>] [/f]

Параметри:

імя_розділу - [\\<компютер>\]<розділ>

<компютер> - імя віддаленого компютера;

/v імя параметра, який додається в обраний розділ;

/ve - додавання параметра з порожнім імям (за замовчуванням) в цей розділ;

/t - тип даних. Може використовуватися одне з наступних значень: REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ | REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE;

/f - виконання заміни існуючих записів без запиту підтвердження.

3. Розробка програмного додатку зчитування даних з реєстру ОС Windows

.1 Вибір середовища програмування

Мова Асемблер серед великої кількості мов програмування актуальна через свою ефективність і точність.

Асемблері програми можуть бути дуже ефективними. З програмістів, з рівними навиками і здібностями, що працює на мові Асемблера створить програму більш компактну і швидкодіючу, ніж така ж програма, написана мовою високого рівня. Це так практично для всіх невеликих або середніх програм. На жаль, в міру зростання розмірів, програми на мові Асемблера втрачають частину своїх переваг. Мова Асемблера вимагає планування кожної дії комп'ютера. У невеликих програмах це дозволяє оптимізувати роботу програми з апаратними засобами. У великих же програмах величезна кількість деталей може перешкодити ефективно працювати над самою програмою, навіть якщо окремі компоненти програми виявляться дуже непоганими. Безумовно, програмування на мові Асемблера відповідає потребам не кожної програми.

Програми на мові Асемблера дуже точні. Оскільки ця мова дозволяє програмістові безпосередньо працювати зі всім апаратним забезпеченням, програма може робити те, що недоступно ніякий інший програмі. Безсумнівно, що в програмуванні пристроїв введення-виведення, де потрібен контроль над окремими розрядами регістрів пристрою, програмування на мові Асемблера - єдиний відповідний вибір

Ефективність і точність мови Асемблера дають певні переваги. Але його деталізованість створює і деякі проблеми.

Програмісти фірми IBM писали з використанням процедур Асемблера всі програми управління пристроями введення-виведення для IBM PC. Для керування пристроями введення-виведення і системою переривань, потрібна була та точність мови Асемблера, яку не може забезпечити ні одну іншу мову програмування. Аналогічно, на мові Асемблера у фірмі IBM писалися процедури діагностики, які повинні перевіряти кожну деталь апаратури.

Мова Асемблера необхідний також і в тих випадках, коли головними є робочі характеристики програми. Це може бути час виконання або кінцевий розмір програми.

І останнє, при програмуванні на мові Асемблера і тільки через написання програм на цьому рівні деталізації можна зрозуміти як працює машина на самому нижньому рівні.

Найбільш популярними на сьогоднішній день є пакети Turbo Assembler (TASM) фірми Borland, Macro Assembler for Windows32 (MASM32), створений Hutch (на основі старого MASM фірми Microsoft), а також Flat Assembler (FASM), і Netwide Assembler (NASM), що розвивається командою NASM Development Team. Всі ці асемблери надають досить широкі можливості для програміста. На них можна писати програми як під DOS, так і під Windows.

Існує також безліч інших видів асемблера, число яких зростає. Наприклад: CodeX Assembler, Gema Assembler, Light Macro Assembler (LASM), Lazy Assembler (LZASM), Table Driven Assembler (TDASM), NewBasic + + Assembler (NBASM), TMA Macro Assembler і ін.

RadASM - безкоштовна середовище розробки програмного забезпечення для ОС Windows і не тільки, спочатку призначена для написання програм мовою асемблера.

Має гнучку систему файлів налаштувань, завдяки чому може бути використана як середовище розробки програмного забезпечення на високорівневих мовах, а також документів, заснованих на мовах розмітки.Studio - це інтегроване середовище для розробки (IDE) програм на мові асемблера в ОС Windows. FreeWare безпосередньо підтримуються асемблери MASM та POASM, що дозволяє розробляти програми для DOS та Windows, але за допомогою надбудови FASM є можливість використовувати асемблер FASM або будь-який інший, навіть такі, що будують програми для інших операційних систем та процесорів, а також є можливість використовувати емулятори для запуска чи відлагоджування програм.

Для реалізації програмного додатку було обрано мову програмування Assembler а саме середовище програмування MASM32 через свою точність і компактність.Macro Assembler (MASM) - асемблер для процесорів сімейства x86. Спочатку був зроблений компанією Microsoft для написання програм в операційній сістемеMS - DOS і був протягом деякого часу найпопулярнішим асемблером, доступним для неї. Це підтримувало широке розмаїття макросредств і структурованість програмних ідіом, включаючи конструкції високого рівня для повторів, викликів процедур і чергувань (тому MASM - асемблер високого рівня). Пізніше була додана можливість написання програм для Windows. MASM - один з небагатьох інструментів розробки Microsoft, для яких не було окремих 16 - і 32 - бітових версій.

3.2 Опис алгоритму програми

Принцип роботи програмного додатку приведений на рисунку 3.1

Рисунок 3.1 - Блок схема програмного додатку

В початковому блоці описуються директива. 386 і підключаються бібліотеки ink та lib..386 - Це директива асемблера, що визначає набір інструкцій процесора, які можуть бути використані в програмі. За замовчуванням транслятор вважає, що програма пишеться для процесора 8086 і співпроцесора 8087. Для додатків win32 необхідно вказувати або. 386, або вище (486, 586, 686) - залежно від того, чи збираємося ми використовувати можливості, надані процесорами (сопроцессорами) наступних поколінь чи ні.flat, stdcall. Перший параметр - це модель пам'яті. Під Windows же у нас є одна -єдина модель пам'яті - flat.

Другий же параметр - stdcall - вказує на так звану угоду про виклик процедур. При програмуванні під win32 на макроассемблере потрібно використовувати угоду stdcall.- директива ассемблеру включити в текст програми, текст, що зберігається у вказаному файлі.- ця директива передається компонувальнику і повідомляє, що наша програма має бути слінковать з вказаною бібліотекою. Бібліотека являє собою деяку кількість готових до вживання процедур.

В наступному блоці задаються початкові значення програми Це відбувається в секції «.data».- розділ, де оголошуються змінні вже мають якесь то значення, (ініціалізовані дані).

Секція.code - розділ, де розташований код програми, тобто послідовність інструкцій, які повинен виконати комп'ютер. Тут викликається одна з функцій Windows API - RegOpenKeyEx, яка відкриває вказаний ключ.

Далі йде перевірка чи створений такий ключ:

Якщо так, то викликаємо функцію RegQueryInfoKey, яка дає інформацію про ключ реєстру. Далі використовуємо функцію RegQueryValueEx за допомогою якої повертаємо тип і дані вказаного значення. Використовуємо функцію lstrcmp за допомогою якої порівняємо зчитувані значення szBuffer=<szRun. Викликаємо функцію MessageBox, яка виводить повідомлення про перший запуск програми. Закриваємо розділ ключа за допомогою функції RegCloseKey. Викликавши функцію Exitprocess, яка закінчує роботу програми;

Якщо ні, виводится повідомлення про запуск програми більш ніж один раз. Викликаємо функцію RegCreateKey за допомогою якої створюється ключ реєстру.

Потім використовуємо перевірку, щоб переконатися, що не буде помилки. Викликаємо функцію RegSetValueEx, яка встановлює дані в полі значення ключа. Закриваємо розділ ключа за допомогою функції RegCloseKey. Викликавши функцію Exitprocess закінчуємо роботу програми.

3.3 Опис функції програмного додатку

Функція RegOpenKeyEx відкриває вказаний ключ.

Функція RegQueryInfoKey отримує інформацію про зазначений ключі реєстру.

Функція RegQueryValueEx повертає тип і дані вказаного значення по імені, що асоціюється з відкритим ключем реєстру.

Функція RegCreateKey створює зазначений ключ. Якщо ключ вже існує в реєстрі, то функція відкриває його.

Функція RegSetValueEx встановлює дані в поле значення відкритого ключа реєстру. Вона, також, може встановлювати додаткові значення і типи інформації для зазначеного ключа.

Функція RegCloseKey звільняє дескриптор зазначеного ключа.

3.4 Інструкція користувача

Робота програмного додатку приведена на рисунку 3.2 і 3.3

Вікно програмного додатку після першого запуску

Рисунок 3.2 - Перший запуск програми

Вікно програмного додатку після другого запуску

Рисунок 3.3 - Вікно після другого запуску програми

Системні вимоги для програмного додатку мінімальні, тому сучасних потужностей компютерів цілком достатньо для роботи програмного додатку.

Висновок

У даному курсовому проекті було вивчено теоретичний матеріал з теми робота з реєстром в операційній системі Windows. Розроблено алгоритм програми і реалізовано його за допомогою мови низького рівня асемблера. Програма виконується в операційній системі Windows, має графічний інтерфейс і відповідає структурі Windows-додатку. Програмний додаток виконує такі функції:

отримувати інформацію про ключ реєстру;

повертати тип та дані вказаного значення по імені;

встановлювати дані в полі відкритого ключа реєстру;

створювати зазначений ключ;

звільняти дескриптор зазначеного ключа.

Список використаних джерел

1. Александр Климов. Реестр Windows 7. - Санкт-Петербург: Питер, 2010

2. Виктор Ромашов. Реестр Windows 7 на 100%. - СПб.: Питер, 2010

. Галисеев.Г.В Ассемблер IBM PC. - М.:Издательский дом «Вильямс», 2004

. Ольга Кокорева. Реестр Windows 7. - СПб.: БХВ-Петербург, 2010.

5. Олег Калашников. Ассемблер это просто. 2-е изд. - СПб.: БХВ-Петербург, 2011

. #"justify">7. #"justify">8. http://msdn.microsoft.com/ens/library/windows/desktop/ms724842 (v=vs.85).aspx, Registry Function

Похожие работы

 

Не нашел материала для курсовой или диплома?
Пишем качественные работы
Без плагиата!