阅读:1674回复:9
从DDK帮助中复制了一份SFILTER代码 可是create处理中加入任何代码都不能被执行
原来没有这样的情况的
这次调程序 想在sfilter基础上做记事本监控 可是在SfCreate中加入的任何操作都不能被执行 经过调试发现 无论我怎么写都不被执行 下面是Sfilter中部分代码 下面这个if语句一直为真 我在系统里面新建删除复制打开 甚至安装OFFICE 所以这个模块一直就是IoSkipCuurentIrpStackLocation 下面的WINDBG语句永远不执行 if (!FlagOn( SfDebug, SFDEBUG_DO_CREATE_COMPLETION | SFDEBUG_GET_CREATE_NAMES| SFDEBUG_DISPLAY_CREATE_NAMES )) { DbgPrint("\n进入 CREATE系统荣操作被放过 处理\n"); // // Don't put us on the stack then call the next driver // IoSkipCurrentIrpStackLocation( Irp ); return IoCallDriver( ((PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension)->AttachedToDeviceObject, Irp ); } else { KEVENT waitEvent; DbgPrint("\n进入 CREATE正式 处理\n"); // // Initialize an event to wait for the completion routine to occur // 有没有哪位大侠知道这是为什么啊 |
|
|
沙发#
发布于:2008-10-11 11:29
if (!FlagOn( SfDebug, SFDEBUG_DO_CREATE_COMPLETION |
SFDEBUG_GET_CREATE_NAMES| SFDEBUG_DISPLAY_CREATE_NAMES )) 这条语句 在什么时候为永真 在线等大侠回复 |
|
|
板凳#
发布于:2008-10-11 14:04
FlagOn 就定义在你源码里了。你自己看下不就知道~晕
SfDebug初始化值是0,如果你不改这条语句永远都不会是真~ |
|
地板#
发布于:2008-10-11 22:31
Re:从DDK帮助中复制了一份SFILTER代码 可是create处理中加入任何代码都不能
ULONG SfDebug = 0;这条没错啊 我直接复制的sfilter微软例子文件啊 原来调就不会这样 有一个月没搞了 现在怎么调都不行 从WinDbg显示的消息来看 这个FlagOn判断式永远为真 我就觉得很奇怪 所有IRP都不经过SfCreateComlete模块 |
|
|
地下室#
发布于:2008-10-12 14:04
看一下启动顺序,调试一下看收到的设备对象是不是都是你程序的设备对象。是的话就被返回了。
|
|
5楼#
发布于:2008-10-12 19:49
Re:从DDK帮助中复制了一份SFILTER代码 可是create处理中加入任何代码都不能
麻烦能不能说具体些 真的没明白是怎么回事启动顺序指得什么 为什么收到的会全是我的设备对象 小弟真的很是抑郁。。。。。。。。谢谢你了 |
|
|
6楼#
发布于:2008-10-16 10:01
在driverentry最后加入
SetFlag(SfDebug,SFDEBUG_DO_CREATE_COMPLETION); SetFlag(SfDebug,SFDEBUG_GET_CREATE_NAMES); SetFlag(SfDebug,SFDEBUG_DISPLAY_CREATE_NAMES); |
|
7楼#
发布于:2008-10-16 18:03
Re:从DDK帮助中复制了一份SFILTER代码 可是create处理中加入任何代码都不能
真的很谢谢你 这样就OK了可这是为什么呢 |
|
|
8楼#
发布于:2008-10-16 20:33
看一下SfDebug 的定义,和它怎样用就明白了.
sfilter中靠bit来控制哪些消息要打印 |
|
|
9楼#
发布于:2008-10-16 20:47
Re:从DDK帮助中复制了一份SFILTER代码 可是create处理中加入任何代码都不能
好的 谢谢了 小弟实在是鄙陋的紧 |
|
|