Dokany
什么是 Dokan
当你想在 Windows 上创建一个新的文件系统(除了 FAT 或 NTFS 之外)时,你需要开发一个文件系统驱动程序。在 Windows 上开发一个在内核模式下工作的设备驱动程序是非常技术性的。通过使用 Dokan,你可以非常轻松地创建自己的文件系统,而无需编写设备驱动程序。Dokan 类似于 FUSE(Linux 用户空间文件系统),但可以在 Windows 上运行。此外,dokany 还包含一个 FUSE 包装器,可以帮助你无需修改就能移植 FUSE 文件系统。
什么是 Dokany
Dokany 是 Dokan 0.6.0 的一个分支,修复了 bug,具有清晰的变更历史,并更新以使用最新的工具构建。
这是因为原始的 Dokan Legacy(< 0.6.0)项目不再维护。
从 0.8.0 版本开始,dokany 不再兼容 dokan API。有关更多信息,请参阅选择版本。
API 在 1.1.0 和 2.0.0 版本中又发生了变化。
v1.5.1.1000 与 v2.0.3.1000 的基准测试
在空闲环境下,对 v1.5.1.1000 和 v2.0.3.1000 的 memfs
样例进行了 5 次连续测试多种场景的基准测试,以获得精确结果。
详细结果可以在这个电子表格中查看。
由于在 v2 中添加了更好的线程处理和内存池,预计并发场景(如这些测试)的性能会有更大的提升。
结果样本:
创建新文件 | +13.55% | 列表 | +60.69% | 获取属性 | +48.78% | 读取 | +18-42% |
打开/覆盖 | +153.41% | 列出精确文件 | +131.91% | 设置属性 | +120.91% | 写入 | +10-32% |
随机打开关闭 | +173.05% | | | 删除 | +90.83% | | |
许可
Dokan 包含 LGPL 和 MIT 许可的程序。
- 用户模式库 (dokan2.dll) LGPL
- 驱动程序 (dokan2.sys) LGPL
- 网络库 (dokannp2.dll) LGPL
- FUSE库 (dokanfuse2.dll) LGPL
- 安装程序 (DokanSetup.exe) LGPL
- 控制程序 (dokanctl.exe) MIT
- 示例 (mirror.exe / memfs.exe) MIT
详情请查看许可证文件。
- LGPL license.lgpl.txt
- MIT license.mit.txt
您可以从 https://dokan-dev.github.io 获取源文件
环境
Dokan 支持以下系统
- Windows Server 2022 / 2019 / 2016 / 2012 (R2) / 2008 R2 SP1
- Windows 11 / 10 / 8.1 / 8 / 7 SP1
平台
- x86
- x64
- ARM
- ARM64
每次发布时都会提供所有平台的已签名的发布版和调试版驱动程序。
工作原理
Dokan 库包含一个用户模式 DLL (dokan2.dll) 和一个内核模式文件系统驱动程序 (dokan2.sys)。一旦安装了 Dokan 文件系统驱动程序,您就可以创建在 Windows 中被视为普通文件系统的文件系统。使用 Dokan 库创建文件系统的应用程序被称为文件系统应用程序。
来自用户程序的文件操作请求(如 CreateFile、ReadFile、WriteFile 等)将被发送到 Windows I/O 子系统(在内核模式下运行),然后转发给 Dokan 文件系统驱动程序 (dokan2.sys)。通过使用 Dokan 用户模式库 (dokan2.dll) 提供的函数,文件系统应用程序能够向文件系统驱动程序注册回调函数。文件系统驱动程序将调用这些回调例程以响应收到的请求。回调例程的结果将被发送回用户程序。
例如,当 Windows 资源管理器请求打开一个目录时,带有 Direction 选项的 CreateFile 请求将被发送到 Dokan 文件系统驱动程序,驱动程序将调用文件系统应用程序提供的 CreateFile 回调。该例程的结果将作为对 CreateFile 请求的响应发送回 Windows 资源管理器。因此,Dokan 文件系统驱动程序充当用户程序和文件系统应用程序之间的代理。这种方法的优点是允许程序员在用户模式下开发文件系统,这是安全且易于调试的。
要了解更多关于 Dokan 文件系统开发的信息,请参阅 和 示例,特别是 dokan_memfs。
构建
简而言之,下载并安装 Visual Studio 2019,在安装过程中选择 Windows 10 SDK 组件或从工具菜单中选择,并安装 WDK 10。
详细信息请参阅 构建页面。
安装
最新的官方签名版本可以从以下位置下载:
- Github 发布页面
choco install dokany2
对于手动安装,请参阅 安装页面。
贡献
您希望 Dokan 变得更好吗?欢迎贡献!
了解代码并在 GitHub 仓库 上提出您的修改建议。
发现缺陷并在 GitHub 问题追踪器 上报告。
在 Github 讨论区 或 Google 讨论组 上提问和回答问题。