阅读:1748回复:13
SOS ::: 我修改了filemon的程序 出现的问题!!!
我修改了filemon的程序 实现文件保护的功能
case IRP_MJ_WRITE: if( FilterDef.logwrites ) { hookCompletion = LogRecord( TRUE, &seqNum, &dateTime, NULL, \"%s\\tIRP_MJ_WRITE%s\\t&&%s&&\\tOffset: %d Length: %d\", name, (Irp->Flags & IRP_PAGING_IO) || (Irp->Flags & IRP_SYNCHRONOUS_PAGING_IO) ? \'*\' : \' \', fullPathName, currentIrpStack->Parameters.Write.ByteOffset.LowPart, currentIrpStack->Parameters.Write.Length ); } //以下是添加的代码:(拒绝 对E;\\1.txt的写入请求) if(memcmp(fullPathName,\"E:\\\\1.txt\",8)==0) { isWrite=TRUE; Irp->IoStatus.Status=STATUS_ACCESS_DENIED; Irp->IoStatus.Information=0; IoCompleteRequest(Irp,IO_NO_INCREMENT); return STATUS_ACCESS_DENIED; } break; /////////////////////////////////////// 可是载重新加载之后 ,出现蓝屏!!! 报错KMODE_EXCEPTION_NOT_HANDLED(0X1E), 我添加的代码 对不对啊? |
|
最新喜欢:![]() |
沙发#
发布于:2005-04-27 12:29
fullPathName
看看初始化、空间分配什么的 |
|
板凳#
发布于:2005-04-27 13:41
每次加载都会出现蓝屏吗?单看你这部分代码没有什么问题的,可能是别的地方内存分配的问题。用softice跟踪一下,看看在什么地方出问题的。
|
|
地板#
发布于:2005-04-27 15:16
其他地方什么都没有改阿
那个fullpathname是什么时候赋值的? |
|
地下室#
发布于:2005-04-27 15:21
每次加载都会出现蓝屏吗?单看你这部分代码没有什么问题的,可能是别的地方内存分配的问题。用softice跟踪一下,看看在什么地方出问题的。
--------------------------------------------------------- 我试过了 先运行softice,后运行filemon, 运行了一会儿,调试窗口 就跳出来。 在ntosknrl.exe里停住了!!! |
|
5楼#
发布于:2005-04-27 15:37
能把你那份filemon的源代码(修改前)的给我一份马,我一直找不到
cayman@viton.com.cn thankx |
|
6楼#
发布于:2005-04-27 15:44
还有个问题:
重新编译一次filem.sys,是不是要重启以后才能 加载新的驱动? filemon不能动态 加载和卸载 驱动吗? |
|
7楼#
发布于:2005-04-27 16:26
filemon不需要。
他在启动EXE的时候就把驱动起了。 |
|
8楼#
发布于:2005-04-27 17:17
能把你那份filemon的源代码(修改前)的给我一份马,我一直找不到 偶也想要一份,谢谢。 QiaoRoger@tom.com :D |
|
9楼#
发布于:2005-04-27 17:28
filemon不需要。
他在启动EXE的时候就把驱动起了。 -------------------------------------- 那filemon关闭的时候,驱动有没有卸载阿? 好像载设备管理器里可以看到filemon的驱动, 但是卸载他以后,还是原来的驱动,必须重启才行吧!!! |
|
10楼#
发布于:2005-04-27 22:14
你不能那样做的,filemon是个简单的过滤驱动,你不能直接返回完成irp请求,需要传递到下层驱动去,否则出现蓝屏,
|
|
11楼#
发布于:2005-04-27 22:18
或者该城如下代码就可以了
if(memcmp(fullPathName,\"E:\\\\1.txt\",8)==0) { isWrite=TRUE; Irp->IoStatus.Status=STATUS_SUCCESS; IoCompleteRequest(Irp,IO_NO_INCREMENT); returnSTATUS_SUCCESS; } |
|
12楼#
发布于:2005-04-27 22:29
换成
Irp->IoStatus.Status = STATUS_ACCESS_DENIED; Irp->IoStatus.Information = 0; status = Irp->IoStatus.Status; IoCompleteRequest(Irp, IO_NO_INCREMENT); return status; 居然可以了!! 不知道与我原来的代码 Irp->IoStatus.Status=STATUS_ACCESS_DENIED; Irp->IoStatus.Information=0; IoCompleteRequest(Irp,IO_NO_INCREMENT); return STATUS_ACCESS_DENIED; 有什么本质区别??? 还有个问题没有解决的就是: 重新编译一次filem.sys,但是filemon加载还是编译之前驱动。 必须重新启动机器,才能重新加载新的驱动。 这是为什么???? |
|
13楼#
发布于:2005-04-28 08:20
或者该城如下代码就可以了 为什么不能返回完成?我就是通过返回拒绝达到控制的目的的。 |
|