<求助>关于WDM中完成例程的问题

lj1978   2007-4-19 18:01 楼主
关于完成例程的返回值STATUS_MORE_PROCESSING_REQUIRED我不是很清楚.

例如:
  驱动程序的构成为: 一个上层过滤驱动程序,一个功能驱动程序,一个物理设备驱动程序;
  如果IO管理器发送了一个IRP,我在上层过滤驱动程序中为这个IRP设置了完成例程A(返回值是STATUS_SUCCESS),然后调用IoCallDriver将这个IRP发送到功能驱动程序.
  功能驱动程序接收到这个IRP后,也设置一个完成例程B(返回值是STATUS_MORE_PROCESSING_REQUIRED),然后也调用IoCallDriver将这个函数传递到物理设备驱动程序.
  物理驱动程序对这个IRP的处理是先排入队列,并返回STATUS_PENDING.

问题:
(1)功能驱动程序的IoCallDriver的返回值是不是就是STATUS_PENDING?
(2)当物理驱动程序处理了IRP之后,调用IoCompleteRequest函数,这个函数被调用之后是不是立即就返回了,不用等待完成例程的执行?
(3)由于完成例程B的返回值,A是不是不将被调用?IRP也不将被销毁?那么我在功能驱动程序怎样继续处理这个IRP?是不是应该在调用了IoCallDriver(功能驱动程序中调用的)之后,等待一个事件?
(4)如果要完成例程A也得到调度,是不是需要在功能驱动程序中调用IoCompleteRequest函数?

回复评论 (4)

高手帮忙,我是新手
点赞  2007-4-19 18:26
HELP~~~~~~~~~~
点赞  2007-4-26 20:11
去“驱网”
点赞  2007-4-28 12:51
什么啊,驱网,我觉得技术论坛发一个贴子,一直没有人回答,感觉人气不够.
点赞  2007-7-18 12:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复