qinxg
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望27点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1483回复:4

几个一直没有弄懂的问题

楼主#
更多 发布于:2003-12-19 09:28
1. 是不是在DISPATCH_LEVEL上不会发生线程切换? 如某个线程提升自己到DISPATCH_LEVEL,定时器回调和socket回调函数是否被阻塞(它们都是DIPATCH_LEVEL)?
2. 如果Win32程序开几个线程操作驱动程序,当某个Win32线程在驱动里提升到DISPATCH_LEVEL,其他Win32线程能否进入驱动?
3. 2中如果可以进入,如何互斥. KeWaitForSingleEvent()的时间参数为0时,是否失去实际意义?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-12-19 10:41
在dispatch level,要么是自己运行完了,要么是被其它更高的irql如硬件中断打断了。

2、其它Win32线程就没有机会运行,在单CPU下。
qinxg
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望27点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-19 12:30
谢谢arthurtu.

我还有一个问题: 一个 tdi socket线程,本身是PASSIVE_LEVEL,它和下层tcp驱动通信后,有没有可能自己的IRQL被提升到DISPATCH_LEVEL. 我下了本站的那个tdi tcp的例子,发现有时奇怪的出现IRQL_NOT_LESS_OR_EQUE 的蓝屏.那个例子到处都是
ASSERT( KeGetCurrentIrql() == PASSIVE_LEVEL );的断言,搞得我心惊胆战的
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-12-19 14:15
一般提升irql是为了访问共享资源的时候防止冲突,会回复到以前的irql的
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-19 21:11
IRQL_NOT_LESS_OR_EQUE
这个信息并不一定是由于IRQL造成的,比如你在DISPATCH_LEVEL访问分页内存,甚至由于程序的原因造成空指针访问时,都有可以引发IRQL_NOT_LESS_OR_EQUE。
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
游客

返回顶部