调用KeLowerIrql会立即降低到原IRQL吗?
halk 2014-02-11 09:59:00 提升IRQL和降低IRQL的两个函数:
KeRaiseIrql
KeLowerIrql
总是成对出现。我想问的是那么在调用KeLowerIrql时,它是否会像HalEndSystemInterrupt那样检查当前CPU的DPC队列,并逐个执行后,再降低到原IRQL呢?
我在网上没有查到直接的答案。但从原理上猜想,在存在DISPATCH_LEVEL例程要执行的情况下,应该是不能降低到APC_LEVEL或PASSIVE_LEVEL的。从这一点上看,KeRaiseIrql相当于执行了一次软中断,KeLowerIrql就是软中断的返回。如果在KeRaiseIrql后的DISPATCH_LEVEL代码执行期间,有了DIRQL到来并放入了DPC例程,那么在KeLowerIrql中理应检查DPC队列,而不能直接降低IRQL去回到原来的软中断“断点”。
不知是否正确,请指教!