youngwinter
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分363分
  • 威望39点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
阅读:1454回复:6

请教大牛,文件过滤驱动能否在读写时区分不同进程?

楼主#
更多 发布于:2007-03-13 21:20
  利用文件过滤驱动做文件加密,在读写文件时,根据进程进行判别,允许某些进程读取时解密,而其他进程读取时不解密,反过来写的时候也一样。这个有可能做到吗?
我试试发现读写时简单通过PsGetCurrentProcess()取得的经常是System,不可行。
文件全路径可以通过在Create的时候缓存FileObject->FsContext和文件全路径,在读写时进行检索,我在想是否可以用类似的思路解决读写时识别进程的问题,但不知道使用哪个变量可以进行关联,FileObject->FsContext2可以吗?请有经验的大牛指教。
youngwinter
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分363分
  • 威望39点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-13 21:31
仔细想了一下,因为CacheManager的存在,这样的功能恐怕实现不了,如果退一步的话,对于非指定的进程,把他们的读写IRP都返回失败,是不是应该可以做到?
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
板凳#
发布于:2007-03-13 21:46
可以在filter驱动中得到进程块及进程路径
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-14 06:16
almost in most cases...
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
youngwinter
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分363分
  • 威望39点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-14 08:56
引用第2楼znsoft2007-03-13 21:46发表的“”:
可以在filter驱动中得到进程块及进程路径

How?请大牛指点一下。PsGetCurrentProcess()好像不行。我只要进程名就行啦,进程全路径拿起来很麻烦,倒是没有必要。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-03-14 10:19
引用第4楼youngwinter2007-03-14 10:56发表的“”:

How?请大牛指点一下。PsGetCurrentProcess()好像不行。我只要进程名就行啦,进程全路径拿起来很麻烦,倒是没有必要。


去kernel版搜索一下,会出来一大堆,还有源代码可以拿~~
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
6楼#
发布于:2007-03-14 13:30
对于Filter,你在分发函数里面获得的进程就是发起这个IRP的进程,比如一个应用程序CreateFile,到你的CreateDispatch里面,然后PsGetXXX获得的就是应用程序的进程.如果是在内核线程中ZwCreateFile,那这个时候的IRP通常也会到CreateDispatch中,进程就变成System了.
进程名:

ULONG    ProcessNameOffset = 0x1fc;

#define GetCurrentProcessName() ( \
    (PUCHAR) PsGetCurrentProcess() + ProcessNameOffset \
)
商务MSN:YanDong_8212@163.com
游客

返回顶部