Для роботи з реєстром необхідно отримати дескриптор ключа. Отримати дескриптор можна двома способами: створити або відкрити ключ. Для того, щоб відкрити ключ викликається Win32 API функція RegOpenKeyEx.
Приклад виклику функції RegOpenKeyEx – Програма A
A1..386
A2..model flat, stdcall
A3.include c:\masm32\include\windows.inc
A4.include c:\masm32\include\kernel32.inc
A5.include c:\masm32\include\advapi32.inc; необхідна для роботи з реєстром
A6.include c:\masm32\include\user32.inc
A7.include c:\masm32\include\masm32.inc
A8.includelib c:\masm32\lib\kernel32.lib
A9.includelib c:\masm32\lib\user32.lib
A10. includelib c:\masm32\lib\masm32.lib
A11. includelib c:\masm32\lib\advapi32.lib; необхідна для роботи з реєстром
A12..data
A13. Subkey db "Control Panel\Desktop",0; Назва ключа, який відкривається
A14. hkey dd? ; Змінна,яка отримає дескриптор ключа
A15..code
A16. start:
A17. invoke RegOpenKeyEx, \ ; Функція відкриття ключа реєстра
A17.1. HKEY_CURRENT_USER, \ ; Точка в реєстрі з якої відкривається ключ
A17.2. addr Subkey, \ ; Див. А13
A17.3. 0, \ ; Завжди рівне нулю
A17.4. KEY_EXECUTE, \ ; Режим доступу до відкритого ключа
|
|
A17.5. addr hkey ; Посилання на змінну в А14
A18. invoke RegCloseKey, hkey; Закриття дескриптора ключа
A19. invoke ExitProcess,0 ; Вихід з програми
A20. end start
В програмі А після виклику функції RegOpenKeyEx в А17 отримується дескриптор для ключа з назвою “Control Panel\Desktop\”. Назву ключа оголошено в А13. Дескриптор потрапляє в змінну А14. Опишемо детальніше аргументи для функції RegOpenKeyEx, які містяться в стрічках А17.1-А17.5:
А17.1 являється дескриптором вже відкритого ключа; можна використати такі стандартні відкриті ключі:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
А17.2 містить посилання на назву ключа, який відкривається (А13).
А17.3 зарезервовано OC Windows, мусить бути нульовим.
А17.4 вказує режим доступу до відкритого ключа. Цей параметр може приймати наступні значення:
Значення | Опис |
KEY_ALL_ACCESS | Комбінація з KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK та KEY_SET_VALUE прав доступу. |
KEY_CREATE_LINK | Дозвіл на створення символьного посилання. |
KEY_CREATE_SUB_KEY | Дозвіл на створення підключів. |
KEY_ENUMERATE_SUB_KEYS | Дозвіл на перегляд підключів. |
KEY_EXECUTE | Дозвіл на читання інформації. |
KEY_NOTIFY | Дозвіл на отримання сповіщень про зміни. |
KEY_QUERY_VALUE | Дозвіл на читання інформації, яка міститься в підключах. |
KEY_READ | Комбінація прав доступу KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS і KEY_NOTIFY. |
KEY_SET_VALUE | Дозвіл на зміну інформації в підключах. |
KEY_WRITE | Комбінація прав доступу KEY_SET_VALUE та KEY_CREATE_SUB_KEY. |
А17.5 – посилання (addr) на змінну оголошену в А14; ця змінна й отримає дескриптор відкритого ключа.
Коли робота з ключем завершена викликається функція закриття дескриптора RegCloseKey (А18).