何时完成 IRP
满足以下任一条件时,驱动程序应启动 IRP 完成:
驱动程序确定 IRP 处理由于参数无效或其他条件而无法进行。
驱动程序能够处理请求的 I/O 操作,而无需将 IRP 向下传递驱动程序堆栈,并且操作已完成。
正在取消 IRP。 (请参阅 取消 IRP.)
如果不满足这些条件,驱动程序的调度例程必须将 IRP 向下传递到下一个较低的驱动程序,或者它必须处理 I/O 请求的处理。 如果满足其中一个条件,驱动程序必须调用 IoCompleteRequest。
如果驱动程序由于处理无法进行而完成请求,或者它通过处理请求的操作来完成请求而不实际访问设备,则它通常会从其调度例程之一调用 IoCompleteRequest 。 有关详细信息,请参阅 在调度例程中完成 IRP。
如果驱动程序必须访问设备来满足请求,它通常从 DpcForIsr 例程调用 IoCompleteRequest。 服务中断中广泛讨论了这些例程。