Работа с реестром



Скачать 107.17 Kb.
Дата22.05.2017
Размер107.17 Kb.
Просмотров314
Скачиваний1
ТипПояснительная записка


Министерство образования Республики Беларусь
Учреждение образования

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Факультет информационных технологий и управления
Кафедра информационных технологий автоматизированных систем

К защите допустить

______________ В.В. Шаплыко

«____»_______________2015 г.


ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

НА ТЕМУ


РАБОТА С РЕЕСТРОМ

Выполнил ст. гр. 220602 ______________ /

Принял ______________ / Шаплыко В.В. /

МИНСК 2015


СОДЕРЖАНИЕ


Введение 4

1.Анализ предметной области 5

1.1Общие сведения 5

2.Описание реализации 12

2.1Выбор и обоснование средств реализации 12

2.2Обзор доступных инструментальных средств 12

2.3Реализация программы 14

3.Руководство пользователя 15

Заключение 16

Список использованных источников 17

Приложение А
(справочное)
Программный код 19





Введение


Система - это четко упорядоченная, структурированная совокупность двух или нескольких элементов (число их может быть бесконечным). Элементы находятся во взаимосвязи и подчиняются законам, установленным в данной системе. Система может быть составляющей другой, более объемной мощной системы, т.е. представлять собой отдельный элемент.

В данной работе мы будем ссылаться на отдельный, наиболее динамично развивающийся тип системы – информационной.

Информационная система представляет собой любую систему обработки информации. Информационная система в более узком смысле – совокупность аппаратно-программных средств, задействованных для решения некоторой прикладной задачи. Информационные системы предназначены для хранения, обработки, поиска, распространения, передачи и предоставления информации. Для создания и поддержания таких систем, соответственно, требуется отдельный вид деятельности человека – системное программирование.

Системное программирование (или программирование систем) - это вид программирования, который заключается в работе с системным программным обеспечением. Главным отличием системного программирования по сравнению с прикладным программированием является то, что прикладное программное обеспечение предназначено выпускать (создавать и обновлять) программы для пользователей (например, текстовые процессоры), тогда как системное программирование предназначено выпускать программы, обслуживающие аппаратное обеспечение (например, дефрагментация диска ) что обусловливает значительную зависимости такого типа ПО от аппаратной части.

Определение «системное» подчеркивает тот факт, что результаты этого вида программирования существенно меняют свойства и возможности вычислительной системы. В то же время бесспорным остаётся тот факт, что в определенной степени этот результат имеет место при применении любых программ, выполняемых в вычислительной системе. Подводя итог, можно утверждать, что системным следует называть подраздел программирования как вида инженерной деятельности, в котором программист использует специфические и часто уникальные свойства и возможности внутренних уровней вычислительной системы.

Целью данной работы является изучение функционирования и реализации работы с реестром.


1.Анализ предметной области

1.1Общие сведения


Словарь «Microsoft Computer Dictionary» дает такое определение реестра: «Иерархически построенная, централизованная база данных в составе операционных систем Microsoft Windows 9x/NT/2000/XP/2003/Vista/7/8, содержащая сведения, которые используются операционной системой для работы с пользователями, программными продуктами и устройствами».

В Реестре хранятся данные, которые необходимы для правильного функционирования Windows. К ним относятся профили всех пользователей, сведения об установленном программном обеспечении и типах файлов, которые могут быть созданы каждой программой, информация о свойствах папок и значках приложений, а также установленном оборудовании и используемых портах. Системный Реестр заменяет собой большинство текстовых ini-файлов, которые использовались в Windows 3.x, а также файлы конфигурации MS-DOS (например, Autoexec.bat и Config.sys). Немного углубимся в историю и узнаем, что из себя представляет ini-файл.



ini-файл (англ. Initialization file) — это файл конфигурации, который содержит данные настроек для Microsoft WindowsWindows NT и некоторых приложений.

Появились с самых первых версий Windows. В версии Windows 1.01 это был только файл WIN.INI. В Windows 3.0 добавился файл SYSTEM.INI. А затем их количество начало расти быстро и бесконтрольно.

Не существует подробной официальной спецификации формата. Начиная с Windows 95, INI файлы считаются устаревшими и в качестве замены им Microsoft предлагает использовать системный реестр (Registry). Тем не менее INI файлы продолжают использоваться как приложениями других производителей, так и компонентами ОС от Microsoft. Например, файл boot.ini используется в Windows NT4/2000/XP при загрузке для выбора из нескольких ОС.

