关于《Windows驱动开发技术详解》第16章 16.6例子中一个问题
2016-05-26 12:19
309 查看
《Windows驱动开发技术详解》第16章 16.6例子中,
在中断处理函数中调用了
具体的原因是例子中没有初始化DPC和定义DPC例程。具体过程可以参考《中断处理》
在调用IoConnectInterrupt函数之前调用
BOOLEAN OnInterrupt(PKINTERRUPT InterruptObject, PDEVICE_EXTENSION pdx) { // OnInterrupt //关中断 UCHAR HSR = READ_PORT_UCHAR(pdx->portbase); HSR = HSR | 0x4; WRITE_PORT_UCHAR(pdx->portbase,HSR); KdPrint(("==============interrupt!!!\n")); //恢复中断信号电平 WRITE_REGISTER_UCHAR((PUCHAR)pdx->MemBar1+0x400000,0x10); IoRequestDpc(pdx->fdo, NULL, pdx); return TRUE; }
在中断处理函数中调用了
IoRequestDpc(pdx->fdo, NULL, pdx);造成系统死掉。但是注释掉这句就没有问题,给初学者造成了一定的困扰。
具体的原因是例子中没有初始化DPC和定义DPC例程。具体过程可以参考《中断处理》
在调用IoConnectInterrupt函数之前调用
KeInitializeDpc(&pExtension->fdo->Dpc, DPCForISR, NULL);初始化DPC,并且定义DPC例程就可以解决问题。
VOID DPCForISR(IN PKDPC Dpc, IN PVOID Context, IN PVOID fdo, IN PVOID pIrp) { KdPrint(("DPCForISR")); }
相关文章推荐
- 如何重装TCP/IP协议
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- 使用Windows原生命令一键清空剪贴板
- 利用开源软件打造自己的全功能远程工具
- Windows 8虚拟机不能全屏的解决方法
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- 微软镜像下载
- windows server域用户提升到本地更高权限组中的方法
- 使用命令修改注册表键值及权限
- 通过手机、电脑远程开关机,Windows和linux机手机,电脑相互控制