idea: Custom File System
更新日期:
此为大坑。
This idea under GPL License.
Flex Storage File System:将存储空间按优劣分级,
内存、SSD、HDD,甚至网盘、闪存。按传输速率和存储特性。
总之就是可以智能管理你的一切存储空间。
内容有标记为“当需要空间时首先被释放”的标签,还有“需要为性能优化的数据”,还有“归档性数据”,还有“需要连续存储的数据”,
并为各种专一数据类型建立索引,自动命名(智能命名),树状、图状索引查看,程序和数据可耦合共用。跨驱动器、文件系统级别的存储。
结合网盘、NAS,做自动的高可用性、备份和同步
比如划分了50G空间,剩余30G空闲,
那么会根据空闲空间的性质,并在用户标记网络为闲置并未在按流量计费的网络连接中时自动填充缓冲预取内容,
不容一点浪费,并在需要请求内容时首先访问此加速区。
查资料的时候,一开始我往windows驱动的方面查去了,
还有DDK的东西,
《windows 7 设备驱动程序开发》这种专业级别的。。。
还费了很多劲,在CSDN上下了个“虚拟磁盘源码.7z”。。。
嗯,有个叫subst的小东东不错1
2
3
4
5
6
7
8
9
10
11
12$subst /?
将路径与驱动器号关联。
SUBST [drive1: [drive2:]path]
SUBST drive1: /D
drive1: 指定要分配路径的虚拟驱动器。
[drive2:]path 指定物理驱动器和要分配给虚拟驱动器的路径。
/D 删除被替换的
(虚拟)驱动器。
不带参数键入 SUBST,以显示当前虚拟驱动器的列表。
不过这个玩意。。。嗯。。。
后来又看到了VFS,Linux下的虚拟文件系统,但是可惜,这货是linux的。。。
最后找到了它:Dokan,windows下用户态的文件系统驱动库,太开心了
User Mode File System
Dokan is an user mode file system for Windows.
It allows anyone to develop safely and easily a new file system on Windows operating systems.
我们来看一下Dokan官网上的介绍:
What is Dokan
When you want to create a new file system on Windows, other than FAT or NTFS, you need to develop a file system driver. Developing a device driver that works in kernel mode on windows is extremely technical. By using Dokan, you can create your own file systems very easily without writing device drivers. Dokan is similar to FUSE (Linux file system in user space) but works on Windows.
也就是说,这货是仿FUSE的,看人家Linux那一套眼馋,搬过来了。
当你想发明一个伟大的文件系统的时候,又不想麻烦写难度五颗星的内核态驱动(kernel mode)
那么就用Dokan库吧!
excited!
8.29更
泪奔。。
在网上看到这个东东:Windows Shell Namespace Extension,一开始还没当回事,
不过仔细看完介绍之后,我开始动摇了
Windows Shell namespace(Windows Shell 命名空间)是被 Windows资源管理器 所使用的,
向用户呈现文件系统和其他对象的组织系统。
在 Windows Shell 命名空间内的对象可以是真正的文件和文件夹,也可以是虚拟的对象,类似于网上邻居和回收站都是“虚拟文件夹”.
其实对于这样的文件系统驱动,网上有很多实现方案的,在Dokan的介绍里面就说,Dokan不是万能的,如果你想要balabala,
那么你可以参考这些方案balabala。
对,其中就有这个Windows Shell Namespace Extension,翻译过来就是windows界面里的插件,
可以直接给右键菜单添菜,甚至直接在窗口里划一块View出来。。
是不是够diao!
我想的很多功能,不仅仅是一个文件系统驱动就可以搞定的,它一定需要上层应用的配合,
再说还考虑到一个标准配置界面是不可或缺的,那么就更导致光凭一个WUDF是无法完全实现的
这可咋整!是不是要结合这个WSNE来做呢?它和Dokan又是什么关系,能不能协同工作呢?
嗯,不过他俩倒是都在.NET下面,都用C#搞定
欲知后事如何,且等我更新。。
8.30更
哎,醉了,今天搞代码把机子蓝屏了
提醒大家,玩驱动的时候,有条件的一定要在虚机里面走,
不然怎么死的都不知道
幸亏我的IE开了自动恢复,几十个标签页又回来了(●’◡’●)
找了一个WSNE的demo,居然是个C#和C++的混合体,
有个地方是EventHandler响应UI触发事件的,然而那个关键的Handle在哪里啊。。
死活没找到,输了输了
在Explorer里修修改改应该是可以的,
但是我想到一个小问题就是如何只在我特定的FlexStorage卷上面来自定义ContextMenu呢
我又想到,记得QQ电脑管家可以提供一个功能就是插上U盘的时候在资源管理器里面显示一个侧边栏,很方便的样子
嗯,我至少也要做到它那个样子吧?
Dokan的那个Demo居然有bug,Debug模式下会崩,居然用了Release才过的,很神奇,
也不明白是为什么
我还闲着试着给废柴FlexStorage加GUI,
用WPF,做都做好了,结果呵呵哒了,
真是不知道为什么。而且崩的地方是vhost,我还没法调试
好吧,暂时默默去学C#文件操作了。。
让我修炼一百年再战
9.1更
文件系统可以合并显示可用驱动器的内容了,
也可以进入每个文件夹看
但是还不能打开文件进行各种操作
但现在最麻烦的是,我是不是需要自己维护一个表,来索引各种文件呢?
不然的话,我每次进入一个目录,都需要去每个驱动器里面寻找一遍。。
还有一个问题,我这个FusionStorage是建立在已经可用的NTFS卷基础之上的,
如果我想只留下我这个文件系统,同时把C盘D盘啊这些给隐藏掉(做成黑箱),
该怎么办呢。
毕竟我这个还没有做到直接去访问磁盘上的内容,只是在借助现有的接口而已,
感觉好弱智。
9.2更
昨天生病了ToT…
有个小小的发现,在Windows的磁盘管理中,可以将一个NTFS卷装入以下空白NTFS文件夹中
也就是说,相当于一个链接,直接把卷给mount到一个文件夹里去了。。
而且这个功能是和现有的盘符访问不冲突的
再结合组策略编辑器里的
用户配置—管理模板—windows组件—windows资源管理器—“隐藏‘我的电脑’中指定的这些驱动器”
这个功能
最终的效果是,我把C盘和D盘隐藏了起来,并且新建了一个512M的小分区,把C盘和D盘给挂载进去了
此时是完全不影响正常使用的,C盘和D盘仍然可以正常访问。
啊哈哈,然而并没有什么用。
是否可以结合这个功能来开发我的文件系统呢?
比如,把不想让用户看到的卷隐藏掉。