Хотя INI файлы и приобрели популярность в Windows, они могут использоваться в любой ОС. Несложная структура этого формата позволяет легко обрабатывать их программно и имеет достаточно понятный вид для чтения и изменения человеком. Ниже предоставлены некоторые из причин отказа от ini-файлов в пользу реестра:



  1. на некоторых платформах размер INI-файла не может превышать 64 Кбайт;

  2. по мере эксплуатации системы количество записей в файлах win.ini и system.ini быстро увеличивается, что приводит к их чрезмерному «засорению» данными. К тому же размер этих файлов зачастую превышает 64 Кбайт;

  3. при обращении к INI-файлу большого размера производительность Windows может существенно снизиться, так как для обнаружения конкретной записи операционная система использует линейный поиск. Таким образом, даже если ваша система поддерживает работу с большими INI-файлами, использование таких файлов не рекомендуется;

  4. организовать защиту INI-файлов или управление этими файлами через сеть достаточно сложно;

  5. в INI-файле можно хранить только текстовую информацию. Хранение данных других типов не поддерживается. Чтобы сохранить числовое значение, вы должны записать его в виде строки, а позже, при чтении, осуществить обратное преобразование.

Во время запуска операционной системы происходит до тысячи обращений к реестру, а во время работы на ПК в течение одного сеанса работы – до 10 тысяч! Отдельные компоненты реестра хранятся в оперативной памяти ПК в течение всего сеанса работы. Запись (считывание) информации в реестр (из реестра) происходит постоянно: например, если мы устанавливаем какую-нибудь программу, вся информация, необходимая для запуска и работы этой программы, записывается в реестр. Если мы устанавливаем новое устройство, в реестре будет отмечено, где находится его драйвер и т.д.



Если же мы запускаем какую-либо программу или устройство, то из реестра считывается вся необходимая для запуска программы (устройства) информация.

Системный реестр Windows – это иерархическая база данных. Информация хранится в ключах. Каждый ключ может содержать несколько подключей. Помимо подключей, каждый ключ может содержать также несколько значений. Такая структура сильно напоминает файловую систему. Можно рассматривать ключи как каталоги, а значения ключей – как файлы. Реестр поддерживался и в ранних версиях Windows, однако до последнего времени большинство программ его не использовало. Традиционно реестр использовался только приложениями OLE, а также старым диспетчером программ (Program Manager). В настоящее время реестр используется многими современными механизмами Windows (такими как, например, новая графическая оболочка и ActiveX).

На рисунке 1.1 представлена рабочее окно редактора реестра входящего в комплект семейства Windows.

Рис.1.1 – Рабочее окно программы Regedit
Куст реестра – это группа разделов, подразделов и параметров реестра с набором вспомогательных файлов, содержащих резервные копии этих данных.

Реестр состоит из 5-ти ветвей:

  1. HKEY_CURRENT_USER (HKCU) – данный раздел является корневым для данных конфигурации пользователя, вошедшего в систему в настоящий момент. Здесь хранятся папки пользователя, цвета экрана и параментры панели управления. Эти сведения сопоставлены с профилем пользователя.

  2. HKEY_USERS (HKU) – данный раздел содержит все активные загруженные профили пользователей компьютера.

  3. HKEY_LOCAL_MACHINE (HKLM) – раздел содержит параметры конфигурации, относящиеся к данному компьютеру (для всех пользователей).

  4. HKEY_CLASSES_ROOT (HKCR) – является подразделом HKEY_LOCAL_MACHINE\Software. Хранящиеся здесь сведения обеспечивают выполнение необходимой программы при открытии файла с использованием проводника.

  5. HKEY_CURRENT_CONFIG (HKCG) – данный раздел содержит сведения о профиле оборудования, используемом локальным компьютером при запуске системы.

Дескриптор ключа (key handle) хранится в переменной типа HKEY. Чтобы получить дескриптор ключа HKEY, необходимо использовать функции RegOpenKeyEx или RegCreateKeyEx (системные вызовы, относящиеся к работе с реестром, перечислены в табл. 1.1). Первый аргумент этих функций имеет тип HKEY. Откуда его взять? К счастью, при вызове любой из этих функций в качестве первого аргумента можно указать константу, например имя одного из корневых ключей реестра (например, HKEY_CLASSES_ROOT).
Таблица 1.1. Некоторые системные вызовы для работы с реестром

