daneng
驱动牛犊
驱动牛犊
  • 注册日期2007-04-06
  • 最后登录2007-04-17
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1422回复:5

zwsettimerex中调用zwdeletevaluekey的问题

楼主#
更多 发布于:2007-04-06 18:02
  zwsettimerex中的回调函数调用zwdeletevaluekey,过一段时间会蓝屏。错误码是ATTEMPTED_SWITCH_FROM_DPC (b8)
为何呢。跟irql有关还是在zwdeletevaluekey内部有waitobject类似的函数?
驱网无线,快乐无限
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-04-06 20:43
搞个标志不就好了
驱动开发者 呵呵
daneng
驱动牛犊
驱动牛犊
  • 注册日期2007-04-06
  • 最后登录2007-04-17
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-06 22:12
能说清楚些么,老大
驱网无线,快乐无限
daneng
驱动牛犊
驱动牛犊
  • 注册日期2007-04-06
  • 最后登录2007-04-17
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-09 23:27
Windows NT 驱动程序开发人员提示——应注意避免的事项 中的第6条
6. 一定不要在 IRQL >= DISPATCH_LEVEL 上等候核心调度程序对象出现非零间隔。 这是一个致命错误。
驱网无线,快乐无限
daneng
驱动牛犊
驱动牛犊
  • 注册日期2007-04-06
  • 最后登录2007-04-17
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-09 23:29
在programing wdm书中:
DDK文档中明确指出支持例程的IRQL限定。例如,KeWaitForSingleObject例程有两个限定:

调用者必须运行在低于或等于DISPATCH_LEVEL级上。
如果调用中指定了非0的超时,那么调用者必须严格地运行在低于DISPATCH_LEVEL的IRQL上。
上面这两行想要说明的是:如果KeWaitForSingleObject真的被阻塞了指定长的时间(你指定的非0超时),那么你必定运行在低于DISPATCH_LEVEL的IRQL上,因为只有在这样的IRQL上线程阻塞才是允许的。如果你所做的一切就是为了检测事件是否进入信号态,则可以执行在DISPATCH_LEVEL级上。但你不能在ISR或其它运行在高于DISPATCH_LEVEL级上的例程中调用KeWaitForSingleObject例程。
驱网无线,快乐无限
daneng
驱动牛犊
驱动牛犊
  • 注册日期2007-04-06
  • 最后登录2007-04-17
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-04-09 23:46
执行在高于或等于DISPATCH_LEVEL级上的代码不能阻塞线程。
驱网无线,快乐无限
游客

返回顶部