1423567
驱动牛犊
驱动牛犊
  • 注册日期2005-10-15
  • 最后登录2009-11-29
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望92点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1638回复:3

派遣函数调用是否在发起者线程中执行?

楼主#
更多 发布于:2008-12-30 19:39
想请教一个问题,看到这样一段描述。
系统服务函数NtReadFile创建IRP_MJ_WRITE类型的IRP,然后它将这个IRP发送到某个驱动程序的派遣函数中。NtReadFile然后去等待一个事件,这时当前线程进入“睡眠”状态,也可以说当前线程被阻塞住或者线程处于“Pending”状态。

这里说当线程进入睡眠状态,那么线程就可能发生了切换吧,那其派遣函数又在哪个线程环境中执行的?似乎根据不同的IRP类型其派遣函数被调用的方式都不同? 求教下!
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
沙发#
发布于:2008-12-31 09:49
用户被禁言,该主题自动屏蔽!
1423567
驱动牛犊
驱动牛犊
  • 注册日期2005-10-15
  • 最后登录2009-11-29
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望92点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-12-31 17:31
感谢楼上的回复~你也说派遣例程一定是运行在发起者线程中。那么其这句该如何理解

(“它将这个IRP发送到某个驱动程序的派遣函数中。NtReadFile然后去等待一个事件,这时当前线程进入“睡眠”状态,也可以说当前线程被阻塞住或者线程处于“Pending”状态。”)

这段其实是出至《windows驱动技术开发详解》里的。我总觉得很矛盾 既然NtReadFile然后去等待一个事件,这时当前线程进入“睡眠”状态。 那么这个线程又如何执行派遣函数?
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
地板#
发布于:2009-01-04 16:51
用户被禁言,该主题自动屏蔽!
游客

返回顶部