Функция

Описание

RegCloseKey

Закрыть открытый ключ реестра

RegConnectRegistry

Подключиться к удаленному реестру

RegCreateKeyEx

Создать новый ключ

RegDeleteKey

Удалить ключ

RegDeleteValue

Удалить значение

RegEnumKeyEx

Перейти к следующему подключу (каждый раз возвращает новый ключ)

RegEnumValue

Перейти к следующему значению (каждый раз возвращает новое

значение)



RegFlushKey

Внести значения ключа в реестр (чтобы убедиться в том, что все

изменения сохранены на диске)



RegLoadKey

Загрузить ключ из специального файла (см. также RegSaveKey)

RegOpenKeyEx

Открыть ключ

RegQuerylnfoKey

Запросить информацию о ключе

RegQueryValueEx

Прочитать значение

RegReplaceKey

Заменить ключ после перезапуска системы

RegSaveKey

Записать ключ в файл

RegSetKeySecurity

Установить разрешения на доступ к ключу

После того как ключ открыт, можно прочитать значение (RegQuery ValueEx), изменить его (RegSetValueEx), удалить ключ (RegDeleteKey) или перебрать подключи этого ключа (RegEnumKeyEx). Вызов RegEnumValue позволяет перебрать все именованные значения данного ключа. После того как работа с ключом завершена, ключ необходимо закрыть при помощи вызова RegCloseKey. В табл. 1.1 упомянуты некоторые другие функции, предназначенные для работы с ключами реестра.

В Windows 2000 для защиты разных элементов реестра используются специальные механизмы безопасности. Каждая программа обладает индивидуальным набором разрешений на доступ к различным ключам. Если программа обладает необходимым уровнем доступа, она не сможет изменить значение ключа или получить доступ к ветви реестра. Работать с реестром можно удаленно, через сеть.

Не следует использовать функцию GetLastError для того, чтобы получить информацию об ошибке, которая произошла в результате обращения к одной из функций работы с реестром. Все эти функции возвращают код ошибки непосредственно. Функция GetLastError поможет узнать об ошибках, которые произошли в результате обращения к другим системным вызовам API ранее в программе.

Реестр способен содержать в себе данные многих экзотических типов (табл. 1.2). Однако на самом деле система никогда не обращает внимания на эти типы данных. Например, переменная типа REG_EXPAND_SZ – это строка, содержащая имена переменных окружения, которые необходимо заменить значениями этих переменных самостоятельно. Реестр не предоставляет доступ к значениям переменных окружения автоматически. Вместо этого надо получить необходимые значения собственными силами, например, при помощи функции ExpandEnvironmentStrings.
Таблица 1.2. Типы данных, хранящихся в реестре

Тип

Описание

REG_BINARY

Бинарные данные в любой форме

REG_DWORD

32-битное число (часто используется для хранения байта, слова или даже бита)

REG_DWORD_LITTLE_ENDIAN

32-битное число в формате аппаратных платформ Intel

REG_DWORD_BIG_ENDIAN

32-битное число в формате аппаратных платформ Motorola

REG_EXPAND_SZ



Строка, завершающаяся нулем, содержащая ссылки на переменные окружения (например: "%РАТН%")

REG_LINK

Символическая ссылка в формате UNICODE

REG_MULTI_SZ

Массив строк, каждая из которых завершается нулем. В конце массива располагаются два нулевых символа

REG_NONE

Неопределенный тип

REG_RESOURCE_LIST

Список ресурсов драйвера устройства

REG_SZ

Строка, завершающаяся нулем

1.2 Постановка задачи

Требуется разработать программу, который будет работать с системным реестром Windows. Программа будет уметь:

Открывать ключ реестра

Отслеживать какие-либо изменения в подразделе реестра

Выводить соответствующее сообщение об изменениях

2.Описание реализации

2.1Выбор и обоснование средств реализации

2.2Обзор доступных инструментальных средств


В настоящее время существует большой выбор средств разработки приложений на платформе операционной системы Windows. Ниже приведен обзорнаиболее популярных средств.

