Создаем Собственную Файловую Систему В Ос Windows С Использованием .Net.

Существует большое разнообразие файловых систем.

К ним относятся файловые системы для носителей информации (FAT*, NTFS, ext* и т. д.), и сетевые файловые системы (NFS, CIFS и т. д.), виртуальные файловые системы и множество других другие .

Была ли у вас, %habrauser%, когда-нибудь потребность в собственной, но несуществующей файловой системе? Мы поговорим о том, как это сделать для ОС Windows с помощью управляемого кода (.

net).

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

Т.

к.

драйвер взаимодействует с ядром ОС, то его создание с использованием управляемого кода является нетривиальной задачей, и производительность такого драйвера будет на низком уровне.

В связи с этим целесообразнее иметь драйвер ФС, написанный на собственном коде, и какой-то промежуточный слой между этим драйвером и управляемым кодом.

Такой драйвер есть в проекте Докан , а также набор классов ДоканНет для взаимодействия с этим драйвером в управляемом коде.

Оба проекта распространяются по лицензии GPLv3.



Попробуем разобраться, как это работает

Докан — это драйвер, работающий на уровне ядра Windows, с которым может взаимодействовать любое приложение из пользовательского пространства.

Драйвер существует как для 32-битных, так и для 64-битных систем.

Драйвер не реализует никакой FS, а лишь действует как прокси, пропуская все операции ввода/вывода (IO) из ядра ОС в пространство пользователя.

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

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

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

Какие операции разрешено выполнять в той или иной ФС, зависит только от разработчика этой ФС, то есть от нас.

ДоканНет — это оболочка драйвера Dokan. Позволяет разрабатывать собственную ФС с использованием управляемого кода.

DokanNet описывает интерфейс DokanOperations, который необходимо реализовать для регистрации нашей ФС с помощью драйвера Dokan. Автор DokanNet вместе с исходным кодом самого проекта предоставил 2 примера работы с этой оберткой:

  • DokanNetMirror — зеркало ФС существующего каталога
  • RegistryFS — ФС, представляющая структуру системного реестра Windows в каталогах и файлах.

Примеры кодов легко читаются и дают обзор возможностей, предоставляемых драйвером Dokan. Реализация интерфейса DokanOperations сводится к реализации следующих функций:
  • CreateFile — создание файлов/каталогов
  • OpenDirectory — открытие каталога
  • CreateDirectory — создание каталога
  • Очистка – удаление файла/пустого каталога
  • CloseFile — закрывает дескриптор файла.

  • ReadFile — чтение куска файла указанной длины по указанному смещению
  • WriteFile — записывает данные в файл по указанному смещению.

  • FlushFileBuffers - очистка файловых буферов (кеша)
  • GetFileInformation - получение информации о размере, атрибутах, времени создания/последнего доступа/изменения файла/каталога
  • FindFiles — получение списка файлов/каталогов в указанном каталоге
  • SetFileAttributes — установка атрибутов файла/каталога.

  • SetFileTime — установка времени создания/последнего доступа/изменения файла/каталога
  • DeleteFile - пометка файла на удаление (удаление осуществляется в Очистке)
  • DeleteDirectory - пометка каталога на удаление (удаление осуществляется в Cleanup)
  • MoveFile - перемещение/переименование файла/каталога
  • SetEndOfFile — установка размера файла (используется при создании пустого файла определенной длины)
  • SetAllocationSize — автор не указал, зачем нужна эта функция; на практике передачи управления на него не замечено
  • LockFile - блокировка файла в однократном доступе
  • UnlockFile - разблокировка
  • GetDiskFreeSpace — получение информации об объёме доступного/разделяемого/свободного места в файловой системе
  • Unmount - отмонтирование/отключение ФС
Как мы видим, функционал, предоставляемый драйвером Dokan и оболочкой DokanNet, весьма богат. На основе этого проекта был разработан ФС.

СШФС .

Каждый может разработать ФС, отвечающую его требованиям.

Я сосредоточился на разработке HttpFS, которая позволит монтировать в систему файлы, расположенные на удаленных Http-серверах.

Но об этом в следующей статье.

Теги: #dokan #DokanNet #виртуальная файловая система #файловая система #.

NET #.

NET

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.