Алгоритм роботи

Метою програми є повне зчитування системного реєстру Windows у базу даних SQLite[8]. Для цього виконується певна послідовність дій. Хід роботи програми можна умовно розбити на три категорії: створення файлу бази даних, зчитування даних, пошук та відображення отриманих даних. Розглянемо кожен із них детальніше.

Створення файлу БД. При першому запуску програми розпочинається створення бази даних SQLite. Усі дії над нею виконуються за допомогою спеціальних команд – SQL-запитів. Спочатку засобами рушія SQLite створюється файл reg.db. Далі за допомогою команди

CREATE TABLE Keys (

root varchar,

name varchar,

type varchar,

value varchar)

у базі даних створюється таблиця Keys з чотирма текстовими полями змінної довжини: root – зберігає повну назву ключа, name – ім’я параметра, type – його тип, value – значення.

Після створення таблиці можна розпочинати зчитування даних реєстру.

Зчитування даних. Усі параметри реєстру читаються у циклі, починаючи від кореневого ключа, доходячи до найвищих рівнів. Реєстр має деревовидну структуру (рис. 3.2.1), тому для обходу усіх його гілок необхідно реалізувати рекурсивну функцію, тобто таку, що може викликати саму себе за певних умов (у даному випадку – за наявності підключів). Процес зчитування відбувається за допомогою рекурсивної функції FindKeys().

Рисунок 3.2.1 – Деревовидна структура реєстру

Розглянемо послідовність дій при зчитуванні даних:

1. Відкриваємо кореневий ключ реєстру – HKEY.

2. Якщо ключ не має підключів (пустий) – пропускаємо його і переходимо до наступного.

3. Викликаємо функцію FindKeys().

4. Отримуємо список усіх підключів, тобто, вкладених ключів поточного ключа.

5. Для кожного із підключів виконуємо наступні дії:

a. Додаємо підключ до дерева реєстру;

b. Визначаємо список його параметрів;

c. Для кожного параметра визначаємо ім’я, тип і значення. Усі значення спочатку зчитуються у вигляді бінарних даних за допомогою WinAPI-функції RegQueryValueExA(), а потім за допомогою окремих функції перетворюються до потрібного типу.

d. Записуємо дані про параметри за допомогою SQL-запиту, наприклад,

INSERT INTO Keys VALUES ("HKEY_CURRENT_USER\ Control Panel\Appearance\New Schemes\1\Sizes\0", "Color #20", "REG_DWORD", "12632256").

Таким чином, у таблицю Keys додається рядок із наведеними вище значеннями комірок.

e. Якщо у даного ключа є підключ, рекурсивно викликаємо функцію FindKeys() (крок 3).

f. Переходимо до наступного за списком підключа.

6. Закриваємо ключ і повторюємо пункти 1-6 для інших кореневих ключів.

7. Створюємо файл tree, у якому зберігається деревовидна структура реєстру.

При наступних запусках програми є можливість відкривати попередньо сформовану базу даних. При цьому дерево реєстру зчитується з файлу tree, а файл бази даних залишається незмінним.

Пошук даних. Програма передбачає деякі опції стосовно пошуку – користувач може обрати область (у іменах, типах, значеннях) та строгість (враховуючи реєстр, слово повністю). Після перевірки обраних користувачем параметрів та наявності тексту відбувається сам процес пошуку. Залежно від обраних опцій формується SQL-запит для пошуку по базі даних. Наприклад, якщо користувач обрав пошук без урахування реєстру символів у типах параметрів за словом «REG_QWORD», запит виглядатиме наступним чином:

SELECT * FROM keys WHERE UPPER (type) LIKE UPPER (%Text%),

де Text – введений користувачем пошуковий запит. При виконанні такого SQL-запиту на екран виводиться масив елементів таблиці Keys, у яких тип містить слово REG_QWORD. За допомогою функцій бібліотеки SQLite вихідні дані перенаправляються у тимчасовий файл out, з якого по завершенні запиту вони одразу ж зчитуються у масив стрічок TStringList і відображаються у списку TListView. При виконанні наступних пошукових запитів список постійно очищується та оновлюється.

Модель

Модель програми відображає її компоненти у вигляді класів (рис. 3.3.1).

Рисунок 3.3.1 – Модель навігатора системного реєстру


Розглянемо детальніше кожен компонент програми:

· DB – клас бази даних. Складається зі змінної бази даних database, функцій для запуску SQL-запиту SQLRun та callback.

· dbCreate – потік, що відповідає за зчитування даних до бази даних. За даний процес відповідає функція Execute.

· TWaiting – клас вікна очікування. У вікні присутні зображення Image1 та текстові поля Label1, Label2.

· TWindow – клас головного вікна. Складається із елементів, описаних у розділі 2.2, та функцій, що реагують на натиснення клавіші вводу (SearchTextKeyPress) або кнопки пошуку (SearchBtnClick).

Інші компоненти імпортуються із бібліотек SQLite.


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



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