lijianhua12
驱动牛犊
驱动牛犊
  • 注册日期2009-12-04
  • 最后登录2013-03-29
  • 粉丝12
  • 关注9
  • 积分33分
  • 威望301点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分11分
阅读:5392回复:7

第四代文件透明加密驱动(filter +layerFSD+双FCB双缓存)的实现思路探讨

楼主#
更多 发布于:2009-12-08 12:22
    看见了这么一个系统,很好奇它的实现,我猜想是不是写一个自己的的文件系统,内部应用了双FCB,一明一密,然后自己实现对各种格式磁盘的读写(如ntfs,fat等,只实现对已有文件格式的读写,不定义自己的文件系统格式).再把这个文件系统挂在ntfs fat文件系统的上面.文件的读写调用都是通过自己的文件系统,相当于把原来的文件系统屏蔽了.这不是一个一般的过滤,因为还要完全实现对磁盘的读写,但需要对ntfs fat这些格式非常熟悉
qianjunhua
驱动小牛
驱动小牛
  • 注册日期2003-12-08
  • 最后登录2013-02-27
  • 粉丝11
  • 关注0
  • 积分712分
  • 威望1052点
  • 贡献值1点
  • 好评度57点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-12-09 22:00
引用楼主lijianhua12于2009-12-08 12:22发表的 第四代文件透明加密驱动(filter +layerFSD+双FCB双缓存)的实现思路探讨 :
    看见了这么一个系统,很好奇它的实现,我猜想是不是写一个自己的的文件系统,内部应用了双FCB,一明一密,然后自己实现对各种格式磁盘的读写(如ntfs,fat等,只实现对已有文件格式的读写,不定义自己的文件系统格式).再把这个文件系统挂在ntfs fat文件系统的上面.文件的读写调用都是通过自己的文件系统,相当于把原来的文件系统屏蔽了.这不是一个一般的过滤,因为还要完全实现对磁盘的读写,但需要对ntfs fat这些格式非常熟悉


 第四代文件透明加密驱动(filter +layerFSD+双FCB双缓存)的实现思路探讨   你加这么多东西 不晕才怪呢
lijianhua12
驱动牛犊
驱动牛犊
  • 注册日期2009-12-04
  • 最后登录2013-03-29
  • 粉丝12
  • 关注9
  • 积分33分
  • 威望301点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分11分
板凳#
发布于:2009-12-10 18:48
哈哈,看来应该是有简单的办法
不过还是写个文件系统先
好象windows低层不管访问u盘,ide硬盘还是cdrom,都是发scsi命令,比较奇怪,又没有装scsi控制器和scsi硬盘
lijianhua12
驱动牛犊
驱动牛犊
  • 注册日期2009-12-04
  • 最后登录2013-03-29
  • 粉丝12
  • 关注9
  • 积分33分
  • 威望301点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分11分
地板#
发布于:2009-12-11 21:24
研究了几天ddk,有了一些心得
1 调用顺序  文件系统-缓存管理器-disk.sys-低层设备驱动
2  文件系统也可以直接调用disk.sys
3 read write到disk.sys就结束了,然后disk.sys通过scsi命令和iocl调用低层设备驱动
4 低层设备驱动主要用端口读 端口写 设置dma 响应中断,不过微软已经给我们做好了
5 文件系统缓冲读 用 cccopyread 缓冲写用 pinwrite, 这些都是缓存管理器提供的
6 文件系统也可以直接读写 通过把irp传给下层驱动 绕过缓存管理器
7 文件系统要在内存中建一个磁盘布局的结构,通过这个结构实现文件名及偏移和实际磁盘块的对应
  看来还要再仔细研究一下ddk
qianjunhua
驱动小牛
驱动小牛
  • 注册日期2003-12-08
  • 最后登录2013-02-27
  • 粉丝11
  • 关注0
  • 积分712分
  • 威望1052点
  • 贡献值1点
  • 好评度57点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-12-14 22:17
