美文网首页
Windows Dokan简介

Windows Dokan简介

作者: 要厉害的 | 来源:发表于2019-08-10 18:59 被阅读0次

Dokan创建之初的目的和FUSE(Filesystem in Userspace)一样,即为了实现用户自己的文件系统。开发者通过dokan开发文件系统,实现的是一个应用程序而不是复杂的内核驱动。(Windows内核驱动开发也不见得比Linux简单。)Dokan就是Windows上的FUSE。而目前Dokan已经支持Fuse,意味着Linux Fuse程序也可以实现向Windows平台的迁移。

目前Dokan已经被替换成Dokany(自0.6.0版本),广泛支持32位或64位X86和ARM架构。支持的Windows版本有

- Windows Server 2019/2016/2012 R2/2012/2008 R2 SP1

- Windows 10/8.1/8/7 SP1

Dokan的工作原理

简而言之,和FUSE如出一辙。

Dokan库包含用户态的动态链接库(dokan.dll)和内核态的驱动程序(dokan1.sys)。(可以类比FUSE提供用户态的动态链接库libfuse.so和内核态驱动fuse.ko。)使用dokan库创建的文件系统视为文件系统程序。 

文件操作比如创建文件CreateFile、读文件ReadFile和写文件WriteFile的请求将会发送给内核态子系统,然后转递给驱动程序。文件系统程序通过用户态提供的函数接口,在驱动程序中注册回调接口。驱动程序到信息后会调用这些回调函数,最后这些请求在用户态的文件系统程序中被处理。Dokan扮演的是应用程序和文件系统程序直接的代理角色。

如何创建Dokan文件系统程序?

第一步实现DOKAN_OPERATIONS结构体里的函数。这些函数会被注册成回调函数。DOKAN_OPERATIONS会在主函数DokanMain中作为参数传递使用。

一般操作文件的顺序是

- DOKAN_OPERATIONS::ZwCreateFile

- 其他操作,比如写、读等

- DOKAN_OPERATIONS::CleanUp

- DOKAN_OPERATIONS::CloseFile

即创建、实际操作、清理和关闭。清理主要是清理请求和关闭文件句柄,而关闭是清理尚存的上下文结构。

每个操作成功返回STATUS_SUCCESS,如果失败则返回不同的错误状态NTSTATUS。另外,每一个Dokan操作都要带一个结构体DOKAN_FILE_INFO。每个文件句柄会关联该结构。该结构的主要目的是保存当前操作的文件信息,比如上下文操作信息、是否为目录类型、是否读缓存、同步操作等定义操作行为的信息。具体详见附录中地址。

如何挂载文件系统?

实现了线程安全的文件系统操作,调用DokanMain函数即可挂载文件系统到Windows中,该函数会在卸载之前保持阻塞状态。

其他相关

源码包里面提供了Mirror,可以作为案例入门Dokan的开发。

Dokan Fuse在使用时需要链接dokanfuse.dll的动态库。另外由于Linux和Windows在处理删除和重命名上的不同会导致一些移植出现问题(Linux允许打开的文件被删除,而Windows则不允许)。

项目地址:https://github.com/dokan-dev/dokany

结构体DOKAN_FILE_INFO描述:https://dokan-dev.github.io/dokany-doc/html/struct_d_o_k_a_n___f_i_l_e___i_n_f_o.html

相关文章

  • Windows Dokan简介

    Dokan创建之初的目的和FUSE(Filesystem in Userspace)一样,即为了实现用户自己的文件...

  • Dokan Fuse例程试用

    Dokan FUSE项目的目的是“fuse4win”,即实现Windows上的fuse。利用将dokan操作封装,...

  • 2018-09-14 win-sshfs

    参考 先安装 Dokan 安装

  • 基于dokan的内存文件系统实现

    dokan是windows系统上的FUSE实现,基于它提供的接口,可以很容易的实现一个用户态文件系统,挂载到系统成...

  • WSL Tips

    WSL简介 对于Windows Subsystem for Linux,可以参考Windows Subsystem...

  • WindowsME

    WindowsME简介 Windows Me(Windows Millennium Edition)是16位/32...

  • MongoDB 入门学习

    MongoDB 教程 MongoDB 教程、NoSQL 简介、MongoDB 简介、Windows MongoDB...

  • [Windows Terminal]简介

    Windows Terminal(Windows终端)是微软公司于西雅图开幕的Build 2019大会上所公布的,...

  • Zookeeper目录

    Zookeeper(windows)伪集群搭建 Zookeeper简介

  • Windows 映像格式(WIM)

    WIM简介 Windows映像格式(WIM=Windows Imaging Format)首次引进时目的是为了简化...

网友评论

      本文标题:Windows Dokan简介

      本文链接:https://www.haomeiwen.com/subject/pxarjctx.html