Существует большое разнообразие файловых систем.
К ним относятся файловые системы для носителей информации (FAT*, NTFS, ext* и т. д.), и сетевые файловые системы (NFS, CIFS и т. д.), виртуальные файловые системы и множество других другие .
Была ли у вас, %habrauser%, когда-нибудь потребность в собственной, но несуществующей файловой системе? Мы поговорим о том, как это сделать для ОС Windows с помощью управляемого кода (.
net).
В общем, чтобы создать свою файловую систему (далее ФС), нужно написать драйвер для этой ФС и зарегистрировать его в ОС.
Т.
к.
драйвер взаимодействует с ядром ОС, то его создание с использованием управляемого кода является нетривиальной задачей, и производительность такого драйвера будет на низком уровне.
В связи с этим целесообразнее иметь драйвер ФС, написанный на собственном коде, и какой-то промежуточный слой между этим драйвером и управляемым кодом.
Такой драйвер есть в проекте Докан , а также набор классов ДоканНет для взаимодействия с этим драйвером в управляемом коде.
Оба проекта распространяются по лицензии GPLv3.
Попробуем разобраться, как это работает
Докан — это драйвер, работающий на уровне ядра Windows, с которым может взаимодействовать любое приложение из пользовательского пространства.Драйвер существует как для 32-битных, так и для 64-битных систем.
Драйвер не реализует никакой FS, а лишь действует как прокси, пропуская все операции ввода/вывода (IO) из ядра ОС в пространство пользователя.
Реализация функциональности ФС лежит на наших плечах; создаем базовые функции ФС, такие как открытие/закрытие файла, чтение из файла, запись в файл и т.д., которые будут вызываться драйвером Dokan при возникновении соответствующих событий в системе.
В момент регистрации нашей ФС в драйвере Докан указываем некоторые параметры работы нашей ФС (количество потоков, обрабатывающих операции ввода-вывода, точку монтирования нашей ФС (Докан поддерживает монтирование как съемного, так и сетевого диска) и только в корень ФС), автоматическое отмонтирование нашей ФС, при ошибках в работе и некоторые другие параметры).
После этого в ОС в корне файловой системы появляется новый диск, с которым взаимодействуют любые приложения и сама ОС, как с обычным диском.
Какие операции разрешено выполнять в той или иной ФС, зависит только от разработчика этой ФС, то есть от нас.
ДоканНет — это оболочка драйвера Dokan. Позволяет разрабатывать собственную ФС с использованием управляемого кода.
DokanNet описывает интерфейс DokanOperations, который необходимо реализовать для регистрации нашей ФС с помощью драйвера Dokan. Автор DokanNet вместе с исходным кодом самого проекта предоставил 2 примера работы с этой оберткой:
- DokanNetMirror — зеркало ФС существующего каталога
- RegistryFS — ФС, представляющая структуру системного реестра Windows в каталогах и файлах.
- CreateFile — создание файлов/каталогов
- OpenDirectory — открытие каталога
- CreateDirectory — создание каталога
- Очистка – удаление файла/пустого каталога
- CloseFile — закрывает дескриптор файла.
- ReadFile — чтение куска файла указанной длины по указанному смещению
- WriteFile — записывает данные в файл по указанному смещению.
- FlushFileBuffers - очистка файловых буферов (кеша)
- GetFileInformation - получение информации о размере, атрибутах, времени создания/последнего доступа/изменения файла/каталога
- FindFiles — получение списка файлов/каталогов в указанном каталоге
- SetFileAttributes — установка атрибутов файла/каталога.
- SetFileTime — установка времени создания/последнего доступа/изменения файла/каталога
- DeleteFile - пометка файла на удаление (удаление осуществляется в Очистке)
- DeleteDirectory - пометка каталога на удаление (удаление осуществляется в Cleanup)
- MoveFile - перемещение/переименование файла/каталога
- SetEndOfFile — установка размера файла (используется при создании пустого файла определенной длины)
- SetAllocationSize — автор не указал, зачем нужна эта функция; на практике передачи управления на него не замечено
- LockFile - блокировка файла в однократном доступе
- UnlockFile - разблокировка
- GetDiskFreeSpace — получение информации об объёме доступного/разделяемого/свободного места в файловой системе
- Unmount - отмонтирование/отключение ФС
СШФС .
Каждый может разработать ФС, отвечающую его требованиям.
Я сосредоточился на разработке HttpFS, которая позволит монтировать в систему файлы, расположенные на удаленных Http-серверах.
Но об этом в следующей статье.
Теги: #dokan #DokanNet #виртуальная файловая система #файловая система #.
NET #.
NET
-
Выполнение Пользовательского Кода На Go
19 Oct, 24 -
Управление Командой: Простые Истины
19 Oct, 24 -
Сети Под Регулированием?
19 Oct, 24 -
Основатель Digg Выступает Против Тегов
19 Oct, 24