mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1596回复:11

紧急求助,关于PAGE FAULT 问题

楼主#
更多 发布于:2003-05-14 16:18
上次这个问题还没解决,请高手指教:
注明:处理完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》提供的方法来编写
向高手请教!


最新喜欢:

dregsdregs
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝1
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-15 09:31
我怀疑你的 IRP 中有了一些局部变量,主要是变量的生命周期(作用域)导致的。也就是说当你调用 IoCallDriver 后,IRP 中的一些缓冲空间已经释放,这当然会导致Page Fault。
可以这样改一下验证。在你的 3)设置等待时间;改为等事件,然后再完成例程中置事件。
最好把你的相关代码贴上来,应该容易解决!
你的认可是对我最大的鼓励!
xyyln
驱动老牛
驱动老牛
  • 注册日期2003-01-02
  • 最后登录2009-12-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-15 14:46
3)设置等待时间;
~~~~~~~~~~~~~~~~~~~~
    设置等待时间是否不太妥当,一般这里返回值是pending的时候可以设置一个kevent触发。
    另外在语句中嵌入获取当前IRQL的代码并跟踪一下。
[img]http://www.jt99.com/zjbbs/UploadFile/2003113018513643830.gif[/img]
raul.wang
驱动小牛
驱动小牛
  • 注册日期2002-07-30
  • 最后登录2004-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-22 15:02
发Mail给我,我帮你分析分析,不过之后要给分
同饮一壶酒
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-22 17:52
直接解决的送50分,提供有用的提示的送30分
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-23 14:41
raul.wang:
你的MAIL地址是什么?
raul.wang
驱动小牛
驱动小牛
  • 注册日期2002-07-30
  • 最后登录2004-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-23 15:44
wzxyilove@163.net
同饮一壶酒
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-26 10:34
我尝试过另一个在2000和98下发送数据成功的代码,但置换到我这里就不对,是不是我的IRP是自己建立的且用MDL方式传输的?是不是要做一些特殊的注意或处理?请高手指教。送分问题可商量。
raul.wang
驱动小牛
驱动小牛
  • 注册日期2002-07-30
  • 最后登录2004-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-05-26 11:11
mail我已收到,我分析一下后给你回复。
同饮一壶酒
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-05-26 11:44
你用来控制什么USB设备,我只有USB键盘和播放器,不知能否为你调试一下,如果可能mail到我的邮箱:mfczmh@sian.com,我会尽力帮你调试一下
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2003-05-26 14:12
我开发过USB驱动,如果你还没解决问题,请把代码给我分析以下,给你答复,mail:zzq191@21cn.com
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
游客

返回顶部