Engineast
驱动牛犊
驱动牛犊
  • 注册日期2005-03-22
  • 最后登录2005-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1748回复:13

SOS ::: 我修改了filemon的程序 出现的问题!!!

楼主#
更多 发布于:2005-04-27 12:12
我修改了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),

我添加的代码 对不对啊?

最新喜欢:

hongsinghongsi...
zhjie374
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2012-01-17
  • 粉丝2
  • 关注1
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度21点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-27 12:29
fullPathName
看看初始化、空间分配什么的
joshua_yu
驱动小牛
驱动小牛
  • 注册日期2004-12-06
  • 最后登录2010-12-01
  • 粉丝0
  • 关注0
  • 积分428分
  • 威望54点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-27 13:41
每次加载都会出现蓝屏吗?单看你这部分代码没有什么问题的,可能是别的地方内存分配的问题。用softice跟踪一下,看看在什么地方出问题的。
Engineast
驱动牛犊
驱动牛犊
  • 注册日期2005-03-22
  • 最后登录2005-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-27 15:16
其他地方什么都没有改阿

那个fullpathname是什么时候赋值的?
Engineast
驱动牛犊
驱动牛犊
  • 注册日期2005-03-22
  • 最后登录2005-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-27 15:21
每次加载都会出现蓝屏吗?单看你这部分代码没有什么问题的,可能是别的地方内存分配的问题。用softice跟踪一下,看看在什么地方出问题的。

---------------------------------------------------------
我试过了
先运行softice,后运行filemon,
运行了一会儿,调试窗口 就跳出来。
在ntosknrl.exe里停住了!!!
zeaguling
驱动牛犊
驱动牛犊
  • 注册日期2005-03-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分76分
  • 威望10点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-27 15:37
能把你那份filemon的源代码(修改前)的给我一份马,我一直找不到
cayman@viton.com.cn thankx
Engineast
驱动牛犊
驱动牛犊
  • 注册日期2005-03-22
  • 最后登录2005-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-27 15:44
还有个问题:
重新编译一次filem.sys,是不是要重启以后才能 加载新的驱动?

filemon不能动态 加载和卸载 驱动吗?
zhjie374
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2012-01-17
  • 粉丝2
  • 关注1
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度21点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-27 16:26
filemon不需要。

他在启动EXE的时候就把驱动起了。
qiaoroger
驱动牛犊
驱动牛犊
  • 注册日期2005-02-03
  • 最后登录2010-03-22
  • 粉丝0
  • 关注0
  • 积分111分
  • 威望92点
  • 贡献值1点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-04-27 17:17
能把你那份filemon的源代码(修改前)的给我一份马,我一直找不到
cayman@viton.com.cn thankx



偶也想要一份,谢谢。
QiaoRoger@tom.com :D
Engineast
驱动牛犊
驱动牛犊
  • 注册日期2005-03-22
  • 最后登录2005-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-04-27 17:28
filemon不需要。

他在启动EXE的时候就把驱动起了。

--------------------------------------

那filemon关闭的时候,驱动有没有卸载阿?
好像载设备管理器里可以看到filemon的驱动,
但是卸载他以后,还是原来的驱动,必须重启才行吧!!!
flashget2046
驱动牛犊
驱动牛犊
  • 注册日期2005-01-04
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-04-27 22:14
你不能那样做的,filemon是个简单的过滤驱动,你不能直接返回完成irp请求,需要传递到下层驱动去,否则出现蓝屏,
flashget2046
驱动牛犊
驱动牛犊
  • 注册日期2005-01-04
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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;
}
Engineast
驱动牛犊
驱动牛犊
  • 注册日期2005-03-22
  • 最后登录2005-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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加载还是编译之前驱动。
必须重新启动机器,才能重新加载新的驱动。
这是为什么????
joshua_yu
驱动小牛
驱动小牛
  • 注册日期2004-12-06
  • 最后登录2010-12-01
  • 粉丝0
  • 关注0
  • 积分428分
  • 威望54点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-04-28 08:20
或者该城如下代码就可以了
if(memcmp(fullPathName,\"E:\\\\1.txt\",8)==0)
{
isWrite=TRUE;
Irp->IoStatus.Status=STATUS_SUCCESS;
IoCompleteRequest(Irp,IO_NO_INCREMENT);
returnSTATUS_SUCCESS;
}


为什么不能返回完成?我就是通过返回拒绝达到控制的目的的。
游客

返回顶部