阅读:1596回复:11
紧急求助,关于PAGE FAULT 问题
上次这个问题还没解决,请高手指教:
注明:处理完IRP后,运行了一段代码后才出现PAGE FAULT 每次都是固定地址;如果把发送IRP这段代码除掉后就没有这个问题。我编写的是一个符合PC/SC规范的USB读卡器的驱动,我发送IRP的代码是在回调函数中调用的,当执行完回调函数后在回到我原来函数以前,系统(一段汇编代码中)出现PAGE FAULT。 我调试的工具是SOFTICE 下面是我上一次的帖子: 我在编写USB驱动时碰到一个问题:我用IOBUILDSYNCHRONOUSRSDREQUEST建立一个IRP但当我处理完IRP后会出现PAGE FAULT; 我的代码在WIN2000下运行通过;但在WIN98下出现这个问题(这点让我困惑不已) 1)在发送IRP前设置完成历程; 2)发送IRP 3)设置等待时间; 4)在完成历程后用IoCompleteRequest 我是按《PROGRAMMING THE MICROSOFT WINDOWS DRIVER MODEL》提供的方法来编写 向高手请教! |
|
最新喜欢:![]() |
沙发#
发布于:2003-05-15 09:31
我怀疑你的 IRP 中有了一些局部变量,主要是变量的生命周期(作用域)导致的。也就是说当你调用 IoCallDriver 后,IRP 中的一些缓冲空间已经释放,这当然会导致Page Fault。
可以这样改一下验证。在你的 3)设置等待时间;改为等事件,然后再完成例程中置事件。 最好把你的相关代码贴上来,应该容易解决! |
|
|
板凳#
发布于:2003-05-15 14:46
3)设置等待时间;
~~~~~~~~~~~~~~~~~~~~ 设置等待时间是否不太妥当,一般这里返回值是pending的时候可以设置一个kevent触发。 另外在语句中嵌入获取当前IRQL的代码并跟踪一下。 |
|
|
地板#
发布于:2003-05-22 15:02
发Mail给我,我帮你分析分析,不过之后要给分
|
|
|
地下室#
发布于:2003-05-22 17:52
直接解决的送50分,提供有用的提示的送30分
|
|
5楼#
发布于:2003-05-23 14:41
raul.wang:
你的MAIL地址是什么? |
|
6楼#
发布于:2003-05-23 15:44
wzxyilove@163.net
|
|
|
7楼#
发布于:2003-05-26 10:34
我尝试过另一个在2000和98下发送数据成功的代码,但置换到我这里就不对,是不是我的IRP是自己建立的且用MDL方式传输的?是不是要做一些特殊的注意或处理?请高手指教。送分问题可商量。
|
|
8楼#
发布于:2003-05-26 11:11
mail我已收到,我分析一下后给你回复。
|
|
|
9楼#
发布于:2003-05-26 11:44
你用来控制什么USB设备,我只有USB键盘和播放器,不知能否为你调试一下,如果可能mail到我的邮箱:mfczmh@sian.com,我会尽力帮你调试一下
|
|
|
10楼#
发布于:2003-05-26 14:12
我开发过USB驱动,如果你还没解决问题,请把代码给我分析以下,给你答复,mail:zzq191@21cn.com
|
|
|
11楼#
发布于:2003-05-26 17:07
我漏了一点可能是重要的一点:
我先处理一个特殊IRP(称为IRP1)。这个IRP是发给微软的SMART CARD LIBERARY。这个库函数调用一个回调函数来实现这个IRP的功能。 我用IoBuildSynchronousFsdRequest建立的IRP(称为IRP2)和发送IRP2都在处理前面个IRP1的代码中;当处理完IRP2后并没有报错,但在完成IRP1的回调函数后返回到调用地方的过程时报PAGE FAULT。是不是系统在处理IRP队列的问题。驱动在2000没有碰到这个问题,但在98下出现这个问题,是不是98处理IRP队列和2000有不同之处?? 注:如果我把发送IRP2的代码注掉就不会碰到这个问题。 [编辑 - 5/26/03 by mycookie] |
|