中断处理程序中输出调试信息导致无法计算机无法启动

来源:互联网 发布:人工智能高清在线观看 编辑:程序博客网 时间:2024/06/14 23:03

中断处理程序中输出调试信息导致无法计算机无法启动

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"));

就不会有问题了。

0 0
原创粉丝点击