阅读:1831回复:7
怎么和用户交互来阻断TDI_EVENT_CONNECT?
请达人帮帮忙,目前碰到一个困难,,就是对于截获到的事件回调函数tdi_event_connect,里面的IRQL==DPC级别,不能在里面直接调用KeWaitForSingleObject,等待用户的决定,谁能帮忙给个建议吗??小弟感激不尽啊。。
|
|
沙发#
发布于:2007-07-25 09:08
可以使用一个bool 变量flag 。若flag为0时,循环等待,如下:
while( !flag ) {}//不做任何事情 初始值flag 为false, 当跟应用层交互后,再根据具体情况设置 |
|
板凳#
发布于:2007-07-26 17:20
不行啊,刘兄,我试过了,这样的话,就无法和用户交互了,程序好像一直处在判断标志变量flag是不为0上,机子动都动不了拉。。
|
|
地板#
发布于:2007-07-27 15:24
我找到了一种办法可以解决,但是运行久了就要因IRQL过高而蓝屏
|
|
地下室#
发布于:2007-07-27 23:00
能否先将该IRP插入到一个队列中,然后在一个自己启动的系统线程中读该IRP并等待用户交互事件,在回调函数tdi_event_connect中马上返回IO_PENDING.
|
|
5楼#
发布于:2007-08-08 14:58
引用第1楼liuguidong123于2007-07-25 09:08发表的 : 无敌了。。。 |
|
|
6楼#
发布于:2007-08-08 15:05
以前做过,不大记得了。在EventConnect中,是不能直接等待和Pending的,因为IRQL非常高,而且没有STATUS_PENDING的返回值。要做等待之类的,必须先返回STATUS_MORE_PROCESSING_REQUIRED,然后再特定时候再调用它的被HOOK的原函数。大概是这样子做,不过你还要做一些特别的处理。
|
|
|
7楼#
发布于:2007-08-12 18:42
proplayboy大哥好。很感谢你的答复。不过我还是不太明白。大哥能说清楚点吗。我现在很急,一直BSOD----高IRQL访问分页内存,但出错的不是我的驱动,而是底层的什么驱动,弄的我很恼火,都查不出是哪行代码出错了。能帮帮我吗,proplayboy大哥,我能加你的QQ吗??
|
|