nana2046
驱动牛犊
驱动牛犊
  • 注册日期2007-02-28
  • 最后登录2009-04-10
  • 粉丝0
  • 关注0
  • 积分235分
  • 威望64点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
阅读:1229回复:1

关于楚狂人那本教程的几个问题

楼主#
更多 发布于:2007-07-03 15:53
       最近细读楚狂人的那本<windows文件过滤系统开发教程>,遇到1个问题不能很好的理解,希望各位大牛能帮忙解释一下 :)
       第9节里有这么一段话:"UseBuffer 是一个只在当前线程上下文才有效的地址.如果你打算按这个地址获得数据,除非你打算自己分配MDL 锁定内存地址,否则你必须在当前线程上下文中.完成函数与SfRead 并非同一个线程.所以在完成函数中按这个地址去获取数据是不对的.如何回到当前线程?我采用简单的办法.在SfRead 中设置一个事件,调用IoCallDriver 之后开始等待这个事件.而在完成函数中设置这个事件.这样等待结束的时候,刚好Irp 已经完成,我也回到了我的SfRead 原来的线程."
      这段话的意思是一个IRP的派遣例程和完成例程不是同一个线程吗?如果是这样,irp在我这一层的事情还没做完,怎么能被系统传到下一层去呢?
      另外,在第10节读完成的请求里,写的不是很细,没有涉及到关于等待时间的程序的写法,希望各位大牛指点一二
nana2046
驱动牛犊
驱动牛犊
  • 注册日期2007-02-28
  • 最后登录2009-04-10
  • 粉丝0
  • 关注0
  • 积分235分
  • 威望64点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-04 14:32
没有人帮忙吗?我说清楚一点,就是一个irp,比如irp_mn_read,在派遣例程里和我为其写的完成例程的线程是不一样的.我不太理解,一个IRP不被这一层处理完怎么能继续往下传?希望能有人能帮我讲一讲IRP的这一段流程
游客

返回顶部