ch609
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分196分
  • 威望29点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:834回复:0

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

楼主#
更多 发布于:2007-04-18 18:16
  关于完成例程的返回值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函数?
游客

返回顶部