中断处理程序中输出调试信息导致无法计算机无法启动
BOOLEAN OnInterrupt(PKINTERRUPT InterruptObject, PDEVICE_EXTENSION pExtension)
{ // OnInterrupt
DisableInterrupt(pExtension);
KdPrint(("==============interrupt!!!\n"));
IoRequestDpc(pExtension->fdo, NULL, pExtension);
EnableInterrupt(pExtension);
return TRUE;
}
上面这段代码是WDM的中断处理例程,在第二行输出了一句调试信息。但是有时候在电脑启动时崩溃。原因在于KdPrint函数有优先级的限制,详细见https://msdn.microsoft.com/en-us/library/windows/hardware/ff543632(v=vs.85).aspx。
KdPrint函数的优先级 IRQL>DIRQL,所以将KdPrint((“==============interrupt!!!\n”));改为
KIRQL irql;
irql = KeGetCurrentIrql();
if (irql <= DISPATCH_LEVEL)
KdPrint(("==============interrupt!!!\n"));
就不会有问题了。