...

Dokan что это за программа и нужна ли она

User Mode File System

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.

Second slide

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.

Third slide

Multiple APIs

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

Fourth slide

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.

Blue Screen of Death in Windows 10

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.

Projects. See it working.

Dokan is used in a variety of projects, a short list below.

Keybase A cryptographically secure file mount using PGP key.
Nodrive A confidential encrypted cloud storage.
DokanCloudFS Access to different cloud storage services as virtual driver (OneDriver, Google Drive, MEGA, . ).
MooseFS Fault-tolerant, POSIX-compliant, network distributed filesystem
Atmo O Inter & Intra document aliasing
Kortex Mod Manager Mod manager for various PC games.
yasfw Yet Another SSHFS for Windows
Shaman.Dokan.Warc Mounts WARC files (web archives) as FS.
Shaman.Dokan.Archive Mounts 7zip/ZIP/RAR files as FS.
fuse-nfs-crossbuild-scripts fuse-nfs for windows using dokany.
Dokan SSHFS SSH File System
MLVFS Magic Lantern Video File System
Win-SSHFS SSH with SSH.NET File System
RedFS Single File System
encfs4win Encryption File System
Opendedup CDFS Deduplication Based File System
Dokan NFC RFID / NFC File System
Ninefs 9p File System
WinUnionFS UnionFS-like File System
MSSQLFS MS SQL File System
PeoneFS Pseudo Encrypted and Obfuscated File System
DiscUtils Image/Partition mounter using DiscUtils
ZFS-Win ZFS File System
FtpUse FTP File System
ChunkFS Chunked File System
CueMounter Cue File System
SrcDemo² Render smoother Source Engine videos, faster
xbox-iso-vfs Xbox ISO File System
. .

Frequently Asked Questions

What is the story of Dokan?

The Dokan Library project was originally created and maintained by Hiroki Asakawa from 2007 to 2011.
It has been maintained from 2011 to 2014 by the community with different fork.
Since 2014, the project is highly maintained by Adrien J. and Maxime C. with the fork Dokany and gracefully code signed by the company ISLOG.

Will Dokany be frequently maintained?

Dokany is highly maintained since it starts. The community is growing and number of contributors (that we ) are also growing every day.

Which Operating Systems are supported?

You can find a full list of supported operating system here.

What’s new since Dokan first name?

Until version 0.7.4, Dokany focused to improve and fix Dokan 0.6.0 (by Hiroki Asakawa) without breaking compatibility. You can find the full change log here But in simple words: A lots of fixes, more stability and it is much more near of a real file system than ever.

Is Dokany ready for a commercial product?

It is ! There are still a few things `not available yet` and on the roadmap but these are well documented today on github so if you don’t need it, you should be fine. If you do commercial products based on Dokany, please be sure to respect licenses and `be fair` if it becomes a success, it is always appreciated being supported for an open source projects.

What is ISLOG’s relationship to Dokany?

The project is supported by ISLOG company which provide tools, driver certificate for releases, and other kinds of development materials. The project is used internally by our company so some features and bug fixes was developed at our business time, but the project is a personal initiative and mainly supported at personal time.

Support Us. Thank you.

Maintaining a Windows driver and its associated libraries requires time and specific knowledge (ok, as always). We focus on stability and improvement but any help (code contribution, testing, issues resolving . ) is highly appreciated.

Dokan reviving through Dokany fork is a personal initiative and we don’t get money from it. If you’re making a business based on Dokan or just enjoy it, please consider to support the real current developers using bounties. Alternatively you can also directly use Github Sponsor button. Be fair.

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

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

Dokan Library – что это за программа как пользоваться и как её удалить

Обзор Dokan Library

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

Обзор Dokan Library

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

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

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

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

В Linux, как известно, многие вещи реализованы как файлы в файловой системе. А если и не реализованы, то их можно реализовать самому при помощи FUSE. В Windows это менее принято, но если все же очень хочется смонтировать что-то как ФС, то это возможно. Я покажу, как этого добиться, используя C# и библиотеку Dokan.

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

Теория

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

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

INFO

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

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

FUSE

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

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

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

Dokan

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

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

От изначального проекта 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 и жду окончания процесса, после чего перезагружаю машину.

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

WWW

В этом может помочь утилита 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). Теперь откроем наш новый класс и переименуем и его, а то компилятор не поймет наши фокусы. У тебя должно получиться как на скриншоте.

Присоединяйся к сообществу «Xakep.ru»!

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

При подготовке материала использовались источники:
https://dokan-dev.github.io/
https://nastroyvse.ru/programs/review/dokan-library-chto-eto-za-programma.html
https://xakep.ru/2019/04/25/windows-dokan/

Добавить комментарий