baiyuanfan
驱动小牛
驱动小牛
  • 注册日期2004-11-23
  • 最后登录2007-06-21
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望38点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
阅读:2223回复:15

在IoCompletionRoutine里需要调用IoCompleteIrp吗?

楼主#
更多 发布于:2005-07-18 11:46
  标准过滤驱动程序里,我想建立一个IoCompletionRoutine来改变返回的数据,
但是在写框架的时候,
NTSTATUS completeirp(IN PDEVICE_OBJECT DeviceObject,IN PIRP irp,IN PVOID Context){
       if(irp->PendingReturned){
              IoMarkIrpPending(irp);
              //IoCompleteIrp(irp);
              return STATUS_PENDING;
       }
       //IoCompleteIrp(irp);
       return STATUS_SUCCESS;
}

不知道这里的IoCompleteIrp是否需要,看了ddk很长时间也是云里雾里的,好像很多样例驱动里都没有,但是好像ddk又说如果下层不IoCompleteIrp,更上层的IoCompletionRoutine得不到调用??晕啊

还有一个问题是本来已经是IoCompletionRoutine了,为什么还会接受到PendingReturned的irp??一个irp被完成了,状态还是pending?那么什么时候就不pending了?那个时候IoCompletionRoutine还会得到调用吗?

谢谢大家,我真是菜鸟,ddk越看越晕,唉~~

最新喜欢:

hunterforpighunter...
各类后门,木马,Exp,0day
baiyuanfan
驱动小牛
驱动小牛
  • 注册日期2004-11-23
  • 最后登录2007-06-21
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望38点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-18 13:24
嗯,谢谢zhaock斑竹。
还有一个问题是本来已经是IoCompletionRoutine了,为什么还会接受到PendingReturned的irp??一个irp被完成了,状态还是pending?那么什么时候就不pending了?那个时候IoCompletionRoutine还会得到调用吗?
谢谢……
各类后门,木马,Exp,0day
baiyuanfan
驱动小牛
驱动小牛
  • 注册日期2004-11-23
  • 最后登录2007-06-21
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望38点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-07-18 22:37
chenx-python老兄,你就是救命稻草,呵呵~~
各类后门,木马,Exp,0day
baiyuanfan
驱动小牛
驱动小牛
  • 注册日期2004-11-23
  • 最后登录2007-06-21
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望38点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-18 23:10
但是我觉得“告诉上面 可能需要一段时间才complete。。这样上面IOCALLDRIVER就不用傻等了”可以通过直接return status_pending 但是不调用IoCompleteIrp呀,因为irp并未完成,应该等中断发生,真正完成的时候再调用IoCompleteIrp
各类后门,木马,Exp,0day
baiyuanfan
驱动小牛
驱动小牛
  • 注册日期2004-11-23
  • 最后登录2007-06-21
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望38点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-19 13:44
下面是引用arthurtu于2005-07-19 13:05发表的:
对于楼主的情况,你可以在完成例程,停掉irp的complete处理

yourComplete(...)
{
    // 创建一个event,通过PVOID Context传递
.......



arthurtu老大说的在很多ddk自己带的过滤驱动里都是这样子实现的,但是小弟有个疑问,就是这样会阻塞掉自己的驱动的dispatch的返回,使异步的io失去意义了。为什么不直接在自己驱动的dispatch里立刻返回,在完成例程本身里修改数据呢?

谢谢各位!
各类后门,木马,Exp,0day
baiyuanfan
驱动小牛
驱动小牛
  • 注册日期2004-11-23
  • 最后登录2007-06-21
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望38点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-07-23 21:18
upup
各类后门,木马,Exp,0day
baiyuanfan
驱动小牛
驱动小牛
  • 注册日期2004-11-23
  • 最后登录2007-06-21
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望38点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-07-23 21:22
那我就用普通的异步方式,直接在完成例程例修改数据也可以吧,让dispatch立刻返回
各类后门,木马,Exp,0day
游客

返回顶部