Створення підключа у відкритому ключі реєстру

 

Для створення підключа викликається функція RegCreateKeyEx.

Приклад виклику функції RegCreateKeyEx – Програма Б

Б1..386

Б2..model flat, stdcall

Б3. include c:\masm32\include\windows.inc

Б4. include c:\masm32\include\kernel32.inc

Б5. include c:\masm32\include\advapi32.inc; Необхідна для роботи з реєстром

Б6. include c:\masm32\include\user32.inc

Б7. include c:\masm32\include\masm32.inc

Б8. includelib c:\masm32\lib\kernel32.lib

Б9. includelib c:\masm32\lib\user32.lib

Б10. includelib c:\masm32\lib\masm32.lib

Б11. includelib c:\masm32\lib\advapi32.lib; Необхідна для роботи з реєстром

Б12..data

Б13. subkey db "Software\NewCompany”,0; Назва для ключа,який створиться

Б14. hkey dd?                   ; Дескриптор новоствореного ключа

Б15..code

Б16. start:

Б17. invoke RegCreateKeyEx, \     ; Функція створення нового ключа в реєстрі

Б17.1. HKEY_CURRENT_USER, \  ; Точка в реєстрі в якій створюватиметься ключ

Б17.2. addr subkey, \  ; Назва ключа, який створюється (Б13)

Б17.3. 0, \                  ; Завжди рівне 0

Б17.4. 0, \                  ; Клас створеного ключа, 0 – по замовчуванню

Б17.5. REG_OPTION_NON_VOLATILE, \; Опція визначає, що ключ постійно

                                   ; зберігається в реєстрі

Б17.6. KEY_WRITE, \        ; Режим доступу до нового ключа

Б17.7. 0, \                  ; Дескриптор не переходить по спадковості

Б17.8. addr hkey, \          ; Посилання на змінну, яка отрим. дескриптор                                 ; створеного ключа (Б14)

Б17.9. 0                     ; Не отримувати дані про результат створення

Б18. invoke ExitProcess,0

Б19. end start

В програмі Б створюється новий підключ в гілці реєстру “HKEY_CURRENT_USER\Software” з назвою NewCompany. Опишемо детальніше аргументи функції RegCreateKeyEx (Б17.1-Б17.9):

Б17.1 визначає точку в реєстрі в якій створюється новий ключ, за можливими варіантами точок, див. вище опис А17.1.

Б17.2 вказує на стрічку Б13, яка містить назву нового ключа.

Б17.3 зарезервовано OC Windows, мусить бути нульовим.

Б17.4 може вказувати на стрічку, яка визначає клас (тип об’єкта) нового ключа або просто 0 для звичайного класу.

Б17.5 визначає властивості збереження ключа (постійний, тимчасовий і т.п.). Цей параметр може приймати одне з наступних значень:

Значення Опис
REG_OPTION_NON_VOLATILE Створюваний ключ є постійним; цей параметр є по замовчуванню. Інформація асоційована з ключем зберігається в файлі і залишається після перезавантаження комп’ютера. Функція RegSaveKey зберігає постійні ключі.
REG_OPTION_VOLATILE Для Windows NT: створюваний ключ є тимчасовим; інформація, асоційована з ним зберігається в оперативній пам’яті і не залишається після перезавантаження комп’ютера. Функція RegSaveKey не зберігає тимчасові ключі. Цей параметр ігнорується коли ключ вже існує. Windows 9х: це значення ігнорується в Windows 9х. Коли вказати його, то функція RegCreateKeyEx створює постійний ключ і повертає ERROR_SUCCESS.
REG_OPTION_BACKUP_RESTORE Windows NT: коли встановлене це значення, функція ігнорує параметр Б17.6 і робить спробу відкрити ключ в режимі необхідному для резервування або відновлення ключа. Коли потік, який викликає функцію RegCreateKeyEx має включені привілеї SE_BACKUP_NAME, ключ буде відкритий з правами доступу ACCESS_SYSTEM_SECURITY і KEY_READ. Якщо викликаючий потік має включені привілеї SE_RESTORE_NAME, ключ відкривається з правами доступу ACCESS_SYSTEM_SECURITY та KEY_WRITE. Коли обидва привілеї існують, ключ відкривається з всіма переліченими правами доступу. Windows 9х: це значення ігнорується, оскільки Windows 9х не має захисту на доступ до реєстру.

Б17.6 визначає права доступу до новоствореного ключа; для повного списку можливих значень див. опис аргументу А17.4.

Б17.7 – вказівник на структуру SECURITY_ATTRIBUTES, яка визначає, чи повернутий дескриптор ключа буде передаватися породженим процесам, чи ні. Коли цей параметр рівний нулю (як в програмі Б), дескриптор не буде передаватися.

Б17.8 вказує на змінну Б14, в яку запишеться дескриптор створеного ключа.

Б17.9 – якщо не нуль, то вказує на змінну, яка прийматиме одне з перелічених нижче значень:

Значення Опис
REG_CREATED_NEW_KEY Ключ не існував і був створений.
REG_OPENED_EXISTING_KEY Ключ вже існував і був лише відкритий.

Коли задати функції RegCreateKeyEx створення вже існуючого ключа, то вона його просто відкриє, як RegOpenKeyEx (програма А).

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: