Закриття ключів та збереження внесених у них змін, Додавання даних до ключів та видалення

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

LONG RegCloseKey (HKEY hKey)

hKey - хендл ключа, що закривається.

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

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

LONG RegFlushKey (HKEY hKey)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

LONG RegDeleteKey (HKEY hKey, LPCSTR lpszSubKey)

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

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

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

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

LONG RegDeleteValue (HKEY hKey, LPCSTR lpszValueName)

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

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

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