Функция FltCancelFileOpen (fltkernel.h)
Драйвер минифильтра может использовать подпрограмму FltCancelFileOpen , чтобы закрыть только что открытый или созданный файл.
Синтаксис
VOID FLTAPI FltCancelFileOpen(
[in] PFLT_INSTANCE Instance,
[in] PFILE_OBJECT FileObject
);
Параметры
[in] Instance
Указатель непрозрачного экземпляра для вызывающего объекта. Этот параметр является обязательным и не может иметь значение NULL.
[in] FileObject
Указатель файлового объекта для файла. Этот параметр является обязательным и не может иметь значение NULL.
Возвращаемое значение
None
Remarks
Если драйвер минифильтра определяет, что операция открытия файла или создания файла (IRP_MJ_CREATE) должна завершиться сбоем после завершения операции с успешным значением NTSTATUS, например STATUS_SUCCESS, драйвер минифильтра может вызвать FltCancelFileOpen из своей подпрограммы обратного вызова после создания, чтобы закрыть файл.
Обратите внимание, что FltCancelFileOpen не отменяет никаких изменений в файле. Например, FltCancelFileOpen не удаляет только что созданный файл и не восстанавливает файл, который был перезаписан или заменен до предыдущего состояния.
Перед созданием дескрипторов для файла необходимо вызвать FltCancelFileOpen. Вызывающие объекты могут проверка элемент Flagsструктуры FILE_OBJECT, на которую указывает параметр FileObject. Если установлен флаг 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 должны выполняться на PASSIVE_LEVEL IRQL. Однако драйверам минифильтра безопасно вызывать эту подпрограмму из подпрограммы обратного вызова после создания, так как подпрограммы обратного вызова после создания гарантированно вызываются на PASSIVE_LEVEL IRQL в контексте потока, который был источником запроса IRP_MJ_CREATE.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая Fltkernel.h) |
Библиотека | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | PASSIVE_LEVEL (см. раздел "Примечания") |