阅读:1736回复:6
有兴趣的一起讨论一下吧(80分)
在下有一个问题,捆饶了很多天,希望各位高手关注一下呀!
我的中间层驱动发生了一个问题,在静态安装后,也就是在启动时直接加载,程序会在ProtocolStatus时出现PAGE FAULT,我跟了一下程序,发现一个问题: 我的函数ProtocolStatus(arg1,arg2),我在函数里用DBG打印出了arg2,发现这个参数打印出来的值跟用SOFTICE看到的这个值是不同的。感觉比较奇怪,因此认为在这里是有问题的。 然后我在ProtocolPnpEvent函数中也存在这样的问题,我查了地址(用SOFTICE),发现地址的确有些乱,我认为是堆栈发生了错误。 当我在ProtocolPnpEvent中打印了参数后,发现在调用ProtocolStatus时就是正确的了,即没有上述的问题了。 我始终认为是我的DriverEntry的内存出了问题,但我检查可能出错的地方,没有发现问题。 我知道要大家直接帮我解决这个问题的可能性不大,但想知道大家有没有遇到这种问题,和解决问题的办法。 顺便说一句,在程序起来后再加载我的驱动,一切都是好的,没有上面的问题 |
|
沙发#
发布于:2003-05-14 11:03
这可能涉及系统内存换出的问题, 你用Softice观察到的和打印的不一样,没什么好奇怪,启动后在加载,可能已经Run了这个function,就不会换出了。
因此,地址不同不一定是错,关键是内容。你应该查一下。 |
|
板凳#
发布于:2003-05-14 12:13
说的有理?不过,并非是没有错,只是在系统启动以后没有调用ProtocolStatus函数,当然,我也不知道是不是调用这个就一定出错,但是,堆栈内的指针似乎是有问题的,当然,这是指静态加载的情况,不过,还是感谢关注
|
|
地板#
发布于:2003-05-14 15:50
问题仍然没有解决,我顶一下,希望大家关注
可以肯定堆栈的错误必然会导致系统崩溃,毕竟,堆栈才是真正的保存正确数据的地方 |
|
地下室#
发布于:2003-05-15 10:46
我不相信大家没有遇到这个问题,
斑竹呢?我再顶一下,问题仍然没有解决 望大家关注啊。。。。。。。 |
|
5楼#
发布于:2003-05-15 10:49
1 可能是你的编译有问题,字节对齐方面的问题(可能)
2 程序中那个地方对内存操作越界了。 仅供参考 |
|
|
6楼#
发布于:2003-05-15 15:55
感谢MIKE,我也发现了这个问题,内存越界基本可以排除,
认为在编译上有一些问题,我正在查。。。。。。 还是使用SOURCE文件好啊!我现在把编译参数内嵌到VC中,好麻烦啊!!不过,因为程序比较大,也没有办法,再次感谢MIKE |
|