首页
社区
课程
招聘
我晕,关于sfilter做文件夹保护的问题
发表于: 2011-12-6 12:54 6039

我晕,关于sfilter做文件夹保护的问题

2011-12-6 12:54
6039
我在sfilter处理IRP_MJ_CREATE的函数sfcreate中,直接对 FILE_CREATE ||  FILE_OPEN_IF || FILE_OVERWRITE||FILE_OVERWRITE_IF这些操作返回了STATUS_ACCESS_DENIED

但是令人蛋疼的事情发生了,这样做太坑爹了,至少有以下几个问题。。
1.右键新建新建文本文档的时候,提示文件已经存在,但是确一下子新建了1000个文件。。。
2.新建的那些文件有些能删除,有些不能删除,有些提示拒绝访问,有些能访问。。。。。
3.有时候已经存在的文件没被保护,有时候又被保护。。。

还有那些不可爱的打开失败消息,怎样屏蔽

怎样做个比较不是demo级别的文件夹保护呢,返回值是不是有讲究?或者对不同的操作都有不同的处理

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 12
活跃值: (773)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
还有我已经将驱动unload了,怎么还是有保护。。
2011-12-6 12:59
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
首先.不推荐使用IoCancelFileOpen这个函数在CALL FileSystem后取消一个IRP。
我估计你的拦截位置肯定在IoCallDriver之后。也就是已经调用完文件系统了。
解决的办法也就是你流程的问题。
不应该在成功调用完文件系统后再失败一个请求,应该在此之前。
Ps:
     文件夹的保护不一定要处理IRP_MJ_CREATE (至少在DEMO例子里可以这样说)。你完成可以针对文件夹属性本身下手
2011-12-6 16:56
0
雪    币: 12
活跃值: (773)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
多谢大牛提点,确实是流程问题,新手初学,原来这里这么讲究哈,对文件夹属性下手?那是什么,IRP_MJ_DIRECTORY_CONTROL?
2011-12-7 09:32
0
雪    币: 1149
活跃值: (908)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
5
汗 ...两个贴 都是你的》。。。。取消文件创建例程,是在文件创建完成之后,就是 你的完成函数返回之时....最好放在 创建前处理,因为,文件的创建 不仅仅是 你下发的过程,还有文件对象的管理以及创建..

我要分》》》》快给 ,上班去了......哈哈
2011-12-7 09:36
0
雪    币: 12
活跃值: (773)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
是啊哈哈,分肯定会散的,但是文件创建成功后又用IoCancelFileOpen取消创建,这种是在什么情况下使用
2011-12-7 09:40
0
雪    币: 1149
活跃值: (908)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
7
哎 你都不自己动手 ,这样进步 很慢的...
贴一段我的代码吧.....

ps:

if (fileName != NULL) {
RtlInitUnicodeString(&filter_string,PROTECTED);
CreateOptions = ((irpSp->Parameters.Create.Options>>24)&0x000000ff);

if (CreateOptions == FILE_OPEN)//注意标志,如果你创建成功 ,自己手动写得话,也得修正创建标志位。
{
KdPrint(("SFilter!SfCreate: hollyshit !----%wZ\n",&fileName->Name));
if (!RtlCompareUnicodeString(&filter_string,&fileName->Name,TRUE))
{
IoCancelFileOpen(devExt->NLExtHeader.AttachedToDeviceObject,
irpSp->FileObject);//取消 下层 文件对象创建


KdPrint(("SFilter!SfCreate: hollyshit !\n"));
NLFreeNameControl( fileName, &gSfNameBufferLookasideList );
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_ACCESS_DENIED;
}



2011-12-7 11:25
0
雪    币: 1149
活跃值: (908)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
8
我这里只是做了 访问 禁止..其他的你就自己搞....

快洒分....  哈哈
2011-12-7 11:27
0
雪    币: 12
活跃值: (773)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
散了
2011-12-7 12:49
0
雪    币: 134
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼上给力啊,不错。
2013-3-20 09:21
0
游客
登录 | 注册 方可回帖
返回
//