spotkei
驱动牛犊
驱动牛犊
  • 注册日期2004-11-03
  • 最后登录2005-12-28
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3316回复:6

求助ATTEMPTED_SWITCH_FROM_DPC的问题

楼主#
更多 发布于:2005-06-20 18:36
  大家好,我在做一个磁盘控制器的驱动,现在的问题是对磁盘操作一段时间后发生BUGCHECK 0XB8:ATTEMPTED_SWITCH_FROM_DPC,
我跟踪下来,发生的情形是这样:
当前一个IRP正在处理,进入DMA传输,等待中断,在等待时又有两个读写IRP先后进来,此时中断发生,在ISR和DPCFORISR进行处理,
DPCFORISR最后调用IoStartNextPacket,然后进入StartIo,安排DMA传输,但从执行DMA的函数出来后就发生ATTEMPTED_SWITCH_FROM_DPC错误。
我检查了DPCFORISR的代码,并没有调用KeWaitForSingleObject等函数。
请教各位会是什么原因引起的?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-20 22:52
你在处理IRP时候,提高一下IRQL看看
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
板凳#
发布于:2005-06-21 09:05
这种错误可能是在 DPC 或 StartIo 等处于 Dispatch_Level 的例程中) 调用了 KeWaitForSingleObject 或 KeDelayExecutionThread。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
spotkei
驱动牛犊
驱动牛犊
  • 注册日期2004-11-03
  • 最后登录2005-12-28
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-21 10:33
下面是引用seaquester于2005-06-21 09:05发表的:
这种错误可能是在 DPC 或 StartIo 等处于 Dispatch_Level 的例程中) 调用了 KeWaitForSingleObject 或 KeDelayExecutionThread。

我在网上查了下,ATTEMPTED_SWITCH_FROM_DPC会因为KeWaitForSingleObject而发生, 难道KeDelayExecutionThread也会引发? 我在DPC里是有调用KeDelayExecutionThread, 但如果对硬件的操作需要等待一个延时的话, 应该调用什么延时函数呢?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-06-21 12:48
KeDelayExecutionThread会使thread进入一个wait状态,在dpc不能这样做。
没有仔细的看DDK?
时间不长的话,试KeStallExecutionProcessor
spotkei
驱动牛犊
驱动牛犊
  • 注册日期2004-11-03
  • 最后登录2005-12-28
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-21 17:20
下面是引用arthurtu于2005-06-21 12:48发表的:
KeDelayExecutionThread会使thread进入一个wait状态,在dpc不能这样做。
没有仔细的看DDK?
时间不长的话,试KeStallExecutionProcessor

感谢arthurtu和seaquester两位大牛,请问新论坛怎么给分啊?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-06-22 10:03
使用KeStallExecutionProcessor不是很好,这个函数会让CPU停下来
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部