BorlandDelphi

Среда быстрой разработки Delphi – продукт компании Borland, основана на объектно-ориентированном языке программирования Pascal, В среде имеются удобные средства для создания оконных приложений. Также, в Delphi есть стандартные компоненты для работы с базами данных и веб-сервисами.



MicrosoftVisualBasic

VisualBasic от компании Microsoft представляет собой систему быстрой разработки приложений RAD (RapidApplicationDevelopment), похожую на среду Delphi. Скорее всего, это объясняется конкуренцией между компаниями Microsoft и BorlandInternational. Однако, не смотря на схожесть интерфейсов, разница в языках существенна. VisualBasic – объектно-ориентированный язык программирования, как правило встроенный во многие приложения MicrosoftOffice. К достоинствам можно отнести простоту создания не сложных приложений, а также возможность редактирования и создания компонент MicrosoftOffice.



MicrosoftVisual C++

Язык программирования Visual C++ из среды разработки VisualStudio компании Microsoft наиболее мощное средство разработки системных программ. Однако, разработка программ на этом языке - трудоемкий и сложный процесс.



Java

В языке Java используется технология объектно-ориентированного программирования, которая позволяет сократить общее время разработки и писать повторно используемый код. Java-приложения являются независимыми от платформы. Это достигается путем совмещения в языке свойств компилятора и интерпретатора. Платформонезависимость байт-кода обеспечивается наличием виртуальных java-машин для всех основных платформ. В комплект поставки Java входят стандартные классы, которые обладают достаточной функциональностью для быстрой разработки приложений. Развитые средства безопасности позволяют использовать Java для разработки

приложений, работающих в Интернете. Единственным недостатком Java является медленная скорость работы, обусловленная использованием ЛТ-компиляторов – цена кроссплатформенности.

Borland C++ Builder

Визуальная среда разработки Borland C++ Builder объединяет мощь индустриального стандарта C++ и компонентно-ориентированный подход к разработке программных систем, 6-я версия C++ Builder обладает развитыми средствами для разработки интернет-ориентированных бизнес* приложений и всеми необходимыми технологиями разработки интегрированных решений на платформе Windows. Средства поддержки Windows 2000/XP позволяют визуально создавать серверные и клиентские приложения с использованием всех возможностей СОМ+.

Руководствуясь техническим заданием к программно-инструментальному комплексу, среда разработки приложений Borland C++ Builder было выбрана по следующим причинам:

В этой среде сочетается гибкость и мощь языка C++ и средства для быстрого построения многофункционального интерфейса;

В последней шестой версии C++ Builder предлагаются специализированные компоненты, облегчающие создание приложений работающих с Интернетом;

Данная среда является одним из самых популярных средств быстрой разработки приложений во всем мире. Компания Borland регулярно выпускает новые версии данной среды и предполагает ее дальнейшую поддержку.

Требования к аппаратной конфигурации ПК: компьютер на базе Intel (не младше Pentium, рекомендуется IntelPentiumШ 500 MHz); S мегабайт оперативной памяти (рекомендуется 32), около 2-3 мегабайт свободного пространства на жестком диске; модем или сетевая карта для выхода в сеть Интернет. Требования к программному обеспечению ОС MicrosoftWindows 95/98/ME/20QOttP: Microsoft Data Access Component (MDAC) версии 2.5 и выше. Дополнительно требуется подключение ПК к сети Интернет через модемное или выделенное соединение. Возможно взаимодействие с Интернет через прокси-сервер.

Для разработки приложения использовалась среда разработки C++ Builder 6, т. к. она позволяет быстро решить поставленную задачу без использования дополнительных инструментов[2].


2.3Реализация программы

3.Руководство пользователя

Заключение




Список использованных источников


[1] Ревотюк М.П. [Электронный ресурс]. – «Электронный учебно-методический комплекс по дисциплине СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ».

[2] MicrosoftDeveloperNetwork[Электронныйресурс].– Режим доступа: http://msdn.microsoft.com/ru-ru/.

[3] Википедия [Электронный ресурс]. – Режим доступа: http://ru.wikipedia.org/.





Приложение А
(справочное)
Программный код


Листинг программы

Win32Project2.cpp

#include "stdafx.h"

