Thkr_dev
驱动牛犊
驱动牛犊
  • 注册日期2002-12-14
  • 最后登录2002-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1657回复:8

请教,如何在DISPATCH_LEVEL级等待用户下发命令?

楼主#
更多 发布于:2002-12-14 19:12

我想在DISPATCH_LEVEL级等待用户下发命令
而 在 DISPATCH_LEVEL 级,KeWaitFor....的超时必须设为0,而KeDelayExecutionThread函数不允许使用,其它的延时等待方法好像也不可行。。。

因为在DISPATCH_LEVEL级纯粹的进行死循环会让连鼠标都没有反应,也就是我没有办法在DISPATCH_LEVEL级阻赛线程来等待用户下发命令?

请问有没有解决办法?谢谢!


[编辑 -  12/15/02 by  Thkr_dev]
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-12-16 08:40
非要在DISPATCH_LEVEL等吗?不能在PASSIVE_LEVEL下?
你试试用TIMER轮询事件,也许可以
易水
Thkr_dev
驱动牛犊
驱动牛犊
  • 注册日期2002-12-14
  • 最后登录2002-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-16 19:24
多谢楼上,我试试

嗯,降低到PASSIVE_LEVEL 再用KeWait...就会蓝屏错误
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-12-19 08:40
蓝屏?是不是EVENT对象的问题啊?
易水
Thkr_dev
驱动牛犊
驱动牛犊
  • 注册日期2002-12-14
  • 最后登录2002-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-20 20:24
嗯,是这个错误,但是不知道该怎么解决???
具体就是:如果我降低Irql来进行延时或WaitEvent的时候都会出现0x000000B8错误,
// MessageId: ATTEMPTED_SWITCH_FROM_DPC
//
// MessageText:
//
//  A wait operation, attach process, or yield was attempted from a DPC routine.
//
#define ATTEMPTED_SWITCH_FROM_DPC        ((ULONG)0x000000B8L)

[编辑 -  12/20/02 by  Thkr_dev]
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-12-22 00:58
好象在DPC中是不该改变IRQL的。
你可以建一个PASSIVE_LEVEL的线程等待事件,事件设置后将某个内存变量改变状态再从DPC中访问该内存变量
易水
Thkr_dev
驱动牛犊
驱动牛犊
  • 注册日期2002-12-14
  • 最后登录2002-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-22 20:16
谢谢楼上的再次回答,非常感谢

那我现在要阻塞住那个DPC线程让他停在那里等候我的命令该怎么做呢?嗯,我先去查查资料看,再次感谢:)
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-12-22 20:44
我觉得你可以结束掉它然后等待事件,事件发生后再建一个DPC
易水
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-24 09:57

为什么需要在DISPATCH_LEVEL等待呢?
你可以建立一个线程在  PASSIVE_LEVEL 等待。
然后再 KeRaiseIrql 就可以了。
如果你必须在 DISPATCH_LEVEL 开始的话,
就调用 IoQueueWorkItem 吧。
游客

返回顶部