Функция FltCancelFileOpen (fltkernel.h)
Драйвер мини-фильтра может использовать процедуру FltCancelFileOpen, чтобы закрыть только что открытый или созданный файл.
Синтаксис
VOID FLTAPI FltCancelFileOpen(
[in] PFLT_INSTANCE Instance,
[in] PFILE_OBJECT FileObject
);
Параметры
[in] Instance
Указатель непрозрачного экземпляра для вызывающего объекта. Этот параметр является обязательным и не может быть null.
[in] FileObject
Указатель объекта файла. Этот параметр является обязательным и не может быть null.
Возвращаемое значение
Никакой
Замечания
Если драйвер минифильтра определяет, что операция открытия файла или создания файла (IRP_MJ_CREATE) должна завершиться сбоем после завершения операции с значением NTSTATUS успешного выполнения, например STATUS_SUCCESS, драйвер минифильтра может вызвать FltCancelFileOpen из процедуры обратного вызова после создания, чтобы закрыть файл.
Обратите внимание, что FltCancelFileOpen не отменяет никаких изменений в файле. Например, FltCancelFileOpen не удаляет только что созданный файл или восстанавливает файл, который был перезаписан или заменен на предыдущее состояние.
fltCancelFileOpen необходимо вызвать перед созданием всех дескрипторов для файла. Вызывающие элементы могут проверить элемент флагов структуры FILE_OBJECTFileObject. Если установлен флаг FO_HANDLE_CREATED, это означает, что для файла был создан один или несколько дескрипторов, поэтому небезопасно вызывать FltCancelFileOpen.
FltCancelFileOpen задает флаг FO_FILE_OPEN_CANCELLED в элементе Flags объекта файла, на который FileObject указывает. Этот флаг указывает, что операция создания отменена, а запрос закрытия (IRP_MJ_CLOSE) будет выдан для этого объекта файла.
После отмены операции создания ее невозможно повторно выпустить. Дополнительные сведения см. в разделе FltReissueSynchronousIo.
fltCancelFileOpen можно вызывать только из подпрограммы обратного вызова после создания драйвера минифильтра. Вызов FltCancelFileOpen из подпрограммы обратного вызова после операции (PFLT_POST_OPERATION_CALLBACK) для любого другого типа операции ввода-вывода или вызова из подпрограммы обратного вызова (PFLT_PRE_OPERATION_CALLBACK) является ошибкой программирования.
Вызывающие FltCancelFileOpen должны работать в IRQL PASSIVE_LEVEL. Тем не менее, это безопасно для драйверов минифильтра вызывать эту подпрограмму из подпрограммы обратного вызова после создания, так как подпрограммы обратного вызова после создания гарантированно вызываются в IRQL PASSIVE_LEVEL в контексте потока, который вызвал запрос IRP_MJ_CREATE.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | fltkernel.h (include Fltkernel.h) |
библиотеки | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | PASSIVE_LEVEL (см. раздел "Примечания") |