zhangyl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-18
  • 最后登录2009-03-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:5421回复:26

coolice 和 vcmfc先生请进~

楼主#
更多 发布于:2003-02-11 19:32
vcmfc先生的话我没有明白,我发现的情形是这样的:
当第一个IRP_MJ_DIRECTORY_CONTROL和IRP_MN_QUERY_DIRECTORY到达的时候,stack->Flags的值为SL_RETURN_SINGLE_ENTRY,我把它直接往下传了,在我的complete routine里处理,我的complete routine发现只有一个entry被枚举了出来,当发现该entry应该被隐藏时,我把Irp->IoStatus.Information和Irp->UserBuffer设置为NULL,并返回了一个STATUS_NO_SUCH_FILE,结果,该文件夹没有被隐藏,如果不是SL_RETURN_SINGLE_ENTRY的情形,我可以memory move,一般抖没有问题。最主要的问题就是这一个entry无法解决。
我准备采用coolice的方案,不过,coolice的方案中,我觉得应该含有通配符,比如:*.bat之类的,应该对应IRP_MJ_DIRECTORY_CONTROL和IRP_MN_QUERY_DIRECTORY的filename,不过,我还不知道如何设置。非常感谢二位的帮忙!!!

最新喜欢:

rhpengrhpeng
签名是什么?
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-11 20:12
处理方式错误,虽然只有一个file,但有三个entry,这两个是.,..,file,所以你必须在是最后一个时,将前一个的nextoffset设置为0就要以了。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-11 20:33
特意试了一下,我的方法没有问题。

在test里只有一个file,启动kfilter,文件在资源管理器不见了。

 :D
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-11 20:33
再提示:

记住,不要将UserBuffer设置为空,正确做法:

PFILE_BOTH_DIR_INFORMATION pDirInfo = (PFILE_BOTH_DIR_INFORMATION) Irp->UserBuffer;;


接着做提取该链中的每一个文件名,是就将后面的内存移到前面,如果是最后一个,修改前一个的NextOffset。

do
{
//处理路径
//处理文件名
//检查该操作是否需要隐藏处理
offset = pDirInfo->NextEntryOffset;
if(offset != 0)
{
//正常处理
else
{
//当最后一个文件需要隐藏,需要特殊处理
}

} while( offset != 0 );

由于是公司代码,不能完全公开。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-11 20:35
最后提示:lists.osr.com上有参考代码,关键字好像是IRP_MJ_DIRECTORY_CONTROL或IRP_MN_XXXXXX这类的,我就是参考那段代码,那段代码没有考虑当文件是链的最后一个时,那段代码有问题。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-11 20:36
不需要检查stack->Flags,这部分多余的。
zhangyl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-18
  • 最后登录2009-03-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-11 21:17
vcmfc这么晚了还在线上啊,感动 :)

你提到的三个entry,是非根目录的情况,如果是根目录,则只返回一个entry,其他部分处理抖没有问题,就是根目录无法处理
签名是什么?
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-12 09:43
上个帖子的方法试过没:
If you filter out ALL the entries (i.e. there would be no files
returned to the caller), issue IoCallDriver again, with the same IRP.
我觉得这个方法最好,什么都不用做
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-02-12 10:43
不好办,我的盘都满满文件,有机会再试一下。
zhangyl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-18
  • 最后登录2009-03-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-02-12 16:25
vcmfc,有办法测试根目录的,建一个临时文件夹,把其他文件夹暂时移进去,就可以了

coolice:我正准备试一试,有问题的话还要随时找您帮忙啊。
签名是什么?
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-02-13 00:42
用你的方法,测试一下。


的确发现我的程序里有一个大大的BUG。

不过也再次证实我的方法是对的。

根目录下存在两个必有的目录:

\\recycled
\\System Volume Information

再加上我的测试MM共三个。

这里有一个小心点,就是处理文件名的地方,我就是这里发生BUG,现改正。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-02-13 00:44
重新编排我的方法:
do
{
if 是根目录吗?= 是
   //根目录路径处理
else
   //非根目录路径处理

//处理文件名
//检查该操作是否需要隐藏处理
offset = pDirInfo->NextEntryOffset;
if(offset != 0)
{
//正常处理
else
{
//当最后一个文件需要隐藏,需要特殊处理
}

} while( offset != 0 );
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-02-13 00:45


从中发觉你跟踪不过认真。多用点心。
zhangyl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-18
  • 最后登录2009-03-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-02-13 08:59
vcmfc先生,咱们QQ上说吧,我的QQ是9006476
签名是什么?
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-02-13 10:14
\\recycled
\\System Volume Information
两个目录都不是必然存在的
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-02-13 10:15
特别是移动盘
zhangyl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-18
  • 最后登录2009-03-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-02-13 10:16
coolice说得对,那两个文件夹不是一定存在的
签名是什么?
zhangyl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-18
  • 最后登录2009-03-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-02-13 11:16
Coolice先生,有些疑问,向你请教,我们QQ上说吧,我的QQ是9006476,你加我吧
签名是什么?
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-02-13 11:45
对于移动硬盘,可能是有特殊的地方吧!,我再测试一下。


又得找个U盘,痛苦中。。。。。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-02-13 11:47
QQ:15453072


证谁请说是IFS FILTER 开发.
上一页
游客

返回顶部