Pending IO in PreOperation Callback<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
n
FltCompletePendedPreOperation()
n
Must call this to restart processing of IO pended in the preOperation callback
n
Filter may:
n
Complete operation
n
Request postOperation callback through the FLT_PREOP_CALLBACK_STATUS parameter
n
Typically called from a worker thread
n
FltQueueDeferredIoWorkItem()
n
Queue operation to worker thread for continued processing
n
Can fail if this operation is not safe to post – i.e., this is paging IO or top-level IRP is already set on this thread
n
Can fail if this Instance is in the process of being torndown
Pending IO in PostOperation Callback
n
FltDoCompletionProcessingWhenSafe()
n
Can fail if it is not safe to post
n
Not safe to post Paging IO’s
n
Synchronize operation if you cannot handle this failure
n
Tells filter the appropriate postOperation callback status to return
n
Will only post operation if currently at DPC IRQL
n
Will continue completion processing when WorkerRoutine has completed
n
FltQueueDeferredIoWorkItem()
n
Works just like in preOperation
n
Will always queue work to worker thread if it is safe to do so
n
If successfully queues work, return FLT_POSTOP_MORE_PROCESSING_REQUIRED
n
FltCompletePendedPostOperation()
n
Must call this to restart processing of IO pended in the postOperation callback