Функция FltDoCompletionProcessingWhenSafe (fltkernel.h)
Если это безопасно, функция FltDoCompletionProcessingWhenSafe выполняет подпрограмму обратного вызова драйвера минифильтра после операции.
Синтаксис
BOOLEAN FLTAPI FltDoCompletionProcessingWhenSafe(
[in] PFLT_CALLBACK_DATA Data,
[in] PCFLT_RELATED_OBJECTS FltObjects,
[in, optional] PVOID CompletionContext,
[in] FLT_POST_OPERATION_FLAGS Flags,
[in] PFLT_POST_OPERATION_CALLBACK SafePostCallback,
[out] PFLT_POSTOP_CALLBACK_STATUS RetPostOperationStatus
);
Параметры
[in] Data
Указатель на структуру данных обратного вызова (FLT_CALLBACK_DATA) для операции ввода-вывода. Обычно это то же самое, что и указатель данных , переданный в подпрограмму обратного вызова после операции (PFLT_POST_OPERATION_CALLBACK), которая называется FltDoCompletionProcessingWhenSafe.
[in] FltObjects
Указатель на структуру связанных объектов (FLT_RELATED_OBJECTS) для операции ввода-вывода. Обычно это тот же указатель FltObjects , который был передан в подпрограмму обратного вызова после операции, которая называется FltDoCompletionProcessingWhenSafe.
[in, optional] CompletionContext
Указатель на предоставленные вызывающим объектом сведения о контексте, которые будут переданы функции обратного вызова, указанной в параметре SafePostCallback .
[in] Flags
Битовая маска флагов, которые указывают, как будет выполняться обработка завершения. Обычно это значение совпадает со значением Flags , которое было передано в подпрограмму обратного вызова после операции, которая называется FltDoCompletionProcessingWhenSafe. Дополнительные сведения см. в разделе "Примечания".
[in] SafePostCallback
Указатель на предоставленную вызывающей PFLT_POST_OPERATION_CALLBACK типизированной процедуре обратного вызова, которую операционная система вызывает, когда это безопасно.
[out] RetPostOperationStatus
Выделенная вызывающим объектом переменная, которая получает окончательное значение состояния для операции ввода-вывода. Дополнительные сведения о настройке этого параметра см. в следующем разделе Примечаний.
Возвращаемое значение
FltDoCompletionProcessingWhenSafe возвращает значение TRUE , если обработка завершения операции ввода-вывода может быть выполнена немедленно или операция ввода-вывода была успешно отправлена в рабочий поток; в противном случае возвращается значение FALSE.
Комментарии
FltDoCompletionProcessingWhenSafe немедленно выполняет SafePostCallback , если вызывающий объект выполняется в IRQL <= APC_LEVEL. В противном случае, если можно безопасно отправить операцию в рабочий поток, обработка SafePostCallback откладывается до тех пор, пока она не может быть вызвана в контексте потока, где IRQL <= APC_LEVEL.
Если DISPATCH_LEVEL IRQL < :
- FltDoCompletionProcessingWhenSafe немедленно вызывает подпрограмму обратного вызова SafePostCallback .
- Параметр RetPostOperationStatus получает значение FLT_POSTOP_CALLBACK_STATUS, возвращаемое SafePostCallback.
- FltDoCompletionProcessingWhenSafe возвращает значение TRUE.
Если IRQL >= DISPATCH_LEVEL:
- FltDoCompletionProcessingWhenSafe пытается отправить операцию ввода-вывода в рабочий поток, а затем вызвать подпрограмму SafePostCallback из рабочего потока.
- Если операция ввода-вывода может быть безопасно размещена:
- Диспетчер фильтров задает для RetPostOperationStatus значение FLT_POSTOP_MORE_PROCESSING_REQUIRED.
- FltDoCompletionProcessingWhenSafe возвращает значение TRUE.
- Если операция ввода-вывода не может быть безопасно размещена:
- Диспетчер фильтров задает для RetPostOperationStatus значение FLT_POSTOP_FINISHED_PROCESSING.
- FltDoCompletionProcessingWhenSafe возвращает значение FALSE.
FltDoCompletionProcessingWhenSafe можно вызывать только для операций на основе IRP. Чтобы определить, является ли операция операцией на основе IRP, используйте макрос FLT_IS_IRP_OPERATION .
FltDoCompletionProcessingWhenSafe нельзя использовать для завершения операции ввода-вывода по страницам в рабочем потоке.
FltDoCompletionProcessingWhenSafe можно вызывать только из процедуры обратного вызова драйвера минифильтра после операции (PFLT_POST_OPERATION_CALLBACK). Обратите внимание, что fltDoCompletionProcessingWhenSafe никогда не следует вызывать, если параметр Flags обратного вызова после операции имеет FLTFL_POST_OPERATION_DRAINING бит.
Если мини-фильтр вызывает FltDoCompletionProcessingWhenSafe , а SafePostCallback вызывается в рабочем потоке, так как его небезопасно вызывать в контексте текущего потока, диспетчер фильтров возобновит обработку завершения до тех пор, пока минифильтр не вернет FLT_POSTOP_MORE_PROCESSING_REQUIRED из SafePostCallback.
Если мини-фильтр возвращает FLT_POSTOP_MORE_PROCESSING_REQUIRED из SafePostCallback, он должен вызвать FltCompletePendedPostOperation , чтобы возобновить обработку завершения.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно в пакете обновления 1 для Microsoft Windows 2000 с пакетом обновления 1 для операционных систем с пакетом обновления 4 (SP4), Windows XP с пакетом обновления 2 (SP2), Windows Server 2003 с пакетом обновления 1 (SP1) и более поздних версий. Недоступно в Операционных системах Windows 2000 с пакетом обновления 4 (SP4) и более ранних версий. |
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая Fltkernel.h) |
Библиотека | Fltmgr.lib |
IRQL | Любой. |