中断处理程序中输出调试信息导致无法计算机无法启动
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"));
就不会有问题了。
相关文章推荐
- Linux 自检和 SystemTap
- Python 七步捉虫法
- 路由器的配置与调试
- 对于技术人员的出现了运行时间错误,是否要进行调试的解决方法
- 在ASP.NET 2.0中操作数据之七十二:调试存储过程
- 讲解WordPress开发中一些常用的debug技巧
- JavaScript程序设计之JS调试
- 可以用来调试JavaScript错误的解决方案
- 如何调试异步加载页面里包含的js文件
- jQuery下的Ajax调试步骤
- 调试一段PHP程序时遇到的三个问题
- JavaScript高级程序设计 错误处理与调试学习笔记
- Javascript调试脚本的经验之谈第1/2页
- 在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
- Android App调试内存泄露之Cursor篇
- Lua的编译、执行和调试技术介绍
- 解决Visual Studio 2012 Update 4 RC启动调试失败的方案
- 10个调试和排错的小建议
- 调试PHP程序的多种方法介绍
- PHP调试函数和日志记录函数分享