Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodychka-lab_OS.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.35 Mб
Скачать

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

Як вже було сказано, ключі (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 нульовий.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]