Отримання інформації з ключа реєстру

Як вже було сказано, ключі (keys) подібні до папок, а значення (values) подібні до файлів. Тому кожен ключ може містити багато підключів і значень, так як і папки можуть містити багато підпапок і файлів. Ключі, як і папки потрібні тільки для групування файлів-значень. Інформація ж міститься в файлах та значеннях.

Для отримання інформації, яка знаходиться в одному із значень використовується функція RegQueryValueEx.

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

.386

.model flat, stdcall

include c:\masm32\include\windows.inc

include c:\masm32\include\kernel32.inc

include c:\masm32\include\advapi32.inc

include c:\masm32\include\user32.inc

include c:\masm32\include\masm32.inc

includelib c:\masm32\lib\kernel32.lib

includelib c:\masm32\lib\user32.lib

includelib c:\masm32\lib\masm32.lib

includelib c:\masm32\lib\advapi32.lib

.data

Subkey db "Control Panel\International",0; Назва ключа, який містить значення

hkey dd?                       ; Змінна, яка отримає дескриптор ключа

val_n db "sCurrency",0       ; Назва значення в ключі реєстру з якого

; отримується інформація

val db 255 dup (0)         ; Буфер для збереження інформації із

; значення

val_l dd 255                       ; Довжина інформації в буфері

.code

start:

invoke RegOpenKeyEx, \ ; Відкриття ключа, див. Програму А

HKEY_CURRENT_USER, \   ; Точка входу в реєстр      

addr Subkey, \         ; Див. В13

0, \

KEY_EXECUTE, \         ; Доступ до відкритого ключа

addr hkey          ;

invoke RegQueryValueEx, \; функція отримання інформації із
                  ; значення реєстру

hkey, \           ; Дескриптор ключа в якому міститься значення

addr val_n, \     ; Вказівник на стрічку В15 з назвою значення

0, \              ; Завжди нуль

0, \              ; Тип значення нас не цікавить

addr val, \       ; Вказує на стрічку В16,яка отримає інформацію

addr val_l        ; Вказує на змінну В17, в яку запишиться
        ; розмір отриманої в В16 інформації

invoke MessageBox,0, addr val, addr val_n, 0; виводить отриману інформацію

invoke ExitProcess,0

end start

 

Програма В виводить на екран інформацію, яка міститься в значенні з назвою sCurrency, яке знаходиться в ключі реєстру “HKEY_CURRENT_USER\Control Panel\International”. Опишемо деякі аргументи функції RegQueryValueEx:

В21.4 може вказувати на змінну типу dd (DWORD), яка отримуватиме тип даного значення. Цей параметр може бути рівний нулю, коли тип отримувати не потрібно. В іншому випадку одержаний тип може приймати одне з перелічених значень:

Значення Опис
REG_BINARY Двійкові дані будь-якого формату
REG_DWORD 32-розрядне число
REG_DWORD_LITTLE_ENDIAN 32-розрядне число в форматі little-endian (аналог REG_DWORD). В цьому форматі перший байт слова є старшим байтом. Цей формат є найчастіше вживаним на комп'ютерах з ОС Windows NT та Windows 95.
REG_DWORD_BIG_ENDIAN 32-розрядне число у форматі big-endian. В цьому форматі останній байт слова є найстаршим.
REG_EXPAND_SZ Стрічка символів з нулем на кінці, яка містить посилання на змінні середовища (наприклад "%PATH%"). Ця стрічка може представлятися в Unicode або ANSI, залежно від функцій, які ви до неї застосуєте.
REG_LINK Символьне посилання в форматі Unicode.
REG_MULTI_SZ Масив стрічок, який завершується двома символами з нульовим кодом.
REG_NONE Невизначений тип значення
REG_RESOURCE_LIST Список ресурсів для пристрою або драйвера.
REG_SZ Стрічка символів з нулем на кінці. Ця стрічка може представлятися в Unicode або ANSI, залежно від функцій, які ви до неї застосуєте.

 

В21.5 вказує на буфер В16, який отримає інформацію із значення. Цей параметр може бути рівний нулю, коли дані не потрібні.

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

Коли буфер має недостатній для отримання інформації розмір, функція повертає в ЕАХ значення ERROR_MORE_DATA, і записує в змінну на яку вказує В21.6 кількість байт, які необхідні для отримання інформації.

Коли задати В21.5 рівним нулю, а В21.6 вказуватиме на змінну, то функція повертає ERROR_SUCCESS в ЕАХ, і зберігає в цю змінну кількість байт, які необхідні для отримання інформації. Така поведінка функції дозволяє одразу визначити кількість байт, які треба виділити в пам'яті для повного отримання інформації.

В21.6 може бути нульовим лише тоді коли В21.5 нульовий.




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



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