Dokan library для windows

User Mode File System

Dokan is a user mode file system for Windows.
It allows anyone to safely and easily develop new file systems on Windows operating systems.

Open Source

MIT and LGPL license.
You can browse and contribute to the source code, including the kernel driver.
You can also use it in open source projects and commercial products.

Multiple APIs

To simplify user mode development, Dokan was wrapped with several languages including C, .NET, Java .

FUSE Wrapper

Directly run your FUSE (Filesystem in Userspace) implementation on windows without changes.

Data as file

Easily mount any kind of data as a virtual file and access it transparently from all your Windows applications. It can literally be anything: files from other locations, stored locally or remotely in the cloud. Creativity will be your limit.

Access Control

Working in user mode has several benefits and access control is one of them. You can have complex and custom access checks even with multiple security layers if you want to.

Be safe

Dokan takes care of the hard stuff and you never have to go deeper into kernel mode. This means you can develop your driver safely without having to fear BSOD at any test. Dokan code is available online since 2007. While people came and left the code remains alive thanks to the open source community.

Driver. Don’t.

When you want to create a new file system on Windows you need to develop a file system driver. Developing a device driver that works in the kernel mode on Windows requires highly technical skills.
By using Dokan, you can create your own file systems very easily without writing device drivers. Dokan is similar to FUSE (Linux user mode file system) but works on Windows.

User-mode API. As you like.

Dokan User-mode API provides functions to mount/unmount your driver and several callbacks to implement on your application to have a fully working user mode file system driver.

Additionally to the default provided C library, the API is also available for DotNet, Java, Delphi and Ruby.

FUSE Wrapper.

Dokan FUSE (Filesystem in Userspace) is a wrapper library that makes Dokan compatible with FUSE API. You simply need to rebuild your FUSE source code without changes with Cygwin/MinGW and link against the library to make it work on Windows. Now available by default in the main source repository and installers.

Dokan Library – помощь в разработке мультиплатформенных проектов

При разработке программного обеспечения у пользователя может возникать необходимость симулировать файловые системы других операционных систем. Таким способом можно создавать программу в среде Windows и тестировать её работоспособность в окружениях Linux, MacOS, BSD-систем. Именно для упрощения данной задачи и используется библиотека Dokan Library.

Обзор Dokan Library

Ключевое преимущество Dokan Library – это поддержка исполнения задач на уровне ядра Windows. Но это одновременно и недостаток: для полноценной работы библиотеки требуется установка скомпилированного драйвера (и выбор неправильного софта может привести к Blue Screen на этапе загрузки ОС). Подключение же виртуальных дисков при этом выполняется через протокол SSH. Их файловая система значения не имеет, так как Докан преобразовывает поступающие запросы в такие, которые будут понятны ядру Windows, что и позволяет эмулировать неподдерживаемые файловые системы или вовсе создавать свои собственные. Это своего рода аналог FUSE, используемой в Linux-системах.

Для чего необходима Dokan Library и что это за программа: именно при отладке и проверке на работоспособность в окружении разных ОС библиотека чаще всего и используется. Это не отдельное приложение со своим GUI-интерфейсом, а набор системных исполнительных файлов под среду разработки Visual Studio. Библиотеку в форме исходного кода и exe-установщика можно скачать с соответствующей ветки GitHub. В дальнейшем потребуется установить актуальную версию Visual Studio, NuGet Package Manager и с данного пакетного менеджера импортировать нужную библиотеку (там она именуется как DokanNet).

Читайте также:  Vbscript windows scripting host

Первоначально проект был разработан и вплоть до 2011 года поддерживался неким Hiroki Asakawa. Последняя созданная им публичная версия – 0.6.0. До 2014 года разработкой и поддержкой занималось GitHub-сообщество (исходный код открыт, публикуется под лицензиями LGPL и MIT).

Библиотека Dokan – проблемы при использовании

Основные проблемы, которые возникают при использовании Докан, следующие:

  1. Слабая совместимость при использовании свежих фреймворков .NET Framework. Практика показывает, что лучше всего использовать 4.5.2 с Либрари версии 1.2.0.1000. Текущая версия Dokan Library 0.0-beta1 нивелирует этот недостаток, но она всё ещё считается тестовой. Так что при создании новых проектов рекомендуется использовать .NET Framework именно 4.5.2.
  2. Подобрать драйвер самостоятельно – сложно. А если это сделать неправильно, то запуск Visual Studio (а то и загрузка ОС) будут заканчиваться критической ошибкой (синий экран смерти). Перечень всех актуальных драйверов (с расширением .sys и в форме исходного кода для компиляции) доступен на GitHub.
  3. При деинсталляции библиотеки часть исполнительных системных файлов остаются в Windows. Они не мешают нормальной работе операционной системы, но при установке других версий Докан могут вызывать ошибки (крах при попытке добавить библиотеку через пакетный менеджер Visual Studio). Подобное поведение наблюдается при переходе с Либрари 0.6.0 до версии 1.2.0.
  4. Интегрированный GUI, запускаемый через файл encfsw.exe, имеет скудный функционал. Поэтому без умения работать с Visual Studio освоить работу библиотеки сложно.

