Хранение системной информации

Страницы работы

Содержание работы

Лекция 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

);

Похожие материалы

Информация о работе