阅读:1027回复:7
关于irql的问题
ntddk的帮组文件中强调了一些函数须在特定的irql下才可以用,我想问的是不同的驱动是不是采用不同的irql级别,不会有高的级别出现。
|
|
|
沙发#
发布于:2003-02-28 10:40
在同一个驱动中不同的例程就有可能运行在不同的irql level上
|
|
|
板凳#
发布于:2003-02-28 11:02
正像楼上那位说的,不仅不同的驱动程序会提升和降低IRQL,在某一驱动程序中也时常发生提升和降低IRQL的情况,例如硬件中断。
可以通过KeGetCurrentIrql来观看当前的IRQL。 |
|
地板#
发布于:2003-02-28 12:43
那么我怎样才能过保证我调用的ddk库函数是在正确的irql level下运行的呢?
|
|
|
地下室#
发布于:2003-02-28 13:13
那么我怎样才能过保证我调用的ddk库函数是在正确的irql level下运行的呢? 了解大多数通用例程的irql 运用函数的时候在ddk中查询该函数的指定irql |
|
|
5楼#
发布于:2003-03-02 18:37
谢谢楼上。
那我如何给我自己写的函数指定一个合适的irql level呢。 |
|
|
6楼#
发布于:2003-03-02 21:31
可以使用如下一些函数来完成IRQL的提升和下降等操作。(摘自MSDN)
KeRaiseIrql Raises the hardware priority to a given IRQL value, thereby masking off interrupts of equivalent or lower IRQL on the current processor. KeRaiseIrqlToDpcLevel Raises the hardware priority to IRQL DISPATCH_LEVEL, thereby masking off interrupts of equivalent or lower IRQL on the current processor. KeLowerIrql Restores the IRQL on the current processor to its original value. KeGetCurrentIrql Returns the current hardware priority IRQL value. |
|
7楼#
发布于:2003-03-02 23:05
Oney的书里有这么一句:绝大多数时候不用去管IRQL,因为例程几乎总是会自己在正确的IRQL上运行
我的理解几乎不用管他。是不是啊? |
|
|