lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1153回复:4

ds for win98 wdm driver: ctimercallback 中使用 kevent , 为何出现 assert fail : irql < dispatch_level

楼主#
更多 发布于:2002-12-03 15:49
app 创建 event object, 通过 deviceioctrl 传递给 driver, device 检测到特定事件后,通知 driver , driver 通过收到的 event object 通知 app ,从而完成 device --> driver --> app 的消息传递.

我使用了 ctimercallback 类,.在其 dpc callback 中定时查询 device .检测到特定事件后,使用 event->set 通知 app. 但奇怪的是,system debugger 总是输出 rtlassert : KeGetCurretIrql()<dispatch-level. 可是,只是一个 dpc 调用,dpc 调用不是在 irql < dispatch-level 情况下才发生吗?

很困惑,请大侠指点一二.

此外,关于从下到上的通信机制,tiger 同志写了一遍专栏文章,我试了一下,没能满足我的需求,不知道是不是哪些地方我没做对,也请大家帮忙看一下:

app 中开了一个线程(slave thread) 专门等待 driver 的 overlapped 返回,等待同时,还需要通过 deviceioctrl 向 driver 发出其它命令. 结果,其它发出的 io code 就没有响应了.

我的情况就是这样: 在等待 driver 消息的同时还要向 driver 发出命令.不知道象这种 pending 的方式能够满足我的需求?


www.bjjcz.com
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-03 17:11
你那个“特定事件“事什么事件?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-12-04 10:29
指 device 发生的事件.
比方说,device 上有一个按键,按下去后, device 就将该按键事件通知 driver , driver 再通知 app. app 再根据当前状况去处理该事件.

timercallback 本身就是一个 dpc 调用,但运行在该函数里是还是输出上述 irql < dispatch_level 信息,真实困惑.

此外,win98 不支持 KeGetCurIrql() 函数,但是, vdw.lib 自定义了该函数,在其 cpp 文件中调用该函数.如, kusb.cpp ,其 include 文件为 <vdw.h>,<kusb.h> .我的 driver 中也包括了这两个头文件,但是一编译就提示该函数不存在,不知道怎样设置?
www.bjjcz.com
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-04 17:50
你的这个按键是通过中断得到的?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-12-05 10:02
是我没入行.

我在 dpc(dispatch_level) 中调用了 submiturb , 但是又没有使用 complete 例程,所以出现问题了. 帮助文档中指出,submiturb()未带 complete 例程时必须在 irql < dispatch_level 的情况下使用.

但是也很奇怪,我按照帮助文档中(Class Refercence :KPipe : submiturb) 的 form1 调用,然而在complete 例程返回 requre_more_processing . 结果也是死机.后来直接按form2 方式处理,返回 success 就好了.版主有时间看看?  
www.bjjcz.com
游客

返回顶部