tjm
tjm
驱动小牛
驱动小牛
  • 注册日期2002-05-18
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3308回复:7

如何改变IRQL级别?

楼主#
更多 发布于:2002-12-31 00:24
我有一个DRIVER,要用某个只能在PASSIV级使用的函数,调用的环境确实DISPATCH级,由于这段代码要频繁调用,所以我不想用系统线程。请问有没有办法临时改变(降低然后提升)IRQL?
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-31 09:14

可以在当前处理器上临时提升IRQL,然后再降回到原来的IRQL
KIRQL oldirql;
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
KeRaiseIrql(DISPATCH_LEVEL, &oldirql);
...
KeLowerIrql(oldirql);
希望这次不错了!
生命驱动,活力无限!
kernel_kernel
驱动小牛
驱动小牛
  • 注册日期2002-12-08
  • 最后登录2009-02-06
  • 粉丝0
  • 关注0
  • 积分435分
  • 威望51点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-31 09:33

可以在当前处理器上临时提升IRQL,然后再降回到原来的IRQL
KIRQL oldirql;
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
KeRaiseIrql(DISPATCH_LEVEL, &oldirql);
...
KeLowerIrql(oldirql);
希望这次不错了!
 


 :D :D
呵呵,又错了,别人要先降低再升高
alexe_chen
驱动小牛
驱动小牛
  • 注册日期2002-03-21
  • 最后登录2006-07-31
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-02 17:30
不知道解决没有?我以前也遇到类似问题,最后只好用系统线程了事!如果有新方法!请告诉我 :P
好好学习,天天向上...
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-02 18:48
可以用dpc
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-01-05 06:37
不能在当前线程上先降低在提高。

只能先提高再降低。

你的函数如果真的被执行的足够频繁,以至于影响应用,就不要调用pasive上的函数。

dpc不行,因为它只能把优先级降到dispatch上。

对于你的要求,如果性能还能满足,系统线程也可以。queue workitem也可以。不过,使用良好的fire and wait机制,系统先成不慢的。看程序怎么写了。

tjm
tjm
驱动小牛
驱动小牛
  • 注册日期2002-05-18
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-07 03:10
谢谢!
我主要是要用ZWxxxx函数与另一个DRIVER通信。我总觉得系统线程要等待一个EVENT,所以觉得它可能会慢一点。所以想直接把IRQL降低了。
另外不知用GetObjectPointer()(好象是这个服务),获取DRIVER的DEVICEOBJECT之后,发送IRP是不是快一些?
Leopard
驱动老牛
驱动老牛
  • 注册日期2001-07-13
  • 最后登录2021-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望53点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
  • 忠实会员
7楼#
发布于:2003-01-16 11:06
不知解决没有?我也想知道,关注!
游客

返回顶部