原创博客,来自:http://blog.csdn.net/u010147522/article/details/74068534
问题的症状是莫名死机,中断产生后,可能第一百次,可能第两百多次。
但只要你实验的足够久,注定某一次就死机了,完全卡死,没有蓝屏信息,就是电脑卡死。
怀疑了分页内存的问题,当然,中断处理函数不能够指定放在分页内存中。因为可能会导致蓝屏,并且还有可能导致驱动安装过后需要重启电脑才能正确使用硬件的问题。
最后经过排查发现,死机的原因是在中断处理函数中调用KeSetEvent导致。
Windows XP上这么做是不会出问题的,但是在Windows 7 64位操作系统上,必挂! Win7 32位没有试过。
怎么解决呢?
将此类函数放在中断延迟调用函数里,也就是DPC函数中。不要直接在中断ISR函数中直接调用。
至于原因,网上没有找到具体的描述,个人猜测是WDF驱动模型更加规范的编写要求吧。ISR函数中本不该做这些事情,ISR中要做好判断中断,如果是就清中断就好。也可能是在调用KeSetEvent的时候IRQL提升有关。