Как удалить Dokan

Для удаления предусмотрен классический деинсталлятор, копирующийся в папку установки. Но даже после его завершения в системе остаётся драйвер, который может вызывать ошибки при установке других библиотек, эмулирующих работу файловой системы на уровне ядра. Перед тем как удалить их вручную из папки System32 – driver (в Windows), рекомендуется очистить реестр от ранее интегрированных ключей (можно выполнить с помощью CCleaner). Естественно, что пользователь для этого должен обладать правами администратора. Предварительно также рекомендуется исключить библиотеку из Visual Studio через NuGet Package Manager или иной используемый пакетный менеджер.

Итак, Dokan Library – библиотека, позволяющая работать в среде Виндовс и пользоваться, эмулировать или даже создавать изначально неподдерживаемые файловые системы (например, EXT4, BTRFS). Исходный код открыт, опубликован на GitHub. Если у вас был опыт использования Dokan Library, просим рассказать об этом, а также о преимуществах, недостатках библиотеки, проблемах, с которыми при работе пришлось столкнуться.

Dokan library для windows

When you want to create a new file system on Windows, other than FAT or NTFS, you need to develop a file system driver. Developing a device driver that works in kernel mode on windows is extremely technical. By using Dokan, you can create your own file systems very easily without writing device drivers. Dokan is similar to FUSE (Linux file system in user space) but works on Windows. Moreover, dokany includes a FUSE wrapper that helps you to port your FUSE filesystems without changes.

Dokany is a fork of Dokan 0.6.0 with bug fixes, clean change history and updated to build with latest tools.

Because the original Dokan Legacy (

Dokan contains LGPL and MIT licensed programs.

  • user-mode library (dokan1.dll) LGPL
  • driver (dokan1.sys) LGPL
  • network library (dokannp1.dll) LGPL
  • fuse library (dokanfuse1.dll) LGPL
  • installer (DokanSetup.exe) LGPL
  • control program (dokanctl.exe) MIT
  • samples (mirror.exe / memfs.exe) MIT

For details, please check the license files.

  • LGPL license.lgpl.txt
  • MIT license.mit.txt

You can obtain source files from https://dokan-dev.github.io

  • Windows Server 2019 / 2016 / 2012 (R2) / 2008 R2 SP1
  • Windows 10 / 8.1 / 8 / 7 SP1

Dokan library contains a user mode DLL (dokan1.dll) and a kernel mode file system driver (dokan1.sys). Once the Dokan file system driver is installed, you can create file systems which can be seen as normal file systems in Windows. The application that creates file systems using Dokan library is called File system application.

File operation requests from user programs (e.g., CreateFile, ReadFile, WriteFile, . ) will be sent to the Windows I/O subsystem (runs in kernel mode) which will subsequently forward the requests to the Dokan file system driver (dokan1.sys). By using functions provided by the Dokan user mode library (dokan1.dll), file system applications are able to register callback functions to the file system driver. The file system driver will invoke these callback routines in order to respond to the requests it received. The results of the callback routines will be sent back to the user program.

Читайте также:  Как установить удаленный рабочий стол для windows 10

For example, when Windows Explorer requests to open a directory, the CreateFile with Direction option request will be sent to Dokan file system driver and the driver will invoke the CreateFile callback provided by the file system application. The results of this routine are sent back to Windows Explorer as the response to the CreateFile request. Therefore, the Dokan file system driver acts as a proxy between user programs and file system applications. The advantage of this approach is that it allows programmers to develop file systems in user mode which is safe and easy to debug.

To learn more about Dokan file system development, see the and the samples, especially dokan_memfs.

In short, download and install the Visual Studio 2019, select Windows 10 SDK component during the install or from the Tools menu & install the WDK 10

For details, see the build page.

For manual installation, see the installation page.

You want Dokan to get better? Contribute!

Learn the code and suggest your changes on GitHub repository.

Detect defects and report them on GitHub issue tracker.

About

User mode file system library for windows with FUSE Wrapper

Погружение в Dokan. Как сделать свою файловую систему для Windows без FUSE

Содержание статьи

Если знаком с утилитой CyberSafe Top Secret, то ты, наверное, тоже столкнулся с тем, что добавлять файлы в контейнер неудобно. Совсем другое дело — VeraCrypt: монтируешь локальный диск, и файлы шифруются на лету. Именно так будет работать наш проект.

Теория

Каждый раз, когда ты открываешь папку «Компьютер», файловый менеджер отправляет запрос ядру с просьбой сказать, какие есть диски. Как происходит общение с драйвером? Через диспетчер ввода-вывода. Любое приложение может отправить ему пакет с запросом (IRP, I/O Request Packet) и информацией, кому он предназначен. Диспетчер принимает этот запрос и передает его нужному драйверу.

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

Передача данных между драйверами по цепочке позволяет существовать руткитам и прочей нечисти.

Любой драйвер средствами все того же диспетчера ввода-вывода может что-нибудь спросить у любого приложения, работающего в user-mode, что и используется в драйвере FUSE.

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

Результат создания своего драйвера ФС

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

Dokan

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

Есть такой проект — Dokan. По сути, это тот же FUSE, но с кучей приятных дополнений. Во-первых, он ни разу за время его использования у меня не выдал ни одного синего экрана смерти. Во-вторых, есть библиотеки, которые позволяют работать с ним из самых разных языков, включая Delphi, Ruby, C# и Java (их ты найдешь на GitHub по ссылке выше). И в-третьих, разобраться с ним почти так же просто, как и с FUSE. Так что будем использовать его, библиотеку под C# и немного фантазии.

Читайте также:  Драйвер для canon lbp 5000 для windows 10

От изначального проекта Dokan сейчас осталось очень мало. После версии 0.6.0 появился серьезно доработанный форк под названием Dokany. Теперь жив только Dokany, и, соответственно, мы будем использовать его. В дальнейшем, говоря о Dokan, я буду подразумевать именно Dokany.

Подготовка

Чтобы использовать Dokan, нам понадобится драйвер. К нашему счастью, есть уже готовые собранные драйверы, которые нужно только установить. Тут есть три варианта. Первый — воспользоваться автоматическим установщиком. Второй — скачать собранные бинарники (они уже подписаны) и встроить их в свой установщик. Ну и третий — скачать исходный код, благо он открыт (часть проекта распространяется по лицензии LGPLv3, часть — по MIT), и собрать все самостоятельно.

Плюс такого подхода в том, что мы можем подписать готовый драйвер своей подписью, но на этом плюсы заканчиваются. Я выбрал первый вариант. Скачать установщик можно тут. Мастер в конце попросит перезагрузить компьютер, что мы и сделаем. Если после перезагрузки мы видим драйвер dokan1.sys , то все сделано правильно. Если нет — можно попробовать поставить вручную.

Загруженный драйвер dokan1.sys

Чтобы установить вручную, придется скачать более объемный файл. Кроме драйверов, он содержит и нужные тебе библиотеки (если ты знаешь C++), так что не спеши удалять его после установки.

Нас же сейчас интересует папка x64 (у тебя ведь 64 бита?). В ней — набор папок, как на картинке.

Содержимое папки x64

У меня Windows 8.1, так что иду в соответствующую папку (рекомендую Release) и, ткнув по inf-файлу правой кнопкой мышки, выбираю «Установить». Подтверждаю запрос UAC и жду окончания процесса, после чего перезагружаю машину.

Теперь установка должна пройти успешно. Если что-то не получилось — убедись, что ставишь ту версию драйвера.

В этом может помочь утилита DriverView.

Кроме Dokan, нам еще понадобится Visual Studio. Недавно вышла версия 2019, так что, даже если у тебя уже установлена, советую обновиться. С приготовлениями все, переходим к кодингу.

WARNING

Любые вмешательства в файловую систему, в том числе создание своей ФС, могут повредить или уничтожить твои данные. Все описанное в статье ты повторяешь на свой страх и риск. Ни автор, ни редакция «Хакера» не несут ответственности за твои действия. Все операции рекомендуем предварительно выполнять в виртуальной машине.

Кодинг

Открываем Visual Studio и создаем новый проект типа Console App (.NET Framework). На скриншоте видно, что целевой фреймворк — 4.5.2, но минимально поддерживаемый — 4.0. Так что, если твоя машина не поддерживает 4.5.2, ты знаешь, что делать.

Проект создали, и теперь нашему взору предстала заглушка метода Main. Ты ведь установил NuGet вместе со «Студией»? Если нет, устанавливай. Оттуда мы ставим пакет DokanNet (Tools → NuGet Package Manager → Manage NuGet Packages for Solution). Любители командной строки могут открыть PowerShell-консоль NuGet (Tools → NuGet Package Manager → Package Manager Console) и выполнить Install-Package DokanNet .

Чтобы создать свою ФС, нам нужен класс, реализующий IDokanOperations . Создаем новый класс ( Ctrl + Shift + A ) и добавляем туда using DokanDet; . Наш класс должен реализовывать интерфейс IDokanOperations , так что исправляем class XakepFSClass на class XakepFSClass : IDokanOperations .

Как ты видишь, в 10-й строке ошибка. Конечно, мы же унаследовали кучу методов от интерфейса, но не реализовали их. Я знаю, ты не хочешь объявлять каждый метод вручную, поэтому поставь курсор на неугодное выражение ( IDokanOperations в 10-й строке) и нажми Alt + Enter . В появившемся меню выбери Implement interface.

Теперь порядок! Но все методы выкидывают исключение NotImplementedException, что нам никак не подходит. Давай-ка реализуем Hello World, а затем — ФС, хранящую все данные в JSON.

HelloWorldFS

Поскольку это просто Hello World, я не хочу изменять файл, который мы только что создали. Сделаем его копию, переименуем для лучшего восприятия (для переименования выбери файл в правой панели и нажми F2). Теперь откроем наш новый класс и переименуем и его, а то компилятор не поймет наши фокусы. У тебя должно получиться как на скриншоте.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Оцените статью