klency
驱动牛犊
驱动牛犊
  • 注册日期2007-12-12
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分119分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
阅读:3620回复:8

新手起步,求助minifilter文件隐藏驱动问题

楼主#
更多 发布于:2008-03-05 11:26
我是才开始学文件驱动的新人。现在我想做一个minifilter的隐藏文件夹或者文件的驱动。效果希望能做到隐藏所有盘下指定名称的文件或文件夹。

我用的环境是XP SP2+2003IFSDDK SP1+VS2005。利用Dbgview进行调试。

打算用SWAPBUFFERS的代码框架,我看了大家的帖子之后说处理IRP_MJ_DIRECTORY_CONTROL就可以了,然后我打算重写SwapPostDirCtrlBuffers这个函数

其中用到这样一个判断

if (FLT_IS_SYSTEM_BUFFER (Data) ||FlagOn(Data->Flags,FLTFL_CALLBACK_DATA_FAST_IO_OPERATION))

我觉得Data做为SwapPostDirCtrlBuffers的输入,这个判断应该为TRUE,不过这个判断始终是FALSE

问下各位大牛,老牛,特别牛,这个有什么问题么?这个条件为FALSE之后我就得不到可用BUF的地址了,下面就没法做了。[
还是菜鸟,总有一天不是的~~~~~~~~~
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-03-05 15:46
为什么要做上面的判断?

IRP_MJ_DIRECTORY_CONTROL is an IRP-based operation.  -- WDK  应该不是fastio,没试  可以自己试试  应该这里不对吧。



if(Data->IoStatus.Status != STATUS_SUCCESS)
         return  *****;

if (Data->Iopb->Parameters.DirectoryControl.QueryDirectory.MdlAddress != NULL)
            pBuffer = MmGetSystemAddressForMdlSafe(
                        Data->Iopb->Parameters.DirectoryControl.QueryDirectory.MdlAddress, NormalPagePriority);
        else
            pBuffer = Data->Iopb->Parameters.DirectoryControl.QueryDirectory.DirectoryBuffer;

pBuffer != NULL
klency
驱动牛犊
驱动牛犊
  • 注册日期2007-12-12
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分119分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-03-05 16:33
谢谢楼上,你说的那个判断我也做了的,我在学的时候写那里不知道怎么做,GOOGLE上看见有人说应该有这个判断,我就加上了
刚才我也查了下IFSDDK的帮助文档,在MINIFILTER下的那个DATA的FLAG应该强制不能是SYSTEM_BUFFER的,我现在试下你说的这种
还是菜鸟,总有一天不是的~~~~~~~~~
klency
驱动牛犊
驱动牛犊
  • 注册日期2007-12-12
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分119分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-03-05 16:45
我刚才去掉那个判断,然后系统就蓝掉了,我把代码贴出来帮忙看一下可以不?
还是菜鸟,总有一天不是的~~~~~~~~~
klency
驱动牛犊
驱动牛犊
  • 注册日期2007-12-12
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分119分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-03-05 16:51
zzzxasdghghjkhjgffsds
还是菜鸟,总有一天不是的~~~~~~~~~
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-03-05 19:44
1.FltGetFileNameInformation used in PreOperation should be better,
and send it to postoperation by CompletionContext.

以前我调试隐藏文件的时候很容易出现内存引用错误的问题,推荐最好用Windbg跟一下。

对于单文件查询,正好遇到是需要隐藏的文件,采用你这种方式可能不太好。
klency
驱动牛犊
驱动牛犊
  • 注册日期2007-12-12
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分119分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-03-06 12:01
我现在短期目标是想隐藏掉每个盘下的一个指定文件夹,但是现在就是在上面提到的那个判断始终过不了,去掉那个判断又会蓝,请问楼上的大哥策略是怎么样的吗?
还是菜鸟,总有一天不是的~~~~~~~~~
jl2004
驱动小牛
驱动小牛
  • 注册日期2007-04-10
  • 最后登录2011-02-22
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望276点
  • 贡献值0点
  • 好评度129点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-10-07 10:17
书上说:在后操作中对操作参数的任何改变都不会被过滤管理所承认,
你要隐藏文件,就得对Iostatus进行修改,那这个改动不被过滤管理所承认,
这是又是如何处理?
向前,向前,向前....
livers
驱动牛犊
驱动牛犊
  • 注册日期2012-01-06
  • 最后登录2012-07-23
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2012-01-09 14:17
  什么东西
1111
游客

返回顶部