Функції управління реєстром Windows

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати


ФУНКЦІЇ управління реєстром WINDOWS

Введення

У табл.1 зведено всі функції системного реєстру, а опис основних слід безпосередньо після таблиці.

Таблиця 1 Підсумок функцій системного реєстру

Функція

Призначення

RegCloseKey

Закриває відкритий ключ системного реєстру

RegConnectRegistry

Виконує з'єднання з визначеним дескриптором системного реєстру на іншому комп'ютері

RegCreateKeyEx

Створює новий підключ

RegDeleteKey

Видаляє ключ з системного реєстру

RegDeleteValue

Видаляє значення з системного реєстру

RegDisablePredefinedCashe

Відключає таблицю зумовлених дескрипторів системного реєстру в ключі HKCU для поточного процесу

RegEnumKeyEx

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

RegEnumValue

Перераховує всі значення даного ключа

RegFlushKey

Відразу ж записує всі зміни, зроблені в системному реєстрі

RegLoadKey

Завантажує розділ в кореневій ключ, що знаходиться на вершині ієрархії

RegNotifyChangeKeyValue

Вказує на момент зміни ключа або значення в системному реєстрі

RegOpenCurrentUser

Відкриває ключ HKCU для користувача поточної потоку

RegOpenKeyEx

Відкриває існуючий ключ системного реєстру з розширенням Win32

RegOverridePredefKey

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

RegQueryInfoKey

Повертає інформацію про ключ

RegQueryMultipleValues

Вибирає тип і дані для списку імен значень

RegQueryValueEx

Повертає значення (з розширеними типами даних Win32)

RegReplaceKey

Замінює ключ вмістом файла при перезапуску системи

RegRestoreKey

Зчитує вміст розділу раніше збережений ключ

RegSaveKey

Зберігає значення і підключи даного ключа у файлі вулика

RegSetValueEx

Присвоює ключу значення (з новими типами даних)

RegUnLoadKey

Видаляє розділ з системного реєстру

1. Створення та відкриття ключів

Для того щоб працювати з даними реєстру, програма має спочатку створити власний ключ або відкрити ключ, створений раніше. Для створення ключа додатку необхідно викликати функцію RegCreateKeyEx (), яка описана у файлі winreg.h так:

LONG RegCreateKeyEx (HKEY hKey, LPCSTR lpSubKey, DWORD Reserved, LPSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition)

Параметри:

hKey - Хендлі ключа, під яким передбачається створити новий з'єднання.

lpSubKey - покажчик на рядок, що завершується нульовим символом в кінці і містить ім'я нового ключа.

Reserved - резерв.

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

dwOptions - спеціальні опції для зберігання даних, пов'язаних з ключем. Задаються ідентифікатором з префіксом REG _ OPTION _.

samDesired - доступ до ключа з необхідним рівнем захисту.

lpSecurityAttributes - атрибути захисту ключа.

phkResult - покажчик на змінну HKEY, якій присвоюється Хендлі нового ключа.

lpdwDisposition - покажчик на змінну типу DWORD, якій присвоюється значення стану підключа (був створений або відкритий).

Значення, що повертається: якщо ключ створений або відкритий вдало, то значення ERROR _ SUCCESS. Будь-яке інше значення є свідченням того, що при створенні або відкритті ключа зустрілася помилка.

Перший аргумент - hKey-Хендлі раніше відкритого ключа або одне з наступних значень:

HKEY_CLASSES_ROOT;

HKEY_CURRENT_USER;

HKEY_LOCAL_MACHINE;

HKEY_USERS;

HKEY_DYN_DATA (Win 9x) або HKEY_PERFORMANCE_DATA (Win NT/2000)

При інсталяції Windows створює п'ять ключів. Їх імена збігаються зі значеннями, наведеними вище. Іншими словами, ці ключі є основою для створення ієрархії ключів.

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

Ключі, що знаходяться за ієрархією нижче HKEY_CLASSES_ROOT, визначають типи (або класи) файлів і властивості, асоційовані з цими класами. Властивості класів визначаються тільки програмістом. Зазвичай ці властивості застосовуються при роботі додатків, що використовують впровадження та зв'язування об'єктів, а також додатків, що використовують середу Windows (shell applications). Наприклад, при відкритті файлів в Explorer'e використовуються властивості файлів, записані в реєстрі.

