Skip to content

tebrobert/MapLib

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 - показать незарезервированные блоки

About

Mapping library for filter driver

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors