前言
Windows作为最流行的个人计算机操作系统,成为了我们学习、工作和生活的一部分。使用Windows过程中,我们都会处理过新建文件、编辑文件等操作,那Windows是如何管理这些文件的呢?
Windows采用文件系统处理文件的创建、修改和删除等操作,其搭建在磁盘或分区之上。Windows默认的文件系统为NTFS,属于内核态的文件系统,那么有没有用户态的文件系统呢?答案是肯定的,今天就让我们来学习下创建用户态文件系统的助手WinFsp吧。
Windows用户态文件系统助手WinFsp
WinFsp(Windows File System Proxy)为一个开源的Windows文件系统代理层,实现的功能类似于类UNIX系统的fuse。WinFsp连接了Windows和用户层软件,通过易用易理解的API(Application Program Interface)使得用户层可以方便快速地实现文件系统。
鉴于WinFsp的稳定、易用和高性能,很多知名的文件系统都是基于WinFsp实现的,比如:
- nfs-win:NFS的Windows版;
- rclone:挂载云存储到Windows;
- sshfs:SSHFS的Windows版;
- KS2.Drive:挂载webDAV/AOS服务器为Windows驱动器;
- ……
为何选择WinFsp
依据Windows的API开发一个文件系统是一项比较有挑战性的工作,WinFsp屏蔽了这个困难点,实现了复杂难懂的部分,需要用户层实现的核心部分则通过简单易用易懂的接口暴露给用户层,也就是减低了用户层实现文件系统的难度。
- 良好设计的API和丰富的文档;
- 详细的使用例程,官方例程仅支持c/c++,但已有很多基于WinFsp实现的其它语言的类库,比如Java、go、python,总有一个能满足您的需求;
- 测试全面、程序稳定,众多文件系统长期稳定运行;
- 兼容NTFS大部分特性。
与NTFS的兼容性
对于基于WinFsp实现的文件系统,在日常使用上是察觉不到其与原生的NTFS的差异的。但是,基于WinFsp的文件系统不是百分比兼容NTFS的,那么WinFsp与NTFS有什么异同呢?
支持的特性
WinFsp支持的NTFS特性如下:
- 查询和设置卷信息;
- 打开、创建、关闭、删除文件和目录;
- 查询、设置文件和目录信息;
- 查询、设置安全信息(ACL);
- 读写文件;
- 内存映射I/O;
- 目录变化通知;
- 文件锁;
- 机会锁;
- 打开、创建、关闭、删除、查询命名流;
- 通过重解析点支持符号链接。
不支持的特性
WinFsp不支持的NTFS特性如下:
- 硬链接,Windows极少用的特性;
- 扩展属性,Windows极少用的特性,win32 api不暴露的特性;
- 短文件名,Windows历史遗留特性,已遗弃;
- 页面文件,用户态文件系统无法实现;
- Object ID;
- 卷访问,卷可打开和关闭但不能读写;
- 稀疏文件,不支持FSCTL相关的稀疏文件;
- 压缩文件,不支持FSCTL相关的压缩文件;
- 加密文件,不支持FSCTL相关的加密文件;
- 配额;
- 修改日志;
- 磁盘碎片支持。
不兼容的特性
WinFsp和NTFS都有实现但有差异的特性如下:
- WinFsp支持大小写无关和大小写敏感的文件系统,但不支持大小写无关的文件系统执行大小写敏感的查找;
- NTFS在文件清理时更新文件大小信息,WinFsp不复制该行为;
- WinFsp不支持重命名流。
如何安装WinFsp
WinFsp的安装非常简单,参考:http://www.secfs.net/winfsp/rel/
下载完安装包,按照提示一步步执行即可,这样您的电脑就居然开发用户态文件系统的能力了。
使用memfs
WinFsp自带了一个基于内存的文件系统memfs,用于演示基于WinFsp实现的文件系统。
使用memfs的流程如下:
1.打开Windows文件资源管理器;
2.选择“此电脑”右键,选择“映射网络驱动器”。
3.在弹出框中输入“\memfs64\share”,32位系统则输入“\memfs32\share”;
4.即可看到一个memfs驱动器,可以在上面创建各种文件了。
参考
更多更详细的资料请参考WinFsp官网:http://www.secfs.net/winfsp/
结束语
今天介绍了WinFsp的安装、使用、与NTFS的兼容性,踏出了学习WinFsp的第一步,如果您想要创建自定义的用户态文件系统,那么就继续深入学习WinFsp的开发包吧。
本文暂时没有评论,来添加一个吧(●'◡'●)