阅读:834回复:0
<求助>关于完成例程的问题
关于完成例程的返回值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函数? |
|