Dokan

关注
义项:Windows用户态文件系统库
Dokan

Dokan是面向Windows平台的一款用户态文件系统库,开发者借助它可以不编写内核模式设备驱动就创建新的文件系统,思路与Linux上的FUSE相似。该库由用户态动态链接库和内核态文件系统驱动两部分组成,用户程序的文件操作请求经Windows I/O子系统转交驱动,再由驱动回调开发者注册的处理函数;它同时提供FUSE包装层,便于把已有的FUSE文件系统移植到Windows,并提供C、.NET、Java、Delphi、Ruby等多种语言绑定[1]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Dokan是一套运行于Windows的用户态文件系统库,其目标是让开发者无需编写内核模式的文件系统驱动,也能为系统新增除FAT、NTFS之外的文件系统[2]。它与Linux中的FUSE(Filesystem in Userspace)作用类似,只是面向Windows环境[1]。

在该体系中,真正对外提供服务的是由Dokan库创建的文件系统应用,存放于内核态的驱动只承担请求转发的角色,因此使用Dokan构建的文件系统在Windows中呈现为普通卷,可被资源管理器和其他应用程序正常访问[2]。

原理

Dokan由两部分构成:用户态动态链接库与内核态文件系统驱动。文件系统应用通过用户态库提供的函数向驱动注册一组回调例程,并借助这些函数完成卷的挂载与卸载[1]。

当用户程序发起打开、读取、写入等文件操作时,请求先进入运行在内核态的Windows I/O子系统,再由它转发给Dokan文件系统驱动;驱动随后调用文件系统应用注册的对应回调,回调的返回值沿原路径返回给发起请求的程序[2]。以资源管理器打开目录为例,带有Directory选项的CreateFile请求会被送往驱动,驱动调用应用实现的CreateFile回调,结果再返回资源管理器[2]。

这种代理式结构使文件系统的核心逻辑留在用户态进程内,开发者调试时不必进入内核态,从而降低开发风险与调试难度[1]。

发展历程

Dokan库项目由Hiroki Asakawa于2007年创建并维护至2011年,代码自2007年起公开[1]。2011年至2014年间,项目由社区以多个分支的形式继续维护[1]。

2014年起,项目由Adrien J.和Maxime C.以Dokany分支的形式接手维护,并由ISLOG公司提供代码签名[1]。Dokany是Dokan 0.6.0的分支,修复了缺陷、整理了变更历史并更新了构建工具,原因是更早的Dokan Legacy(0.6.0之前)已不再维护[2]。

自0.8.0版起,Dokany与旧版Dokan API不再兼容,此后在1.1.0和2.0.0版本中API又发生过变化[2]。项目在不同语言生态中衍生出绑定包,例如面向.NET的DokanNet封装、面向Rust的dokan crate以及Go语言的dokan绑定[3][4][5]。

应用

Dokan的典型用途是把某种数据源以虚拟文件的形式挂载出来,供Windows应用透明访问,数据源既可以是本地其他位置的文件,也可以是存放在云端的内容[1]。

官方列举的使用者包括密钥管理软件Keybase的加密文件挂载、加密云存储Nodrive、把OneDrive、Google Drive、MEGA等云盘映射为虚拟盘的DokanCloudFS、分布式的MooseFS,以及SSH文件系统Dokan SSHFS、归档文件挂载工具Shaman.Dokan.Archive等[1]。此外还有挂载ZIP等压缩包的SimpleZipDrive、面向Xbox ISO镜像的xbox-iso-vfs、实现类似UnionFS效果的MergeFS等社区项目[6]。

由于库中自带FUSE包装层,已有的FUSE文件系统在多数情况下只需用Cygwin或MinGW重新编译源码并链接该库,即可在Windows上运行[1]。Dokan支持x86、x64、ARM、ARM64等平台,可运行于Windows 7 SP1至Windows 11以及Windows Server 2008 R2 SP1至2022等版本[2]。

局限

作为代理式实现,每一次文件操作都要在用户态应用、内核驱动和发起请求的进程之间往返,其性能受用户态处理逻辑与线程模型的影响,项目自身也通过改进线程与内存池来优化并发场景下的表现[2]。

Dokany与早期Dokan API不兼容,0.8.0版之后又历经1.1.0、2.0.0等版本的接口调整,基于旧接口编写的代码需要修改后才能适配新版本[2]。此外,内核态驱动仍需要在系统中安装,并以已签名的形式随发行版提供[2]。

在授权方面,用户态库、驱动、网络库、FUSE库与安装程序采用LGPL许可,控制程序和示例程序采用MIT许可,使用时需遵守相应条款[2]。

参见

  • FUSE —— Linux及其他类Unix系统上的用户态文件系统框架,Dokan的思路与之相似并提供了兼容包装层。

  • 虚拟文件系统 —— 把非本地文件或非文件形态的数据以文件形式对外提供的机制。

  • .NET —— DokanNet等封装库所面向的开发平台之一。

  • Windows —— Dokan所支持的运行环境。

参考资料

  1. github.io 上的网页 [引用日期2026-10-14]
  2. github [引用日期2026-10-14]
  3. atom [引用日期2026-10-14]
  4. Crate dokan[−][src] [引用日期2026-10-14]
  5. dokan [引用日期2026-10-14]
  6. GitHub topics: dokan - Ecosyste.ms: Repos [引用日期2026-10-14]
词条评价
词条统计

浏览次数:4 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:25:19Z

历史版本

本条目引用的词条
FUSE 虚拟文件系统 .NET Windows