Xreferat.com » Рефераты по информатике и программированию » Дефрагментатор файловой системы

Дефрагментатор файловой системы

получения расширенной информации об ошибке, вызовите GetLastError.

Возвращенное значения от GetLastError из ERROR_MORE_DATA указывает для вызывающей функции о том, что буфер не был достаточно большим, чтобы разместить полный битовую карту с запрашиваемого начала LCN (logical cluster number – номер логического кластера) до последнего кластера на томе.

Возвращенное значения от GetLastError ERROR_NOT_READY указывает на то, что раздел является разделом с NTFS файловой системой и он не смонтирован.


3.1.2 Управляющий код FSCTL_GET_RETRIEVAL_POINTERS

Данный код используется для получения расположения кластеров файла на диске. При вызове DeviceIoControl с этим кодом, InputBuffer должен содержать структуру STARTING_VCN_INPUT_BUFFER описывающую начальный элемент цепочки кластеров с которого мы хотим получить карту размещения файла, а после успешного выполнения функции OutputBuffer будет содержать структуру RETRIEVAL_POINTERS_BUFFER которая описывает карту размещения.

Для использования этой операции необходимо вызвать функцию DeviceIoControl.


3.1.3 Структура RETRIEVAL_POINTERS_BUFFER

Необходимо пройти по структуре возвращаемой FSCTL_GET_RETRIEVAL_POINTERS

Далее рассмотрим параметры входящие в структуру:

ExtentCount. Число элементов в массив.

StartingVcn. Начальный VCN возвращенный вызываемой функцией.

Это не обязательно VCN возвращенный вызываемой функцией, так как драйвер файловой системы может округлить первый VCN до области, которую запрашивал начальный VCN.

NextVcn. VCN на котором начинается следующая область. Это значение отнять либо StartingVcn, либо NextVcn предыдущего члена массива равно длине, в кластерах, текущей экстенте. Длинна является входным параметром для функции FSCTL_MOVE_FILE.

Lcn. VCN на котором начинается текущая экстента на томе. Эта переменная является входным параметров для FSCTL_MOVE_FILE. Для NTFS значение (LONGLONG) -1 указывает либо сжатие, либо нераспределенный регион рассеянных файлов.


3.1.4 Управляющий код FSCTL_MOVE_FILE

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


3.1.5 Функция CreateFile

Функция CreateFile создает или открывает каталог, физический диск, том, буфер консоли (CONIN$ или CONOUT$), устройство на магнитной ленте, коммуникационный ресурс, почтовый слот или именованный канал. Функция возвращает дескриптор, который может быть использован для доступа к объекту.

Если функция завершается успешно, возвращаемое значение - открытый дескриптор заданного файла. Если заданный файл существовал до вызова функции, а параметр dwCreationDisposition установлен в CREATE_ALWAYS или OPEN_ALWAYS, вызов GetLastError возвращает значение ERROR_ALREADY_EXISTS (даже при том, что функция завершилась успешно). Если файл не существовал перед вызовом функции, функция GetLastError возвращает нуль.

Если функция завершается с ошибкой, возвращаемое значение - INVALID_HANDLE_VALUE. Чтобы получать дополнительные сведения об ошибке, вызовите GetLastError.


3.1.6 Функция CheckTokenMembership

Данная функция определяет, является ли определенный идентификатор безопасности, определителем доступа. Функция имеет три параметра: хендел токена, идентификатор безопасности, булево значение для вывода результата. С помощью данной функции можно определить обладает ли текущий пользователь правами администратора, что необходимо для выполнения дефрагментации файлов.

Функция IsUserAdmin выполняет проверку прав пользователя. Для этого необходимо получить идентификатор безопасности (SID) с помощью функции AllocateAndInitializeSid, с параметрами SECURITY_BUILTIN_DOMAIN_RID и DOMAIN_ALIAS_RID_ADMINS (отвечают за принадлежность к группе администраторов), которая инициализирует идентификатор. Далее, используя CheckTokenMembership, определяется права пользователя.


3.2 Функции, выполняющие дефрагментацию


Далее описана работа функций, которые реализованы в разработанной программе. Эти функции обеспечивают процесс дефрагментации.


3.2.1 Функция «file_map»

Функция получает битовую карту файла. Путь к файлу является входящим параметром FileName. В этой функции задействована стандартная функция DeviceIoControl с управляющим кодом FSCTL_GET_RETRIEVAL_POINTERS.

Для работы с файлом на начала следует его открыть используя функцию «CreateFile», с флагами чтения, записи, удаления, это необходимо для обеспечения полных прав на данный файл. Далее требуется определить размер кластера, что становится возможно после использования функции «GetDiskFreeSpace», входящим параметром является бува дска, выходными – количество секторов на кластер и количество байт на сектор, остальные параметры нам не потребуются. Следующим шагом является заполнения структуры. Для этого используется «DeviceIoControl». OutBuf описывает битовую карту файла, который следует дефрагментировать. Битовая карта используется в функции volume_map. Структура содержит количество фрагментов файла, значения VCN, LCN, порядок кластеров. Вся необходимая информация о файле, расположении его клавстеров на простраснтве диска, их порядок хранится в OutBuf. Результатом функции «file_map» является заполненный буфер.


3.2.2 Функция «volume_map»

Функция просматривает весь диск в поисках свободного пространства для размещения дефрагментируемого файла. Функция вычисляет количество кластеров на диске, рассчитывает и выделяет объем памяти для буфера.

В функции «DeviceIoControl» выделим некоторые параметры. «InBUFFER» представляет указатель на входящий буфер, и несет в себе стартовый LCN (logical cluster number – номер логического кластера). «OutBUFFER» указатель на выходной буфер. Результат выполнения операции хранится в переменной «ret». Если возвращаемое значение равно нуль, то функция выполнилась с «DeviceIoControl» ошибкой.

Для дальнейшей работы с диском следует создать хендел и задать права на чтение, запись диска. Функция «DeviceIoControl» с кодом FSCTL_GET_VOLUME_BITMAP заполняет необходимые переменные для нахождения свободного пространства. Затем следует определить количество кластеров на разделе, начиная с стартового логического кластера. Следует определить количество байт для буфера. Затем вновь следует вызвать «DeviceIoControl», с обновленными параметрами, следующим шагом будет поиск удовлетворяющего пространства на диске. После завершения обхода пространства на диске, в структуру заносятся значения стартового кластера на диске, после которого будет записываться дефрагментируемый файл.


3.2.3 Функция «simply_defrag»

Данная функция вызывается по нажатию кнопки «Go» и использует описанные выше функции. «simply_defrag» выполняет перемещение кластеров файла в новое место на диске. Это положение обуславливается положениями начального значения LCN, для выбранного файла, и значением VCN файла. Поиск подходящего стартового значение LCN для файла находитс в функции «volume_map».

Чтобы осуществить перемещение кластеров файла в новую область, следует создать хендлы для файла и для диска, и с помощью «CreateFile», разрешить чтение, запись и удаление. Используя функцию «DeviceIoControl» с управляющим кодом «FSCTL_MOVE_FILE» осуществляется перемещение файла покластерно. Количество раз выполнения цикл перемещения равно количеству фрагментов, которое содержит файл. Адрес кластера задается значениями LCN, отвечающее за физическое положение кластера на диске, и значением VCN, которое обозначает положение кластера в цепочке файла.

После завершения перемещения файла процесс дефрагментации завершен.

РАЗДЕЛ 4. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ


4.1 Интерфейс программы


Программа имеет удобный и интуитивно понятный интерфейс(Рис. 4.1.). На форме расположено три кнопки: «Drive info», «GO», «File info». Выпадающее меню выбора диска, расположена под кнопкой «Drive info», служит для получения информации о диске. Большую часть окна занимает поле для вывода информации.


Дефрагментатор файловой системы

Рис. 4.1. Вид главного окна программы.


4.2 Кнопка «Drive info»


При нажатии на кнопку в поле вывода будет занесена информация о выбранном диске. Выбор локального диска осуществляется с помощью, расположенного ниже, выпадающего меню. В поле вывода будет представлена информация о количестве секторов на кластер, количестве байт на сектор, количество свободных кластеров, общем количестве кластеров, размере кластера в килобайтах (Рис. 4.2.).

Дефрагментатор файловой системы

Рис. 4.2. Информация о диске.


4.3 Кнопка «GO»


Нажатие кнопки осуществляет дефрагментацию выбранных файлов. При нажатии на кнопку открывается окно выбора файла. После выбора файла осуществляется дефрагментация файла. Также пользователю доступна возможность осуществить выбор нескольких файлов, которые необходимо дефрагментировать. Когда процесс дефрагментации завершится, программа выводит информацию о выполненной работе. Представленная информация состоит из строк: путь к файлу, количество фрагментов файла, сообщение о завершении дефрагментации и затраченное время (Рис. 4.3.).


Дефрагментатор файловой системы

Рис. 4.3. Информация представленная после дефрагметации.


4.4 Кнопка «File info»


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


Дефрагментатор файловой системы

Рис. 4.4. Информация представленная после дефрагметации.


ВЫВОДЫ


В процесс выполнения работы были исследованы различные типы файловых систем, методы работы с ними Исследована причина фрагментации файлов, последствия данного явления. Во время выполнения задания были изучены популярные алгоритмы для дефрагментации файлов, их методы работы, особенности, преимущества и недостатки. Был произведен обзор и выделение основных особенностей популярных решений фрагментации фалов на жестком диске компьютера. Приложение разработавалось в универсальной среде разработки Microsoft Visual Studio 2005. Для обеспечения более высокой скорости работы дефрагментатора код был написан на языке высокого уровня С++, откомпилирован стандартным компилятором Microsoft.

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

Размещено на

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту
Нужна помощь в написании работы?
Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Пишем статьи РИНЦ, ВАК, Scopus. Помогаем в публикации. Правки вносим бесплатно.

Похожие рефераты: