Погружение в dokan. как сделать свою файловую систему для windows без fuse

Содержание:

Show location on Sidebar

Admins can also show the geolocation feature on storefront using Dokan widgets. Though for this to work, the default setting for Location tab on single product page has to be disabled from wp-admin→Dokan→Settings→Geolocation.

1. Navigate to wp-admin→Appearance→Widgets.

2. Drag and drop Dokan: Product Location widget to Sidebar to show the map on the side of single product page.

3. You can also add the Dokan: Geolocation Filter Form to a page on your site by dragging and dropping the widget. Note: for this widget to render properly, you need to use a child theme.

This is how it will appear on the product page when you use Product Location widget:

Widget view:

Dokan Pro теперь на русском языке

Dokan Pro позволяет вам создавать мультипродажное или многопроцессорное решение для электронной коммерции с помощью WordPress. Вы можете начать свой собственный Ebay или Etsy. Электронная коммерция с WordPress теперь стала легкой! Супер интуитивно понятный дизайн и интерфейс Dokan упрощают работу даже для новичков.

Основные особенности плагина Dokan Pro

Торговая площадка с независимыми магазинами

Подобно Shopify, eBay или Amazon — Dokan предоставляет производителю индивидуальную витрину и возможность предоставить дополнительную поддержку.

Несколько типов продуктов Dokan Pro

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

Используйте любую совместимую с WooCommerce тему

Dokan работает с любой темой, которая поддерживает WooCommerce. Разработчики предоставляют бесплатную тему, чтобы начать работу с плагином!

Панель управления со стороны сайта

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

Зарабатывайте с каждой продажи

Плата за комиссию в глобальном масштабе, от поставщика или получения специальной комиссии за один продукт. Справедливая модель сделки позволяет обеим сторонам поделиться успехом вашего бизнеса!

Хранение информацию с отчетами и статистикой

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

Управление купонами c Dokan Pro

Продавцы управляют своими собственными продуктами и скидками, которые они предлагают. Более того, производители могут создавать купоны для специальных продаж!

Стильные витрины

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

Увеличение стоимости бренда с помощью обзоров продуктов

Продукты и поставщики могут быть рассмотрены и оценены клиентами. Хорошие отзывы помогают другим клиентам завоевать доверие и повысить ценность бренда. (Vendor Reviews — расширение)

Управляйте заказами на ходу!

Поставщики могут управлять своими заказами, отмечать заказы как ожидающие или обрабатываемые, просматривать адрес доставки и выставления счетов и отправлять товары.

Обзор публикации продукта

Поддерживайте качество продукции на вашем рынке и блокируйте спам или незаконные продукты. Если одобрение публикации включено, администратор просмотрит продукт и опубликует его. Поставщики могут создавать свои опубликованные продукты в любое время. Система Easy Withdraw (лёгкий вывод) Вывод средств очень прост. Продавцы могут запрашивать вывод средств у администратора с панели управления. Админы могут устанавливать порог вывода, цикл, а также возвращать клиентам средства.

Управление SEO для страницы магазина

Продавцы могут управлять SEO для своей страницы магазина. Они могут писать пользовательские мета-теги, хранить постоянную ссылку и описание с панели управления.

Настройка способа оплаты

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

Интеграция социальных профилей для поставщиков

Поставщики могут добавлять свои социальные профили из , и т. д., А также связывать свои магазины с их профилем магазина, помогая им совершать перекрестные продажи.

Управление доставкой для каждого магазина

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

Виджет заказов и получения на панели инструментов поставщика

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

Возврат продуктов чрезвычайно прост

Клиенты Dokan могут запрашивать разрешение на возврат через поставщиков. Админы будут рассматривать запросы и выдавать возмещение.

Объявление для продавцов

В качестве администратора вы можете передавать важные объявления для всех поставщиков или конкретных магазинов. Объявления будут отображаться на приборной панели поставщика.

Возможность управления продажами

Админы Dokan могут активировать/деактивировать продавцов. Поставщики также могут рекламироваться как «доверенные продавцы» для публикации напрямую, без модерации.

Вам может быть интересно — AnsPress – 100% Перевод на русский язык

Написать отзыв

Подготовка

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

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

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

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

Нас же сейчас интересует папка (у тебя ведь 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 вместе со «Студией»? Если нет, устанавливай. Оттуда мы ставим пакет (Tools → NuGet Package Manager → Manage NuGet Packages for Solution). Любители командной строки могут открыть PowerShell-консоль NuGet (Tools → NuGet Package Manager → Package Manager Console) и выполнить .

Чтобы создать свою ФС, нам нужен класс, реализующий . Создаем новый класс () и добавляем туда . Наш класс должен реализовывать интерфейс , так что исправляем на .

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

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

HelloWorldFS

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

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

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

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя!
Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Я уже участник «Xakep.ru»

Features

  • Mounting of cloud storage volumes as removable drives into Windows Explorer
    • number of mounted volumes only limited by available drive letters
    • mounting of multiple accounts of the same cloud storage service in parallel
    • automatic re-authentication to cloud storage services after first login (optional AES encryption of persisted account credentials and authentication tokens)
  • Full support for interactive file manipulation in Winows Explorer including but not limited to
    • copying and moving of multiple files and folders between DokanCloudFS drives and other drives
    • opening of files in default application via Mouse double click
    • right-click-menu on drive, files, and folders with access to menu commands and drive/file properties
    • thumbnails display for media files
  • Transparent client-side encryption and decryption of all file content via AESCrypt
    • encryption key configurable per drive
    • unencrypted files may be read and will be encrypted on modification

Подготовка

Чтобы использовать Dokan, нам потребуется драйвер. К нашему счастью, есть уже готовые собранные драйверы, которые нужно всего лишь установить. Тут есть три способа.

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

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

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

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

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

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

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

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

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

Privacy advice

Certain privacy-sensitive information will be stored on your local filesystem by DokanCloudFS, specifically:

  • The file %UserProfile%\AppData\Local\IgorSoft\IgorSoft.DokanCloudFS.<RandomizedName>\1.0.0.0\user.config contains data required for automatic re-authentication with the configured cloud storage services such as
    • account names you entered in the browser or login window when authenticating to the various cloud storage services,
    • potentially long-lived authentication/refresh tokens, or in some cases e-mail accounts and hashed login passwords or even user name and clear text password, as provided by the specific cloud storage service for re-login.
  • The above information will be transparently AES-encrypted in the .config file if the command line option (-p|—passPhrase, see above in section ) is used on IgorSoft.DokanCloudFS.Mounter.exe. Failing to specify a pass phrase will result in re-authentication data being stored in the clear.
  • The file <DokanCloudFS binary path>\IgorSoft.DokanCloudFS.Mounter.exe.config contains the symmetric AES encryption keys used for client-side encryption of cloud content.If you are concerned about protecting this information from unauthorized parties you should use appropriate tools to encrypt the files mentioned above at operating system level or possibly encrypt your system drive.

DokanCloudFS does not store your authentication password for any cloud storage service (which would be impossible in the first place for all services employing the OAuth authentication scheme).It does, however, store user name and password for WebDAV accounts because there is no separate authorization token concept in WebDAV.

Admin Configuration

1. Turn on Geolocation from wp-admin→Dokan→Modules.

2. Go to Dokan→Settings→Appearance. Turn on the checkbox for Show Map on Store Page if not enabled.

3. Then enter the JavaScript Google Map API Key in the next field. Obtain the API Key in the manner given in the link.

You can also go for Mapbox. It is an alternative to Google Maps. The link to acquire access key is given. You can easily attain the access token and use Mapbox as your geolocation.

4. Click on Save Changes.

5. Go to Dokan→Settings→Geolocation. Here you can configure the position of the map as it would appear on these two storefront pages: Shop Page and Store List Page. You can position the Map on Top, Left, and Right.

When you are setting location on Mapbox, you need to write the location precisely. Or you can write the location of the adjacent areas then drag the locator on to your location.

6. By default, filters will be enabled. Admins can disable it. Filters include searching for products, categories, and vendors by location.

Shop page view with geolocation:

Store List view with geolocation:

You can see all the stores location when you use Mapbox.

8. By default, maps in single product page will be enabled. Admins can disable it.

Single product page tab view with geolocation:

9. Select the Radius Search Unit as Kilometers or Miles from the drop-down.

10. Admins can also change the minimum and maximum Radius Search Distance using the numeric fields.

11. After configuring, click on Save Changes.

Тестируем

Предлагаю не мудрить и просто скопировать на наш новоиспеченный диск несколько файлов, а затем посмотреть, как они открываются. Для чистоты эксперимента мы положим туда не только текстовые файлы, но и бинарные (пару фотографий и один PDF). В качестве текстового файла я возьму чистую HTML-версию одной из наших статей. Файл без нареканий скопировался на наш виртуальный диск и нормально открылся.

Теперь фотографии: я взял одну в JPG, а другую в PNG. Они также успешно записались на диск и нормально открылись.

Но все эти файлы не превышали мегабайта по объему. Как же наша файловая система поведет себя с большими файлами? Проверим, положив туда PDF-файл. Скопировался он очень быстро, я едва успел сделать скриншот, и открылся тоже нормально.

Как видите, все работает.

Local compilation

Using pre-configured API keys from the CloudFS NuGet packages

  • Download and compile the DokanCloudFS solution using any of the following build configurations:
    • Debug (NuGet) / Release (NuGet) — non-optimized and optimized build, respectively, using gateway assemblies from the unsigned NuGet package
    • Debug (NuGet-Signed) / Release (NuGet-Signed) — non-optimized and optimized build, respectively, using gateway assemblies from the signed NuGet package
  • During the build process, an appropriate CloudFS NuGet package will be downloaded and the assemblies and .config files required by DokanCloudFS will be copied to the Library directory.

Using your own API keys

  • Prepare the CloudFS solution
    • Download the CloudFS sources in a version matching the DokanCloudFS version
    • Retrieve your own cloud API authentication keys from the URLs cited in and apply them in the respective files for the affected cloud services.
    • Compile the CloudFS solution
  • Download and compile the DokanCloudFS solution using any of the following build configurations:
    • Debug — non-optimized build
    • Release — optimized build
  • Copy all IgorSoft.CloudFS.Gateways.*.dll assemblies and the associated IgorSoft.CloudFS.Gateways.*.dll.config files from the Gateways directory in the build output of CloudFS.GatewayTests to the Library directory of DokanCloudFS.

Objective

DokanCloudFS implements a virtual filesystem that allows direct mounting of various publicly accessible cloud storage services on the Microsoft Windows platform.

Mounted cloud storage drives appear as ordinary removable drives in Windows Explorer (albeit very slow ones) and can be used just about like any local drive or file share.

All content written through DokanCloudFS is transparently AES-encrypted with a user-specified key before handing it off to the cloud storage backend.

Some limitations apply concerning transfer speed, maximum file size, permissions, and alternate streams depending on parameters of the cloud storage service used as a backend.

How it works

Dokan library contains a user mode DLL (dokan1.dll) and a kernel mode
file system driver (dokan1.sys). Once 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 response to the
requests it received. The results of the callback routines will be
sent back to the user program.

For example, when Windows Explorer requests to open a directory, the
OpenDirectory request will be sent to Dokan file system driver and the
driver will invoke the OpenDirectory callback provided by the file system
application. The results of this routine are sent back to Windows Explorer
as the response to the OpenDirectory 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 API documentation.

Release Notes

Date Version Comments
2017-03-31 1.0.11-beta — Updated DokanNet to version 1.1.0.- Updated CloudFS to version 1.0.10-beta.- Fixed NuGet references.
2016-10-05 1.0.10.1-beta — Updated CloudFS to version 1.0.10-beta.- Fixed NuGet package references.
2016-10-02 1.0.10-beta — Updated DokanNet to version 1.1.0.- Updated CloudFS to version 1.0.10-beta.- Fixed NuGet references.
2016-08-31 1.0.9.1-alpha — Fixed NuGet package references.
2016-08-29 1.0.9-alpha — Added reset command to Mounter.- Updated CloudFS to version 1.0.9-alpha- Fixed CloudFS NuGet reference.
2016-08-26 1.0.8-alpha — Updated CloudFS to version 1.0.8-alpha- Support encryption of account credentials and access tokens in persistent settings.- Activated static code analysis via Coverity Scan.
2016-08-08 1.0.7-alpha — Updated DokanNet to version 1.0.0-RC4- Successful authentication is required before mounting a cloud drive- Determine effective file size of encrypted files asynchronously to avoid timeouts when opening large directories in Windows Explorer
2016-06-16 1.0.6-alpha — Added separate build configurations for use with locally built CloudFS gateways or unsigned/signed CloudFS NuGet packages
2016-05-19 1.0.5-alpha — Updated DokanNet to version 1.0.0-RC3- Retired Copy gateway- Allow readonly-access to unencrypted files on otherwise encrypted cloud storage volumes- Support file creation for gateways that don’t allow modification of existing files (e.g. Mega)- Fixed error in size calculation when retrieving encrypted files from cloud storage- Improved online file editing capability- Various bugfixes
2016-04-18 1.0.4-alpha — Updated DokanNet to version 1.0.0-RC2- Updated SharpAESCrypt to version 1.3.1- Fixed behavior for parallel mounting of several cloud drives.- New gateway sample configuration added for hubiC/Swift.- Various bugfixes
2016-02-04 1.0.3-alpha — Upgraded .NET framework version to 4.6.1- New gateway sample configurations added for MediaFire and Yandex Disk- Unit test coverage improved- Several bugfixes
2016-01-24 1.0.2-alpha — Gateway configuration extended to accept custom parameters. This change breaks compatibility with earlier API versions.- File Gateway configuration added in App.config
2016-01-20 1.0.1-alpha — NuGet dependencies updated, tests for CloudOperations made offline executable, code coverage analysis via codecov configured
2016-01-10 1.0.0-alpha — Initial release
2015-12-30 1.0.0.0 — Initial commitThis version has not been extensively tested apart from the OneDrive gateway — expect bugs.

Limitations

  • DokanCloudFS only supports mounting of a cloud storage volume’s root directory.
  • The maximum supported file size varies between different cloud storage services. Moreover, the precise limits are not always disclosed.Exceeding the size limit in a file write operation will result in either a timout or a service error.
  • The files in a DokanCloudFS drive do not allow true random access, instead they are read or written sequentially as a whole. Furthermore, there is no support for file attributes (read-only, hidden, archived) or permissions.Depending on the target application, editing a file directly in the DokanCloudFS drive may work to a varying extent, otherwise the file must be copied to a conventional drive for processing and subsequently re-uploaded.Example: Microsoft Word can open and save .docx files from a DokancloudFS drive, but cannot update a file in place.
  • DokanCloudFS keeps an internal cache of directory metadata for increased performance. Changes made to the cloud storage volume outside of DokanCloudFS will not be automatically synchronized with this cache, therefore any form of concurrent write access may lead to unexpected results or errors.
  • DokanCloudFS distinguishes content encryption keys on a per-drive scale only. It is not possible to assign content encryption keys to specific subdirectories or to individual files.Although you could, in theory, mount several copies of the same cloud service volume in parallel, these copies will not synchronize their cached directory structures in any way (see above).

How it works

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.

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.

Информация о файле mounter.exe

Процесс DokanMounter принадлежит программе Dokan Library (версия 062_pfs) или EncryptStick или Remote Drive или OVH hubiC или Speedy Drive или Wuala Dokan или GuardKey (версия 5) или Paragon ExtFS for Windows от ENC Security Systems B.V или pCloud LTD.

Описание: mounter.exe не является важным для Windows и часто вызывает проблемы. Mounter.exe находится в подпапках «C:\Program Files» или иногда в подпапках «C:\Users\USERNAME».
Известны следующие размеры файла для Windows 10/8/7/XP 14,848 байт (76% всех случаев), 11,776 байт и .  
Название сервиса — DokanMounter.

Нет информации о создателе файла. Приложение не видно пользователям. Это не системный процесс Windows.
Поэтому технический рейтинг надежности 56% опасности.Если у вас возникли любые проблемы с mounter.exe, вы можете удалить Dokan Library или EncryptStick, или попытаться получить помощь от поставщика программного обеспечения. Нажмите на Dokan Library или EncryptStick в Панели управления Windows (раздел Программы и компоненты) для удаления, или нажмите на dokan-dev.net или encryptstick.com/support, чтобы перейти на сайт разработчика.

Рекомендуем: Выявление проблем, связанных с mounter.exe

Если mounter.exe находится в подпапках C:\Windows, тогда рейтинг надежности 72% опасности. Размер файла 23,040 байт (66% всех случаев) или 14,848 байт.
Нет более детального описания программы. Находится в папке Windows, но это не файл ядра Windows. У процесса нет видимого окна. Это не системный процесс Windows.

HelloWorldFS

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

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

1 DokanNet.Dokan.Mount(newHelloWorldFSClass(),»M:\\»);

Это смонтирует нашу файловую систему на диск . У вызова есть дополнительные параметры, которые я рассмотрю в конце статьи.

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

  • CreateFile;
  • Mounted;
  • GetFileInformation;
  • GetDiskFreeSpace;
  • Cleanup;
  • CloseFile;
  • GetVolumeInformation;
  • FindFilesWithPattern;
  • DeleteDirectory;
  • DeleteFile;
  • Unmounted.

Теперь пройдемся по реализации. Функции и не несут решительно никакой полезной нагрузки, так что просто удаляем из них весь код. (как ни странно!) отвечает за отображение свободного и занятого места на диске. Я сделал просто возврат статических значений, однако в реальной ситуации (мы ее рассмотрим позже) уже будем вычислять и отдавать актуальные данные.

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

GetFileInformation

1
2

fileInfo=newFileInformation{};

returnNtStatus.Success;

GetVolumeInformation

1
2
3
4
5

volumeLabel=»Hello world!»;

features=FileSystemFeatures.None;

fileSystemName=»HelloWorldFS»;

maximumComponentLength=256;

returnNtStatus.Success;

Эта последняя функция интересна тем, что мы можем сами задать любую метку тома (строка 1), название файловой системы (строка 3) и максимальную длину пути (строка 4). Я не стал ломать традиции и оставил максимальную длину пути равной 256 символам, но это ограничение мы уберем, когда дойдем до более реального примера.

Теперь можно все сохранить и запустить. Если вы все сделали правильно, то красивое черное окошко вывалит вам кучу текста, как на скриншоте, а в папке «Компьютер» появится новый локальный диск!

Результат запуска

У новоиспеченного диска даже можно просмотреть свойства (см. скриншот ниже), но не пытайтесь его открыть, так как получите в .

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

В напишем вот такую заглушку:

1
2
3
4
5

files=newList<FileInformation>();

FileInformation fi;

GetFileInformation(«\\HelloWorld.txt»,out fi,null);

files.Add(fi);

returnNtStatus.Success;

В напишем , а в — .

GetFileInformation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

if(fileName==»\\»)// Возвращаем корректную информацию о корневой папке

{

fileInfo=newFileInformation

{

FileName=»\\»,

LastAccessTime=DateTime.Now,

Attributes=FileAttributes.Directory

};

returnNtStatus.Success;

}

if(fileName!=»\\HelloWorld.txt»)

{

fileInfo=newFileInformation{};

returnNtStatus.NoSuchFile;

}

fileInfo=newFileInformation

{

Attributes=FileAttributes.Normal,

CreationTime=DateTime.Now,

FileName=»HelloWorld.txt»,

LastAccessTime=DateTime.Now,

LastWriteTime=DateTime.Now,

Length=57// Длина в байтах строки, которую мы возвращаем через ReadFile

};

returnNtStatus.Success;

ReadFile

1
2
3
4
5
6
7
8
9
10
11

bytesRead=;

varx=Encoding.ASCII.GetBytes(«Hello World from HelloWorldFS!\r\nThis is just a test file.»);

if(info.Context==null)// memory mapped read

{

using(varstream=newMemoryStream(x))

{

stream.Position=offset;

bytesRead=stream.Read(buffer,,buffer.Length);

}

}

returnNtStatus.Success;

После этих ухишрений программу можно запускать и открывать наш новый диск. Теперь там лежит файл . Он даже открывается, хотя мы и не сможем сохранить его, если изменим ( выдаст ). Это вы сможете реализовать сами, так как сохранение данных не входит в задачи нашего простого примера.

Наш Hello World работает!

Выводы

Сегодня мы рассмотрели создание несложной (по возможности!) файловой системы. В отличие от FUSE, с Dokan нельзя написать всего пару строчек кода, чтобы заставить файловую систему работать. Зато логи ведутся подробнейшие прямо в консоли, что позволяет в случае чего без особых трудностей выловить ошибку и исправить ее. Лично мне это очень пригодилось, так что будьте готовы!

Также Dokan позволяет настроить любую мелочь, чего не сказать про FUSE, и, конечно же, стабильная и беспроблемная работа в Windows — несомненный плюс. Проект активно развивается, так что не забывайте своевременно обновляться. И еще один момент: если тоже будете делать что-то с Dokan (особенно на C++), не забудьте запостить в комментарии к статье ссылку на свой проект!

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector