tebrobert/MapLib
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
RUS
ПРОЕКТ
Данный проект собирает статическую библиотеку, которая перенаправляет
запросы файловой системы на чтение и запись для реализации резервного
копирования Snapshot. Библиотеку можно использовать как в режиме ядра, так
и в режиме пользователя.
Реализована простая модель - один виртуальный носитель, один физический
носитель. Размер физического носителя равен или больше размера виртуального
носителя.
Различие режимов работы библиотеки заключается в способе выделения и
освобождения памяти.
Также производится сборка утилиты, которая тестирует библиотеку в режиме
пользователя.
СБОРКА
Сборка проекта осуществлялась с помощью Windows Driver Kit Version 7.1.0
https://www.microsoft.com/en-us/download/details.aspx?id=11800 с
параметрами "chk x64 WIN7" на операционной системе Windows 7 x64
Professional SP1. Для запуска среды используется скрипт "x64 Checked Build
Environment.bat", далее следует ввести "%p%" для перехода в директорию
проекта.
Для сборки утилиты по исходному коду библиотеки нужно запустить "bec.bat".
Для сборки самой библиотеки нужно запустить "bl.bat". Для сборки утилиты с
использованием библиотеки - "bel.bat".
ТИПЫ ДАННЫХ
LIB_MODE - режим библиотеки (значения KERNEL_MODE, USER_MODE)
LIB_BLOCK - номер блока физических и виртуальных носителей
LIB_TABLE, *LIB_PTABLE - RTL Generic AVL Table (AVL-дерево, реализованное
в библиотеке Windows ntoskrnl.lib)
LIB_BITMASK - битовая маска
LIB_NODE, *LIB_PNODE - узел AVL-дерева
LIB_PTABLE_ARRAY, LIB_PNODE_ARRAY, LIB_NODE_ARRAY - массивы с динамической
памятью
СТРУКТУРА БИБЛИОТЕКИ
lib.a.h / lib.a.c - главные функции библиотеки
lib.avl.h / lib.avl.c - работа с AVL-деревьями
lib.map.h / lib.map.c - реализация перенаправления отображения
lib.snap.h / lib.snap.c - реализация функций резервного копирования
Snapshot
ИНТЕРФЕЙС БИБЛИОТЕКИ
VOID InitLibrary
(
BOOLEAN _LibraryMode,
ULONG _LogicalFileSize,
ULONG _PhysicalFileSize,
int _MaxSnapshotCount
) - инициализировать библиотеку (обязательно вызвать до начала работы с
библиотекой)
VOID DeinitLibrary() - деинициализировать библиотеку (обязательно вызвать
после окончания работы с библиотекой)
LIB_BLOCK CheckBlock(LIB_BLOCK A, BOOLEAN *ok) - проверить отображение
одного блока
LIB_PNODE_ARRAY CheckInterval(LIB_PTABLE Table, LIB_BLOCK A, LIB_BLOCK k) -
проверить отображение интервала (подряд идущих блоков)
int SnapshotCount() - количество записаных снапшотов
int SnapshotCapacity() - максимальное количество снапшотов
int SnapshotMake() - создать снапшот, записать в первый свободный слот
BOOLEAN SnapshotSave(int n) - создать снапшот, записать в указанный слот
BOOLEAN SnapshotLoad(int n) - загрузить указанный снапшот
BOOLEAN SnapshotDelete(int n) - удалить указанный снапшот
BOOLEAN PrepareToWrite(LIB_BLOCK A, LIB_BLOCK k) - подготовить интервал
к записи (произвести перенаправление записи на свободные блоки)
СТРУКТУРА УТИЛИТЫ
app.a.h / app.a.c - входная точка утилиты
app.com.h / app.com.c - работа с командной строкой утилиты
app.man.h / app.man.c - работа с файлами (чтение, запись, вывод)
app.convstr.h / app.convstr.c - работа со строками (конвертация, разделение)
ИНТЕРФЕЙС УТИЛИТЫ
ОСНОВНЫЕ КОМАНДЫ:
cls - очистить экран
help - вывести справку
exit - выйти из программы
check - проверить отображение блока или интервала (подряд идущих блоков)
map - задать отображение интервала
unmap - удалить отображение интервала
print - распечатать файл (виртуальный или физический)
read - прочитать из файла (виртуальный или физический)
write - записать в файл (виртуальный или физический)
snapshot make - создать снапшот, записать в первый свободный слот (ячейку)
snapshot save - создать снапшот, записать в указанный слот
snapshot load - загрузить указанный снапшот
snapshot delete - удалить указанный снапшот
snapshot count - вывести количество занятых и общее количество слотов
Описание параметров команд можно узнать, набрав "[команда] help"
ОТЛАДОЧНЫЕ КОМАНДЫ:
snapshot p - подготовить интервал для записи (функия PrepareToWrite
автоматически вызывается при записи на логический диск)
snapshot rop - вывести информацию о дереве ReadonlyNodes (зарезервированные
блоки)
snapshot av - показать незарезервированные блоки