NTFSD Folk:
I have a minifilter that needs to write stuff to a log file at times. This
can happen in a Post-Write callback, which is called in an arbitrary thread
context, at IRQL <= DISPATCH_LEVEL.
So I create a work item with FltAllocateDeferredIoWorkItem() and queue it
with FltQueueDeferredIoWorkItem(). But more often than not, the
FltQueueDeferredIoWorkItem() returns STATUS_FLT_NOT_SAFE_TO_POST_OPERATION,
which means that TopLevelIrp is not NULL.
So my question is basically: Now what?
If I can’t open the file because I’m not at PASSIVE_LEVEL and I can’t queue
to FltQueueDeferredIoWorkItem(), what are my options?
-
Can a minifilter use the “traditional” IoAllocateWorkItem &
IoQueueWorkItem? -
Will it hit the same limitation with TopLevelIrp?
-
Can a minifilter create its own system thread and queue things to it?
If so, how deep is the queue? -
Is there some other way to wait until TopLevelIrp is NULL so I can call
FltQueueDeferredIoWorkItem()?
The documentation is fuzzy on this stuff…
Ken