阅读:3308回复:7
如何改变IRQL级别?
我有一个DRIVER,要用某个只能在PASSIV级使用的函数,调用的环境确实DISPATCH级,由于这段代码要频繁调用,所以我不想用系统线程。请问有没有办法临时改变(降低然后提升)IRQL?
|
|
沙发#
发布于:2002-12-31 09:14
可以在当前处理器上临时提升IRQL,然后再降回到原来的IRQL KIRQL oldirql; ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL); KeRaiseIrql(DISPATCH_LEVEL, &oldirql); ... KeLowerIrql(oldirql); 希望这次不错了! |
|
|
板凳#
发布于:2002-12-31 09:33
:D :D 呵呵,又错了,别人要先降低再升高 |
|
地板#
发布于:2003-01-02 17:30
不知道解决没有?我以前也遇到类似问题,最后只好用系统线程了事!如果有新方法!请告诉我 :P
|
|
|
地下室#
发布于:2003-01-02 18:48
可以用dpc
|
|
|
5楼#
发布于:2003-01-05 06:37
不能在当前线程上先降低在提高。
只能先提高再降低。 你的函数如果真的被执行的足够频繁,以至于影响应用,就不要调用pasive上的函数。 dpc不行,因为它只能把优先级降到dispatch上。 对于你的要求,如果性能还能满足,系统线程也可以。queue workitem也可以。不过,使用良好的fire and wait机制,系统先成不慢的。看程序怎么写了。 |
|
6楼#
发布于:2003-01-07 03:10
谢谢!
我主要是要用ZWxxxx函数与另一个DRIVER通信。我总觉得系统线程要等待一个EVENT,所以觉得它可能会慢一点。所以想直接把IRQL降低了。 另外不知用GetObjectPointer()(好象是这个服务),获取DRIVER的DEVICEOBJECT之后,发送IRP是不是快一些? |
|
7楼#
发布于:2003-01-16 11:06
不知解决没有?我也想知道,关注!
|
|