阅读:5421回复:26
coolice 和 vcmfc先生请进~
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,不过,我还不知道如何设置。非常感谢二位的帮忙!!! |
|
最新喜欢:rhpeng
|
沙发#
发布于:2003-02-11 20:12
处理方式错误,虽然只有一个file,但有三个entry,这两个是.,..,file,所以你必须在是最后一个时,将前一个的nextoffset设置为0就要以了。
|
|
板凳#
发布于:2003-02-11 20:33
特意试了一下,我的方法没有问题。
在test里只有一个file,启动kfilter,文件在资源管理器不见了。 :D |
|
地板#
发布于: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 ); 由于是公司代码,不能完全公开。 |
|
地下室#
发布于:2003-02-11 20:35
最后提示:lists.osr.com上有参考代码,关键字好像是IRP_MJ_DIRECTORY_CONTROL或IRP_MN_XXXXXX这类的,我就是参考那段代码,那段代码没有考虑当文件是链的最后一个时,那段代码有问题。
|
|
5楼#
发布于:2003-02-11 20:36
不需要检查stack->Flags,这部分多余的。
|
|
6楼#
发布于:2003-02-11 21:17
vcmfc这么晚了还在线上啊,感动 :)
你提到的三个entry,是非根目录的情况,如果是根目录,则只返回一个entry,其他部分处理抖没有问题,就是根目录无法处理 |
|
|
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. 我觉得这个方法最好,什么都不用做 |
|
8楼#
发布于:2003-02-12 10:43
不好办,我的盘都满满文件,有机会再试一下。
|
|
9楼#
发布于:2003-02-12 16:25
vcmfc,有办法测试根目录的,建一个临时文件夹,把其他文件夹暂时移进去,就可以了
coolice:我正准备试一试,有问题的话还要随时找您帮忙啊。 |
|
|
10楼#
发布于:2003-02-13 00:42
用你的方法,测试一下。
的确发现我的程序里有一个大大的BUG。 不过也再次证实我的方法是对的。 根目录下存在两个必有的目录: \\recycled \\System Volume Information 再加上我的测试MM共三个。 这里有一个小心点,就是处理文件名的地方,我就是这里发生BUG,现改正。 |
|
11楼#
发布于:2003-02-13 00:44
重新编排我的方法:
do { if 是根目录吗?= 是 //根目录路径处理 else //非根目录路径处理 //处理文件名 //检查该操作是否需要隐藏处理 offset = pDirInfo->NextEntryOffset; if(offset != 0) { //正常处理 else { //当最后一个文件需要隐藏,需要特殊处理 } } while( offset != 0 ); |
|
12楼#
发布于:2003-02-13 00:45
从中发觉你跟踪不过认真。多用点心。 |
|
13楼#
发布于:2003-02-13 08:59
vcmfc先生,咱们QQ上说吧,我的QQ是9006476
|
|
|
14楼#
发布于:2003-02-13 10:14
\\recycled
\\System Volume Information 两个目录都不是必然存在的 |
|
15楼#
发布于:2003-02-13 10:15
特别是移动盘
|
|
16楼#
发布于:2003-02-13 10:16
coolice说得对,那两个文件夹不是一定存在的
|
|
|
17楼#
发布于:2003-02-13 11:16
Coolice先生,有些疑问,向你请教,我们QQ上说吧,我的QQ是9006476,你加我吧
|
|
|
18楼#
发布于:2003-02-13 11:45
对于移动硬盘,可能是有特殊的地方吧!,我再测试一下。
又得找个U盘,痛苦中。。。。。 |
|
19楼#
发布于:2003-02-13 11:47
QQ:15453072
证谁请说是IFS FILTER 开发. |
|
上一页
下一页