阅读:3620回复:8
新手起步,求助minifilter文件隐藏驱动问题
我是才开始学文件驱动的新人。现在我想做一个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的地址了,下面就没法做了。[ |
|
|
沙发#
发布于: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 |
|
板凳#
发布于:2008-03-05 16:33
谢谢楼上,你说的那个判断我也做了的,我在学的时候写那里不知道怎么做,GOOGLE上看见有人说应该有这个判断,我就加上了
刚才我也查了下IFSDDK的帮助文档,在MINIFILTER下的那个DATA的FLAG应该强制不能是SYSTEM_BUFFER的,我现在试下你说的这种 |
|
|
地板#
发布于:2008-03-05 16:45
我刚才去掉那个判断,然后系统就蓝掉了,我把代码贴出来帮忙看一下可以不?
|
|
|
地下室#
发布于:2008-03-05 16:51
zzzxasdghghjkhjgffsds
|
|
|
5楼#
发布于:2008-03-05 19:44
1.FltGetFileNameInformation used in PreOperation should be better,
and send it to postoperation by CompletionContext. 以前我调试隐藏文件的时候很容易出现内存引用错误的问题,推荐最好用Windbg跟一下。 对于单文件查询,正好遇到是需要隐藏的文件,采用你这种方式可能不太好。 |
|
6楼#
发布于:2008-03-06 12:01
我现在短期目标是想隐藏掉每个盘下的一个指定文件夹,但是现在就是在上面提到的那个判断始终过不了,去掉那个判断又会蓝,请问楼上的大哥策略是怎么样的吗?
|
|
|
7楼#
发布于:2008-10-07 10:17
书上说:在后操作中对操作参数的任何改变都不会被过滤管理所承认,
你要隐藏文件,就得对Iostatus进行修改,那这个改动不被过滤管理所承认, 这是又是如何处理? |
|
|
8楼#
发布于:2012-01-09 14:17
什么东西
|
|
|