#include "Win32Project2.h"
#define MAX_LOADSTRING 100
HINSTANCE hInst; TCHAR szTitle[MAX_LOADSTRING]; TCHAR szWindowClass[MAX_LOADSTRING];

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,

_In_opt_ HINSTANCE hPrevInstance,

_In_ LPTSTR lpCmdLine,

_In_ int nCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);



UNREFERENCED_PARAMETER(lpCmdLine);
MSG msg;

HACCEL hAccelTable;


LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_WIN32PROJECT2, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;



}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT2));

while (GetMessage(&msg, NULL, 0, 0))

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))



{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}



Продолжение приложения А
return (int) msg.wParam;

}
ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;


wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT2));

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32PROJECT2);

wcex.lpszClassName = szWindowClass;

wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex);

}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;


hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

HWND hWnd_button = CreateWindow(TEXT("button"), TEXT("Начать"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

10, 50, 80, 30, hWnd, (HMENU)100, hInstance, NULL);


if (!hWnd)

{

return FALSE;



}
ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);


return TRUE;

}
Продолжение приложения А


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

int wmId, wmEvent;



PAINTSTRUCT ps;

HDC hdc;

DWORD dwFilter = REG_NOTIFY_CHANGE_NAME |

REG_NOTIFY_CHANGE_ATTRIBUTES |

REG_NOTIFY_CHANGE_LAST_SET |

REG_NOTIFY_CHANGE_SECURITY;


HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

HKEY hMainKey = HKEY_CURRENT_USER;

HKEY hKey;

LONG lErrorCode;


switch (message)

{

case WM_COMMAND:



wmId = LOWORD(wParam);

wmEvent = HIWORD(wParam);

switch (wmId)

{

case 100:



RegOpenKeyEx(hMainKey, TEXT("Software\\Foxit Software"), 0, KEY_NOTIFY, &hKey);

RegNotifyChangeKeyValue(hKey, TRUE, dwFilter, hEvent, TRUE);

if (WaitForSingleObject(hEvent, INFINITE) == WAIT_FAILED){}

else


MessageBox(hWnd, TEXT("Изменения"), TEXT("Реестр изменен"), MB_OK);

CloseHandle(hEvent);

lErrorCode = RegCloseKey(hKey);
break;
case IDM_ABOUT:

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

break;

case IDM_EXIT:



DestroyWindow(hWnd);

break;


default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

break;


Продолжение приложения А

case WM_CREATE:

SetWindowPos(hWnd, HWND_TOP, 300, 300,300,300, SWP_SHOWWINDOW);
break;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 10, 20, TEXT("Ожидание изменения реестра"), 26);

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:



PostQuitMessage(0);

break;


default:
return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;



}
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

UNREFERENCED_PARAMETER(lParam);



switch (message)

{

case WM_INITDIALOG:



return (INT_PTR)TRUE;
case WM_COMMAND:

if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{

EndDialog(hDlg, LOWORD(wParam));



return (INT_PTR)TRUE;

}

break;



}

return (INT_PTR)FALSE;

}

}
Resource.h


#define IDS_APP_TITLE 103
#define IDR_MAINFRAME 128

#define IDD_WIN32PROJECT2_DIALOG 102

#define IDD_ABOUTBOX 103

#define IDM_ABOUT 104



Продолжение приложения А

#define IDM_EXIT 105

#define IDI_WIN32PROJECT2 107

#define IDI_SMALL 108

#define IDC_WIN32PROJECT2 109

#define IDC_MYICON 2

#ifndef IDC_STATIC

#define IDC_STATIC -1

#endif

#ifdef APSTUDIO_INVOKED



#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 130

#define _APS_NEXT_RESOURCE_VALUE 129

#define _APS_NEXT_COMMAND_VALUE 32771

#define _APS_NEXT_CONTROL_VALUE 1000

#define _APS_NEXT_SYMED_VALUE 110

#endif


#endif



Каталог: sites -> default -> files -> 2016
files -> Семинар «использование квест- технологии в обучении английскому языку»
2016 -> Основные этапы установки ос windows 7
2016 -> Практикум Проект. Цель, задачи и ресурсы проекта. Net framework: назначение, область применения, основные компоненты
2016 -> Рабочая программа по дисциплине Наименование дисциплины Работа в сетях Направление подготовки/специальность
2016 -> Департамент по спорту и молодежной политике тюменской области


Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал