Performing Completion Processing for an I/O Operation
A minifilter driver's postoperation callback routine is called when an I/O operation has been completed by the underlying file system, by a legacy filter, or by another minifilter driver that is at a lower altitude in the minifilter driver instance stack.
In addition, when a minifilter driver instance is being torn down, the filter manager "drains" any I/O operations for which the instance has received a preoperation callback and is awaiting a postoperation callback. In this situation, the filter manager calls the minifilter driver's postoperation callback routine, even if the I/O operation has not been completed, and sets the FLTFL_POST_OPERATION_DRAINING flag in the Flags input parameter.
When the FLTFL_POST_OPERATION_DRAINING flag is set, the minifilter driver must not perform normal completion processing. Instead, it should perform only necessary cleanup, such as freeing memory that the minifilter driver allocated for the CompletionContext parameter in its preoperation callback routine, and return FLT_POSTOP_FINISHED_PROCESSING.
This section includes the following topic:
Ensuring that Completion Processing is Performed at Safe IRQL