Лекция19

advertisement
Лекция 19
ХРАНЕНИЕ СИСТЕМНОЙ ИНФОРМАЦИИ
Системный реестр Windows (registry) – централизованное хранилище системной
информации и конфигураций установленных приложений, реализованное в виде
иерархической базы данных.
Ключи реестра упорядочены в иерархическую систему «ключ-подключ».
Ключи верхнего уровня:
HKEY_CLASSES_ROOT – ссылка на ключ
HKEY_LOCAL_MACHINE\SOFTWARE\Classes, содержит определения типов документов,
ассоциаций классов и информацию, относящуюся к классам (регистрация COM-объектов).
HKEY_CURRENT_USER – ссылка на часть реестра HKEY_USERS, относящуюся к
текущему пользователю.
HKEY_LOCAL_MACHINE - содержит информацию об аппаратной и программной
конфигурации компьютера (данные этого ключа хранятся в файле system.dat).
HKEY_USERS - содержит информацию о пользователе по умолчанию и текущем
пользователе (файл user.dat).
HKEY_CURRENT_CONFIG - ссылка на информацию о текущей конфигурации
компьютера, находящуюся в ключе HKEY_LOCAL_MACHINE.
HKEY_DYN_DATA – определяет использование механизма plug-and-play для хранения
динамических данных. Только для Windows 95/98/Me!
Работа с реестром
Редактор regedit:
.reg-файлы:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"calc"="C:\\Windows\\System32\\calc.exe"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"NBKeyScan"=-
Функции Win32 API:
#include <windows.h>
int main(int argc, char* argv[])
{
char szBuf[MAX_PATH];
DWORD dwBufLen = MAX_PATH;
HKEY hKey;
// Строка которую будем писать в реестр
char szTestString[] = "This is the test";
// Ключ который будем создавать
char szPath[] = "Software\\RegistrySample\\";
// Создаем ключ в ветке HKEY_CURRENT_USER
if(RegCreateKeyEx(HKEY_CURRENT_USER, szPath, 0, NULL,
REG_OPTION_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS){
printf("Key Create Error\n");
return 1;
}
// Пишем тестовую строку в созданный ключ
if(RegSetValueEx(hKey, "Test string", 0, REG_SZ, (BYTE*)szTestString,
sizeof(szTestString)) != ERROR_SUCCESS){
printf("Key Set Error\n");
return 2;
}
// Закрываем описатель ключа
if(RegCloseKey(hKey) != ERROR_SUCCESS){
printf("Key Close Error\n");
return 3;
}
if(RegGetValue(HKEY_CURRENT_USER, szPath, "Test String", RRF_RT_REG_SZ,
NULL, (BYTE*) szBuf, &dwBufLen) != ERROR_SUCCESS){
printf("Key Get Error\n");
return 4;
}
printf("C-version: %s\n",szBuf);
return 0;
}
LONG RegCreateKeyEx(
HKEY hKey, //дескриптор корневого ключа
LPCTSTR lpSubKey, //подключ
DWORD Reserved, //0
LPTSTR lpClass, //NULL
DWORD dwOptions, //сохраняется ли информация после перезагрузки
REGSAM samDesired, //определяет доступ
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
PHKEY phkResult, //дескриптор созданного (открытого ключа)
LPDWORD lpdwDisposition //был ли ключ создан или уже существовал
);
LONG RegSetValueEx(
HKEY hKey, //дескриптор ключа
LPCTSTR lpValueName, //имя значения ключа
DWORD Reserved, //0
DWORD dwType, //тип данных значения
const BYTE* lpData,
DWORD cbData
);
LONG RegGetValue(
HKEY hkey,
LPCTSTR lpSubKey,
LPCTSTR lpValue,
DWORD dwFlags, //ограничивает тип данных запрашиваемого значения
LPDWORD pdwType, //указатель на переменную с кодом типа данных
PVOID pvData,
LPDWORD pcbData
);
Download