现在一个项目里有个模块需要从驱动层文件过滤,进行加解密,例如:监控所有的word文件和excel文件,保存的时候加密文件,假设文件后面加个字符串"hello",打开的时候解密文件,先去掉文件后的字符串"hello",然后让word打开最好不用FindFirstChangeNotification这些方法,想着过滤大概应该用FileMon的方法,但是当FileMon监控打开和保存的时候文件会不会被保护,不知道这时能不能加解密文件;FileMon的代码太苦涩,看了一些,头昏眼花;如果有人已经做过类似的工作了,非常高兴,也愿意出些人民币交换,不过不会太多,呵呵www.driverdevelop.com上面人太少,没办法,来这里问,
大家有没有什么好的解决方法,请帮忙指教指教,200分要是不够就再开几个200分的帖子

解决方案 »

  1.   

    我以前看到过一个帖子,和你得要求虽然不同,但又类似之处,他当时说FindFirstChangeNotification不好用,老会丢信息,然后别人给他推荐了codeProject上的一个例子。
    他说很好,你可以去找找,呵呵。
    不过具体的url和其他信息我都忘了。
      

  2.   

    如果看不懂filemon,那么你写的文件系统驱动估计别人也不敢用吧。
      

  3.   

    alphapiao(奉旨灌水钦差)说得好!
    问题是我只是要加解密而已,并不想在文件系统驱动这个地方耗费时间,只想赶快把任务完成
    非常感谢支持
      

  4.   

    所有文件都要经过自己的filter,动不动就over  唉!
      

  5.   

    用过滤驱动完成实际上也不怎么可靠,只能够实现较弱的加密
    因为你必须要考虑所有文件操作的 API
    分别过滤处理 IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_GETINFORMATION, IRP_MJ_SETINFORMATION 的 IRP命令
    特别是对文件数据定位的问题,考虑 SetFilePointer 的情况下,你必须对偏移能够进行控制
    因此你对加密数据以字节为基准,实际上是对每个字节的数据进行加密,可以进行上下文控制,加密数据中一字节的加密数据最好为一字节的整数倍,这样会加大数据量,增强加密强度,否则使用不定长的数据加密会增大内核处理的时间
      

  6.   

    照qrlvls(空 气) 这么说,如何才能实现较强的加密呢?谢谢
      

  7.   

    个人认为要实现较强的加密,最主要的难题在于解决SetFilePointer上,因为顺序的文件加密方式是比较容易被解开的,因此在加密过程中过滤驱动需要完成对某一字节的定位和顺序读取时的相对偏移的较好的处理,但这是最复杂的,关键在于逻辑上,例如你使用MD5进行散列的话,那么文件定位是个难题,因为与上下文相关,你还必须考虑读取上下文的信息,而定位后顺序读取要重新计算偏移
    不过普通的商业应用应该用不了这么大强度的加密吧,而真正重要的数据实际上在写入前也需要被加密,然后再次通过过滤驱动实现简单加密比较合理一些
      

  8.   

    复杂,必须写IFS过滤驱动插入设备堆栈处理IRP包。
      

  9.   

    老兄就是要实现一个小型EFS吧
      

  10.   

    谢谢楼上的各位星星最终目的很简单:举个例子
    在计算机A上做的文档,假设是A.doc,绑定了本机的CPU_ID或用户密匙等信息,使得无法在别的计算机上被打开
      

  11.   

    你的目标有很多商榷之处:
    1.如果用EFS实现,那是不是别的计算机都必须先安装你的filter呢?这好象有点强人所难.
    2.如果保护文档,最好在文档本身做文章.但不知道你是不是就是要保护word一种类型?我觉得PDF的密码保护也可以啊.
      

  12.   

    你是不是要这个?
    http://www.cisisoft.com/SmallClass.asp?BigClassID=3&BigClassName=产品介绍&SmallClassID=2&SmallClassName=隐藏文件指挥器&SmallClassType=0
      

  13.   

    谢谢codewarrior(会思考的草) 
    Word只是一种,实际需要控制各种类型文档,和你介绍的那个有点差异肯定不需要别的计算机有filter,因为文件已经被加密了,所以在别的计算机上就打不开了
    加解密条件应该是可变的,比如:绑定本机CPU_ID、或绑定局域网服务器的CPU_ID、或绑定加密狗等等这里有个很简单的要求说明 http://www.smarteam.cn/FileLock.jpg
      

  14.   

    我有一个问题,假设你的文件现在加密了,那用什么软件来看?比如你说的word文档,显然用word是不能正常打开了——否则就失去意义了——那你就必须发布一个用于查看该文档的软件,更确切一些,还是必须要其他计算机上安装有解密软件对用户身份进行校验,或者是一个app、或者是一个ifs filter driver,那么你说的“肯定不需要别的计算机有filter”就是不可能的。
      

  15.   

    至于一个典型的ifs filter,请参考ifs ddk的例子sfilter。这个例子已经足够了,你只要设计好加密算法即可。
      

  16.   

    至于一个典型的ifs filter,请参考ifs ddk的例子sfilter。这个例子已经足够了,你只要设计好加密算法即可。
      

  17.   

    谢谢 codewarrior(会思考的草)不好意思,我说的不是很明白,是在需要解密的计算机上才安装filter,而且还要符合解密条件,
    我去研究一下ifs ddk的例子sfilter上面说的内容我觉得已经值200分了,明天结贴,后面再继续开200分的帖子提问
      

  18.   

    多跑跑OSR,可能会有用。他的新闻组特别好。
      

  19.   

    呵呵,事实上ifs ddk的src\filesys下只有两个例子:sfilter和filespy,后者是在前者基础上加工的,基本内容没有变,但是非常复杂,一开始不要去啃它。