Call to action for driver developers:
· Return STATUS_CONTINUE_COMPLETION or STATUS_MORE_PROCESSING_REQUIRED from all IoCompletion routines.
· Understand when to return STATUS_PENDING for an IRP. Return STATUS_PENDING only if you have called theIoMarkIrpPending macro for the IRP, and conversely, callIoMarkIrpPending for an IRP only if you will return STATUS_PENDING.
· Test the value of the Irp->PendingReturned flag in IoCompletion routines to optimize post-processing of IRPs.
· Understand the difference between error status and warning status, and what data the IRP contains for each type of status.
· Use Driver Verifier to catch errors in IRP handling, and use debugger extensions to understand how individual IRPs are processed.