阅读:1910回复:4
您的轻轻点拔,我受益非浅
为什么我写的VXD 设备驱动程序经常死机!
|
|
沙发#
发布于:2001-07-05 17:02
这个问题经常遇到,但没有人能回答你。因为写驱动就要忍着死机。你要看看你的内存分配经及访问的资源,调用的函数等等,细心点好,你可以先用ice调试一下,看哪部分引起死机。然后再调试。不行的话把这部分的源码帖出来。
|
|
|
板凳#
发布于:2001-07-06 21:19
多谢指教!
我实在搞不明白,我在程序中钩挂了一个七号中断,(我已经把七号中断专归我所要外设,不可能产生冲突),在实际调试过程中,中断每次都能正确钩挂上,但是大多数情况下是没有响应,也就是说不进入中断服务程序!。 我想既然每次中断都能正确钩挂和脱钩,说明问题在于CPU没有响应中断! 但我每次调试程序的时候,都没有让CPU干别的工作! 为什么有时能响应,有时又不响应中断! 我很是困惑! 我将原代码附上!还望多多指教!在下感激不尽! |
|
地板#
发布于:2001-07-08 08:47
我想,大概是与WINDOWS 9X 的中断体系结构有关。
因为VXD 的中断处理器不是从IDT 直接来的。它从IDT 指向VMM ,而VMM只处理异常,它又将中断处理器指向VPCID ,最后由VPCID 来真正处理中断处理器。 这么一大体系,使得VXD 比较肥大,所以在中断处理中,你需要 发送EOI 指令,否则就会出现你说的现象了。 希望对你有所帮助。 |
|
|
地下室#
发布于:2001-07-08 15:26
谢谢大侠指教!
我想不可能是由于没有发EOI指令的原故,因为在我的中断服务程序的指令结尾加上了 SendPhysicalEOI语句!所以说每次都已经向物理中断控制器发送了中断结束命令! 另外我还发现产生中断之后不能正常结束!中断一直产生,我没办法,只能用结束任务来结束它!这点让我很是纳闷! 我在OnSysDynamicDeviceExit()里头用了解挂指令,在ring3 层的控制台调度程序中用了CloseHandle (hDevice),应该来说是能正常结束的,但结果总不是我所想要的! |
|