Every higher-level NT driver’s Dispatch routines are generally responsible for the following:
For more detailed information about higher-level drivers’ Dispatch routines, see Chapter 6.
Such a Dispatch routine can call IoSetCompletionRoutine with the entry point of a driver-supplied IoCompletion routine and with any IRP that it will pass on to lower drivers with IoCallDriver.
Such a Dispatch routine can specify whether the given IoCompletion routine will be called when lower drivers complete the given IRP with any one, two, or all of the following NTSTATUS values when it calls IoSetCompletionRoutine:
The purpose of an IoCompletion routine is to monitor what lower-level drivers did with a given IRP and/or to do any necessary cleanup processing for an IRP that the higher-level driver has passed on for processing by lower drivers.
For more information about NTSTATUS and I/O errors, see Chapter 16.
For specific information about any of the support routines mentioned in this chapter, see the Kernel-mode Driver Reference.