阅读:1459回复:9
对文件过滤驱动感兴趣的朋友请进~
我现在正在做一个文件过滤驱动,目前能对文件的读写操作进行控制,但我想实现一个交互功能,当受保护文件被读写时,请求被挂起,交给用户进行选择处理,然后根据用户的选择再返回驱动层继续对该请求进行相应的处理。怎样才能实现请求的挂起呢?请高手赐教,谢谢!
|
|
最新喜欢:![]() |
沙发#
发布于:2002-06-21 08:55
[quote]不用的啊!你拦截每一个盘的创建请求,就是IRP_mj_create然后得到请求文件名,判断,之后就是修改FILE_object的标志就可以了 guardee兄,怎么修改标志啊?能详细说说吗? [/quote] 在file_OBJECT里面有一些标志的啊!在结构里面主要观察这些成员,试试修改,特别是在IRP堆栈里面的一个成员关于是那个成员,自己试试看吧!反正是和_rp_mj_create有关的 PVOID PrivateCacheMap; NTSTATUS FinalStatus; struct _FILE_OBJECT *RelatedFileObject; BOOLEAN LockOperation; BOOLEAN DeletePending; BOOLEAN ReadAccess; BOOLEAN WriteAccess; BOOLEAN DeleteAccess; BOOLEAN SharedRead; BOOLEAN SharedWrite; BOOLEAN SharedDelete; ULONG Flags; |
|
板凳#
发布于:2002-06-21 00:47
我建议你这样做: 谢谢版主热情的帮助我,我有一点还不明白,驱动层怎样通知应用层进行处理?它是怎样将共享Event传到应用层的呢?能贴一些相关的代码吗? |
|
地板#
发布于:2002-06-20 16:54
不用的啊!你拦截每一个盘的创建请求,就是IRP_mj_create然后得到请求文件名,判断,之后就是修改FILE_object的标志就可以了 guardee兄,怎么修改标志啊?能详细说说吗? |
|
|
地下室#
发布于:2002-06-20 16:44
1、怎样在驱动层和应用层共享事件呢?是不是在驱动层KeInitializeEvent之后,这个Event能在应用层直接使用呢?反之也一样呢? 我建议你这样做: 1.在应用程序层创建EVENT CreateEvent() 2.通过DeviceIoControl将事件句柄传给驱动程序 3.驱动程序在Dispatch例程中通过ObReferenceObjectByHandle将事件句柄转化为驱动程序可用的指针 4.在IRP_MJ_CLOSE中,调用ObDereferenceObject释放对事件对象的应用。 |
|
|
5楼#
发布于:2002-06-20 14:45
不用的啊!你拦截每一个盘的创建请求,就是IRP_mj_create然后得到请求文件名,判断,之后就是修改FILE_object的标志就可以了
|
|
6楼#
发布于:2002-06-20 13:37
循环等待即可。 谢谢,我还有一个问题: 1、怎样在驱动层和应用层共享事件呢?是不是在驱动层KeInitializeEvent之后,这个Event能在应用层直接使用呢?反之也一样呢? |
|
7楼#
发布于:2002-06-20 09:35
循环等待即可。
1.建立共享内存以交换数据 2.建立两个共享事件,一个用来通知应用程序被保护文件被触发,应用程序需要给出应答,把答案放在共享内存中。并置另一个共享事件,以通知应用程序已经作出应答,答案在共享内存中。 3.驱动程序然后到共享内存中去寻找答案,如果是肯定,则驱动程序执行此操作,否则失败此操作。 相关源代码如下: LARGE_INTEGER timeout; NTSTATUS status; timeout.QuadPart = -5*10000000; //设5 秒超时。 if( Protect File ) { 写访问信息到共享内存,以使应用程序知道哪个文件触发了什么操作; KeSetEvent( Event1, 0, FALSE );//通知应用程序 status = KeWaitSingleObject( Event2,Executive, KernelMode, FALSE, &timeout) switch( status ) { case STATUS_SUCCESS: //应用程序作出了回答 查看共享内存获得应用程序的答案信息,作出反应; break; default: 应用程序没有应答或超时,按否定处理; break; } } |
|
|
8楼#
发布于:2002-06-20 09:27
如果是9x,这是一个不可能的任务,别浪费时间了。。。
如果是2000,是可以的 |
|
|
9楼#
发布于:2002-06-20 02:39
我现在正在做一个文件过滤驱动,目前能对文件的读写操作进行控制,但我想实现一个交互功能,当受保护文件被读写时,请求被挂起,交给用户进行选择处理,然后根据用户的选择再返回驱动层继续对该请求进行相应的处理。怎样才能实现请求的挂起呢?请高手赐教,谢谢! \"怎样才能实现请求的挂起呢?\" 返回pending。。。。。。。。。。。。 :) |
|
|