您的位置:首页 > 理论基础

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

2016-05-29 19:09 309 查看

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

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


就不会有问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  调试