zzbwang
驱动牛犊
驱动牛犊
  • 注册日期2009-03-18
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分62分
  • 威望611点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
阅读:2061回复:5

如何让指定进程打开文件不与其它进程共享文件缓冲?

楼主#
更多 发布于:2009-04-14 14:49
我在开发文件加密过滤驱动的时候,需要根据打开文件的进程控制驱动是否要对文件加解密。发现一个问题就是,比如允许msdev.exe这个进程访问*.c文件,不允许其它所有进程访问。在msdev.exe这个进程打开一个文件的时候,解密的数据被缓冲管理器缓冲了,其它进程打开这个文件的时候没有从磁盘读数据,而是从缓冲中得到了明文的数据。

如何才能控制受控文件流不与其它文件流共享缓冲?
zzbwang
驱动牛犊
驱动牛犊
  • 注册日期2009-03-18
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分62分
  • 威望611点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
沙发#
发布于:2009-04-15 14:40
我想到一个解决办法不知道是否可行:

就是过滤驱动的读写操作不处理PAGING IO只处理Cached IO,这样系统缓存中保存的数据都是密文。

在IRP_MJ_CREATE中判断当前创建操作是否是指定的进程发出的,如果是,就在StreamHandleContext中做上加密标记,在读写操作中完成相应的加解密。带这个加密标记的流在IRP_MJ_CLOSE时加上加密尾标。
qianjunhua
驱动小牛
驱动小牛
  • 注册日期2003-12-08
  • 最后登录2013-02-27
  • 粉丝11
  • 关注0
  • 积分712分
  • 威望1052点
  • 贡献值1点
  • 好评度57点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-04-15 15:40
不行!mapfile 就不能搞定。
zzbwang
驱动牛犊
驱动牛犊
  • 注册日期2009-03-18
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分62分
  • 威望611点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
地板#
发布于:2009-04-15 17:57
引用第2楼qianjunhua于2009-04-15 15:40发表的  :
不行!mapfile 就不能搞定。


为什么不能搞定mapfile?我的驱动只处理cached io,文件驱动把文件内容从磁盘读进内存的时候都是Paging IO,所以我的驱动不会处理,缓冲里的数据都是密文。我的驱动在每次读写的时候判断发起IO的进程,如果是允许的进程,就解密,把明文返回。否则就不解密。所以加解密在用户进程和缓冲管理器CM之间交换数据的时候才会发生。如果采用MAPFILE,虽然受控进程和非受控进程之间能共享文件,但是共享的内容是加密过的,这是因为文件映射是CM实现的。

能不能说一下你的考虑?
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
地下室#
发布于:2009-04-16 01:01
Memory mapped file is using VMM not CM
wesley2005
驱动牛犊
驱动牛犊
  • 注册日期2007-06-16
  • 最后登录2011-03-29
  • 粉丝1
  • 关注0
  • 积分34分
  • 威望327点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-04-23 15:18
双缓冲
游客

返回顶部