Ключі, підлеглі HKEY_USERS, визначають конфігурацію за замовчуванням при підключенні нового користувача на локальній машині і конфігурацію поточного користувача.

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

Повертаючись до аргументів функції RegCreateKeyEx (), можна сказати, що перед створенням нового ключа необхідно продумати, в яку гілку дерева необхідно включити новий ключ. Якщо новий ключ необхідно створити підлеглим ключу більш низького рівня, то певним чином можна пройти по дереву і знайти той ключ, який необхідний. Крім цього, ключ, Хендлі якого вказаний у першому аргументі, повинен бути відкритий з атрибутом доступу KEY_CREATE_SUB_KEY.

Другим аргументом - l pSubKey - є покажчик на рядок, що містить ім'я створюваного ключа. Створюваний ключ буде підлеглим ключа, Хендлі якого вказаний у першому аргументі.

Третій аргумент - Reserved-зарезервований і повинен бути рівним нулю.

Четвертий аргумент - l pClass - покажчик на рядок, що визначає клас створюваного ключа.

Черговий, п'ятий аргумент - dwOptions, визначає опції створюваного ключа. Цей аргумент може приймати одне із значень:

  • REG_OPTION_VOLATILE

  • REG_OPTION_NON_VOLATILE.

    У Windows 9 x перше значення не використовується.

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

    Наступний, шостий аргумент - samDesired, визначає маску доступу до ключа. Цей параметр є бітову шкалу і може бути комбінацією прапорів, наведених у табл.2.

    Таблиця 2 Прапори, складові маску доступу до ключа

    Прапор

    Опис

    KEY_QUERY_VALUE

    Права запитувати дані підключений

    KEY_SET_VALUE

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

    KEY_CREATE_SUB _KEY

    Права створювати підключи

    KEY_ENUMERATE_SUB_ KEY

    Права перебирати підключи

    KEY _ NOTIFY

    Права змінювати нотифікацію

    KEY_CREATE LINK

    Права створювати символічний зв'язок

    KEY_READ

    (STANDARD RIGHTS READ) KEY_QUERY_VALUE | KEY_ENUMERATE SUB_KEYS | KEY_NOTIFY

    KEY_WRITE

    (STANDARD RIGHTS WRITE) KEY_SET_VALUE | KEY_CREATE_SUB_KEY

    KEY_EXECUTE

    KEY_READ

    KEY_ALL_ACCESS

    (STANDARD RIGHTS ALL) KEY_QUERY VALUE | KEY_SET_VALUE | KEY_CREATE _SUB_KEY | KEY_ENUMERATE_SUB_KEYS | KEY_CREATE_SUB_KEY | KEY_NOTIFY | KEY _CREATE_LINK

    Сьомий аргумент - l pSecurityAttributes - покажчик на структуру типу SECURITY_ATTRIBUTES, яка визначає атрибути безпеки створюваного ключа. Windows 9х не підтримує безпеку, тому цей параметр ігнорується.

    Туди, куди вказує восьмий аргумент - phkResult - записується Хендлі створеного ключа.

    І нарешті, останній, дев'ятий аргумент - l pdwDisposition - вказує місце, куди буде записана інформація про те, що сталося з ключем. Справа в тому, що якщо за допомогою цієї функції здійснюється спроба створити ключ, який вже існує, то ключ не створюється, а просто відкривається. Тому додатку необхідно знати, що відбулося при створенні ключа.

    Якщо ключ був створений, то в полі, яке визначається l pdwDisposition, записується значення REG_CREATED_NEW_KEY.

    У тому випадку, якщо ключ існував і був відкритий, що записується значення дорівнює REG_OPENED_EXISTING_KEY.

    Це поле може бути використане і для того, щоб дізнатися, не відкрито чи ключ іншою програмою. Відкритий ключ доступний тільки тому додатком, яке створило його. Таким чином, якщо додаток відкриває завідомо існуючий ключ і отримує у відповідь значення REG_CREATED_NEW_KEY, то можна зробити висновок про те, що ключ зайнятий іншою програмою.

    Для ВІДКРИТТЯ підключа системного реєстру з необхідним типом доступу служить функція RegOpenKeyEx (). Ця функція не створює ключ, якщо він не існує. Замість цього вона повертає код помилки.

    LONG RegOpenKeyEx (HKEY hKey, LPCSTR lpSubKey, DWORD Reserved, REGSAM samDesired, PHKEY phkResult)

    Параметри:

    hKey - Хендлі відкривається ключа.

    lpSubKey - покажчик на рядок, що завершується нульовим символом в кінці і містить ім'я нового ключа.

    Reserved - резерв.

    samDesired - доступ до ключа з необхідним рівнем захисту.

    phkResult - покажчик на змінну HKEY, якій присвоюється Хендлі нового ключа.

    Значення, що повертається: якщо ключ створений або відкритий вдало, то значення ERROR _ SUCCESS. Будь-яке інше значення є помилкою.

    2. Закриття ключів і збереження вироблених в них змін

    Закривається ключ за допомогою функції RegCloseKey (). При цьому звільняються будь-які пов'язані з даним ключем системні ресурси. Закриття ключа аж ніяк не викликає затримку операцій запису, що відбуваються безпосередньо після виконання даної функції. Синтаксис функції наступний:

    LONG RegCloseKey (HKEY hKey)

    Параметри:

    hKey - Хендлі закривається ключа.

    Значення, що повертається: якщо ключ створений або відкритий вдало, то значення ERROR _ SUCCESS. Будь-яке інше значення є помилкою.

    Проблема. Справа в тому, що дані з реєстру на час роботи з ними переписуються в кеш і записуються назад на диск при виконанні функції RegFlushKey (). Щоб дані, змінені під час роботи програми, не були втрачені, то перед закриттям ключа слід їх скидати на диск. З іншого боку, у програміста може з'явитися спокуса скидати дані на диск досить часто. Так як RegFlushKey () використовує величезну кількість системних ресурсів, то цю функцію потрібно викликати тільки в тому випадку, коли дійсно в цьому є необхідність. Синтаксис функції наступний:

    LONG RegFlushKey (HKEY hKey)

    Параметри:

    hKey - Хендлі ключа, вміст якого має бути скинуто на диск.

    Значення, що повертається: якщо ключ створений або відкритий вдало, то значення ERROR _ SUCCESS. Будь-яке інше значення є помилкою.

    3. Додавання даних до ключів та видалення даних з ключів

    Після того, як ключ створений, виникає необхідність додати до ключа деякі дані, які будуть використовуватися програмою. Для цього потрібно викликати функцію RegSetValueEx (). Ця функція встановлює іменнованное значення будь-якого підключа системного реєстру. У даного підключа може бути безліч іменованих значень. Синтаксис функції наступний:

    LONG RegSetValueEx (HKEY hKey, LPCSTR lpszValueName, DWORD dwReserved, DWORD dwDataType, CONST BYTE * lpData, DWORD dwByte)

    Параметри:

    hKey - Хендлі ключа, до якого додаються дані.

    lpszValueName - покажчик на рядок, що завершується нульовим символом в кінці і містить ім'я рядка додаються даних.

    Reserved - резерв.

    dwDataType - тип даних, що зберігається, який задається ідентифікатором (табл.4).

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

    dwByte - довжина зберігається рядки даних за винятком завершального рядок нульового символу.

    Значення, що повертається: якщо ключ створений або відкритий вдало, то значення ERROR _ SUCCESS. Будь-яке інше значення є помилкою.

    Перший аргумент - Хендлі ключа, до якого додаються дані.

    Другий аргумент - покажчик на рядок, що містить ім'я додаються даних.

    Третій аргумент зарезервований.

    Четвертий аргумент визначає тип інформації, який буде збережений в якості даних.

    П'ятий аргумент є покажчиком безпосередньо на дані, які будуть збережені.

    Шостий аргумент визначає розмір даних, на які вказує п'ятого аргумент. Все легко і просто, чи не так?

    Розрізняють два типи видалення:

    - Видалення підключа з реєстру;

    - Видалення значень ключа реєстру.

    Видалити з'єднання з реєстру можна за допомогою функції RegDeleteKey (). У windows NT / 2000 ця функція не буде видаляти підключи і не зможе бути виконана при наявності підключений.

    У Windows 9 x підключи з її допомогою віддаляються. Синтаксис функції наступний:

    LONG RegDeleteKey (HKEY hKey, LPCSTR lpszSubKey)

    Параметри:

    hKey - Хендлі відкритого ключа.

    lpszSubKey - покажчик на рядок, що завершується нульовим символом в кінці і містить ім'я видаляється підключа.

    Значення, що повертається: якщо ключ створений або відкритий вдало, то значення ERROR _ SUCCESS. Будь-яке інше значення є помилкою.

    Видалити дані можна за допомогою звернення до функції RegDeleteValue (). Її синтаксис наступний:

    LONG RegDeleteValue (HKEY hKey, LPCSTR lpszValueName)

    Параметри:

    hKey - Хендлі відкритого ключа.

    lpszValueName - покажчик на рядок, що завершується нульовим символом в кінці і містить ім'я видаляється значення.

    Значення, що повертається: якщо ключ створений або відкритий вдало, то значення ERROR _ SUCCESS. Будь-яке інше значення є помилкою.

    4. Вибірка даних з реєстру

    Якщо прикладної програмі потрібно здійснити вибірку даних з реєстру, то для початку програма повинна визначити, з якої гілки дерева реєстру їй потрібно вибрати дані. Природно, що ніяких функцій для цього немає. При написанні програми програміст повинен сам подбати про це.

    Після того як рішення прийняте, починається другий етап. Програма повинна перебирати всі ключі в цій галузі до тих пір, поки не знайде потрібний ключ. Для цього додаток може скористатися функцією RegEnumKeyEx (). Ця функція при кожному виклику вибирає інформацію про одному ключі. Для перерахування підключений в додатку слід спочатку викликати функцію RegEnumKeyEx () з встановленим значенням 0 параметра dwIndex і викликати цю функцію до тих пір, поки не буде повернуто значення ERROR _ NO _ MORE _ ITEMS. Синтаксис функції наступний:

    LONG RegEnumKeyEx (HKEY hKey, DWORD dwIndex, LPSTR lpName, LPDWORD lpReserved, LPSTR lpClass, LPDWORD lpcbClass, PFILETIME pftLastChanged)

    Параметри:

    hKey - Хендлі ключа, підключи якого підлягають перерахунку.

    dwIndex-індекс підключа для доступу до нього.

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

    lpcbName - розмір буфера lpName.

    lpReserved - резерв.

    lpClass - покажчик на буфер, в який надходить ім'я класу підключа.

    lpcbClass - розмір буфера lpcbName

    lpftLastWriteTime - покажчик на змінну типу FILETIME, якій присвоюється дата і час останньої операції запису в даний з'єднання. Структура FILETIME містить 64-розрядне значення, яке являє собою число тактів через кожні 100 нс, починаючи з 1 січня 1601

    Значення, що повертається: якщо ключ створений або відкритий вдало, то значення ERROR _ SUCCESS. Будь-яке інше значення є свідченням того, що при створенні або відкритті ключа зустрілася помилка.

    Якщо повертається значення ERROR _ NO _ MORE _ ITEMS, то це означає, що підключений у даного ключа більше немає.

    Функція перебору об'єктів нам зустрічається вперше. Давайте спочатку розглянемо аргументи цієї функції, а потім поговоримо про те, що відбувається при переборі ключів.

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

    Другий аргумент - dw I ndex - є індексом необхідного підключа.

    Третій аргумент - l pName - вказує на буфер, в який буде записано ім'я ключа.

    Четвертий аргумент - l pcbName - визначає розмір цього буфера в байтах.

    П'ятий аргумент, як випливає з його назви - l pReserved - зарезервований для використання в майбутньому і повинен бути рівним NULL.

    Шостий аргумент - l pClass - повинен вказувати на буфер, в якому після завершення роботи функції буде містити ім'я класу підключа. Якщо це ім'я програмі не потрібно, то цей аргумент повинен бути рівним NULL.

    Розмір цього буфера визначається сьомим аргументом - l pcbClass.

    Восьмий аргумент - l pftLastWriteTime - після завершення роботи функції містить час останнього оновлення даного підключа.

    Для того щоб перебрати підключи, додаток повинен спочатку викликати функцію RegEnumKeyEx () з другим аргументом (dw I ndex), рівним нулю (пошук починається з початку дерева). Якщо шуканий ключ знайдений з першої спроби, то додатком пощастило. В іншому випадку необхідно dw I ndex збільшити на одиницю і знову звернутися до функції. Так необхідно робити до тих пір, поки не буде знайдений шуканий ключ або функція не поверне значення ERROR_NO_MORE_ITEMS. Природно, що пошук можна проводити і в зворотному порядку. Для того, щоб пошук міг бути нормально здійснено, ключ, Хендлі якого зазначений першим аргументом, повинен бути відкритий з правом доступу KEY_ENUMERATE_SUB_KEYS.

    Отримати повну інформацію про підключення можна за допомогою функції RegQueryInfoKey (), аргументи якої в лекції розглядати не будемо. Припустимо потрібний нам з'єднання знайдений. Тоді в цьому підключення необхідно знайти потрібні дані. Спосіб пошуку точно такий же, як і в попередній функції. Для пошуку необхідно перебрати всі дані, пов'язані з підключимо. Щоб здійснити цей перебір, звичайно використовується функція RegEnumValue (), опис якої, наведене нижче, можна знайти у файлі winreg.h:

    LONG RegEnumValue (HKEY hKey, DWORD dwIndex, LPSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)

    Параметри:

    hKey - Хендлі ключа, значення якого підлягають перерахунку.

    dwIndex-індекс перечисляемого значення.

    lpValueName - покажчик на буфер, в який надходить ім'я перечисляемого значення.

    lpcbValueName - розмір буфера lpValueName.

    lpReserved - резерв.

    lpType - покажчик на значення типу DWORD, яке приймає тип даних, притаманні переліком значень.

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

    lpcbData - покажчик на змінну, яка містить число байт в буфері lpData.

    Значення, що повертається: якщо ключ створений або відкритий вдало, то значення ERROR _ SUCCESS. Будь-яке інше значення є свідченням того, що при створенні або відкритті ключа зустрілася помилка.

    Якщо повертається значення ERROR _ NO _ MORE _ VALUES, то це означає, що підключений у даного ключа більше немає.

    Порядок використання цієї функції повністю збігається з порядком використання функції RegEnumKeyEx (), тому буду на ньому зупинятися. Опишу тільки аргументи цієї функції.

    Зрозуміло, що hKey - це Хендлі ключа, якому належить з'єднання, індекс якого представлений другим аргументом - dwlndex.

    Наступний аргумент - покажчик на буфер, в який буде записано ім'я підключа. L pcbValueName визначає розмір цього буфера. Аргумент l pReserved зарезервований і повинен бути рівним NULL. Останні три аргументи визначають клас підключа, покажчик на буфер, в який будуть записані ці дані і розмір буфера. Після повернення функції передостанній аргумент містить число записаних даних.

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

    Додати в блог або на сайт

    Цей текст може містити помилки.

    Програмування, комп'ютери, інформатика і кібернетика | Реферат
    57кб. | скачати


    Схожі роботи:
    Робота з гарячими клавішами в ОС Windows Призначення гарячих клавіш в ОС WINDOWS -функції
    Панель керування в ОС Windows Панель управління пристороями Пк у середовищі Windows
    Драйвер клавіатури реалізує функції музичного синтезатора на клавіатурі для Windows NT 5
    Маніпуляції з реєстром акціонерів
    Управління латками в ОС Windows
    Реалізація системи управління реального часу в ОС Windows
    Управління файлами за допомогою файлового менеджера Windows Commander
    Пошук даних в ОС Windows Основні прийоми роботи із пошуком в ОС WINDOWS
    Операційні системи WINDOWS NT NetWare UNIX Оперцiйна система Windows NT
    © Усі права захищені
    написати до нас