我调试一个miniport的driver. 在中断的处理函数中设断点,发现eflag的IF位总是1. 这说明中断处理程序运行的时候,cpu是可以响应先的中断请求的. 我们知道CPU从中断门进入中断时候intel x86,架构cpu是会自动的将IF设为0的. 因此windows的miniport的中断处理程序此时IF设为1,应该是windows内核的底程中断处理函数里面就将IF手动设为了1.这样也可以理解,因为<<windows internals>>里面提到过,windows是通过软件实现中断优先级,所以可以假设在windows中,中断处理程序运行时IF总是1,如果有先中断到来,底程内核代码会去判断现在中断优先级,而决定是否当前的routine能否被打断.这个是我的理解.
但是我突然想到一个问题,当我们用windbg去调试目标机的时候,可能为了支持windbg调试目标机,目标机的IF才总设为1,不然WINDBG不可以使目标机突然停止什么的.所以从windbg中看到的目标机的IF标志的值,不一定就是真实情况运行时候的.我不知道到底是怎么情况.问高人讲解一下.
|