还早
lijianhua12
驱动牛犊
驱动牛犊
  • 注册日期2009-12-04
  • 最后登录2013-03-29
  • 粉丝12
  • 关注9
  • 积分33分
  • 威望301点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分11分
5楼#
发布于:2009-12-16 18:26
  希望qianjunhua 大牛多指点,我主要搞应用,不做驱动的,所以只能说是一点学习心得

这两天抽空看了fat文件系统,作一点总结

1 文件系统结构

  create  处理新建或打开一个文件,分配一个新的FCB或寻找已有的一个FCB
  finfo   处理对于文件一些信息的查询
  volume  处理对于卷的一些信息的查询,文件系统是与逻辑卷打交道,管理逻辑卷的是FTdisk.sys
  flush   处理刷新的操作
  fsctl   处理ioctl的命令
  close   关闭
  cleanup 清除  注意和close的区别
  shutdown 卸载
  fastio  处理对fastio命令的调用,但一般都是不处理,这样就会重新转到IRP_MJ_FUNCTION
  Fat     一些对fat格式操作的函数,像定位一个CLUSTER,寻找空闲cluster,写一个cluster
  fcb     一些对fcb操作的函数,最主要的是寻找与一个文件目录名对应的fcb
  
read   处理读操作,主要分为分页IO读,缓存读,直接读,分页IO读一般就是把IRP向下传递,缓存读用ccCopyRead,直接读一般要做一些预处理再向下传递,还要处理与缓存的同步刷新
  write  处理写操作,主要分为分页IO写,缓存写,直接写,分页IO写一般就是把IRP向下传递,缓存写用ccCopyWrite,直接写一般要做一些预处理再向下传递,比如判断改变文件的大小,还要处理与缓存的同步刷新
  dir    对文件目录的操作

2 文件目录的定位

  FAT文件系统在mount一个逻辑卷时,首先要把卷上的头几个扇区的信息读入缓存,这些信息包括了文件目录项和文件目录内容磁盘分布的信息,文件系统就是利用这些信息查找文件和定位文件偏移大小对应的磁盘扇区,这些文件系统元结构信息读写都是通过缓存管理器,用ccPinRead读,如果发生修改,则设置为dirty
  
  下了一个NTFS的代码,比较大,上面的结构都有,但多了很多支持高级特性的文件,像压缩、权限、日志之类的,现在没时间看,还是先把fat文件系统细细的看几遍先

  
qianjunhua
驱动小牛
驱动小牛
  • 注册日期2003-12-08
  • 最后登录2013-02-27
  • 粉丝11
  • 关注0
  • 积分712分
  • 威望1052点
  • 贡献值1点
  • 好评度57点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2009-12-16 22:11
搞应该的知道这些足够了
lijianhua12
驱动牛犊
驱动牛犊
  • 注册日期2009-12-04
  • 最后登录2013-03-29
  • 粉丝12
  • 关注9
  • 积分33分
  • 威望301点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分11分
7楼#
发布于:2009-12-22 18:54
   研究ntfs,先得对ntfs文件系统结构分析一下
 1 ntfs文件系统由引导区 MFT主文件表 文件数据区组成
 2 MFT主文件表存放文件记录,前24条是系统文件记录(编号0-23),后面是用户文件记录,每个文件记录标准大小1kb,但不是固定的,文件记录由常驻属性和非常驻属性组成,系统文件记录指向一些非常重要的系统文件,如日志文件,安全文件,簇分配文件等等
 3 文件的分配是以簇为单位的,簇的大小根据磁盘大小不同分为512字节,1K,2K,4K及更大到64K,一般4k是默认值
 4 引导区是512字节大小,MFT大概占磁盘的12%,剩下的就是数据区了,引导区一个字段指明是NTFS,另一个字段指出簇的大小,这是格式化的时候写进去的
  ntfs文件系统实现最关键的就是对MFT的读写和分析了.当然,NTFS的文件系统结构许多书里都有详细的分析,这里就简单的概述一下
游客

返回顶部