Функция FltSetFileContext (fltkernel.h)

Подпрограмма FltSetFileContext задает контекст для файла.

Синтаксис

NTSTATUS FLTAPI FltSetFileContext(
  [in]  PFLT_INSTANCE             Instance,
  [in]  PFILE_OBJECT              FileObject,
  [in]  FLT_SET_CONTEXT_OPERATION Operation,
  [in]  PFLT_CONTEXT              NewContext,
  [out] PFLT_CONTEXT              *OldContext
);

Параметры

[in] Instance

Непрозрачный указатель на экземпляр драйвера минифильтра для вызывающего объекта. Этот параметр является обязательным и не может иметь значение NULL.

[in] FileObject

Указатель на объект файла для файла. Этот параметр является обязательным и не может иметь значение NULL.

[in] Operation

Флаг, указывающий тип операции, выполняемой FltSetFileContext . Этот параметр должен иметь один из следующих флагов:

Flag Значение
FLT_SET_CONTEXT_REPLACE_IF_EXISTS Если для файла, на который указывает параметр FileObject , уже задан контекст, FltSetFileContext заменит этот контекст контекстом, указанным в NewContext. В противном случае он вставляет NewContext в список контекстов для файла.
FLT_SET_CONTEXT_KEEP_IF_EXISTS Если для файла, на который указывает FileObject , уже задан контекст, FltSetFileContext вернет STATUS_FLT_CONTEXT_ALREADY_DEFINED и не заменит существующий контекст или не увеличит число ссылок. Если контекст еще не задан, подпрограмма вставляет контекст, указанный в NewContext , в список контекстов для файла и увеличивает количество ссылок.

[in] NewContext

Указатель на новый контекст, который необходимо задать для файла. Этот параметр является обязательным и не может иметь значение NULL.

[out] OldContext

Указатель на переменную, выделенную вызывающим объектом, которая получает адрес существующего контекста файла для экземпляра, на который указывает параметр Instance , если он уже задан. Этот параметр является необязательным и может иметь значение NULL. Дополнительные сведения об этом параметре см. в следующем разделе Примечаний.

Возвращаемое значение

Подпрограмма FltSetFileContext возвращает STATUS_SUCCESS или соответствующее значение NTSTATUS, например одно из следующих значений:

Код возврата Описание
STATUS_FLT_CONTEXT_ALREADY_DEFINED Если для параметра Operation был указан FLT_SET_CONTEXT_KEEP_IF_EXISTS, этот код ошибки указывает, что контекст уже присоединен к файлу.
STATUS_FLT_CONTEXT_ALREADY_LINKED Контекст, на который указывает параметр NewContext , уже связан с объектом . Другими словами, этот код ошибки указывает, что NewContext уже используется из-за успешного предыдущего вызова процедурыКонтекста FltSetXxx.
STATUS_FLT_DELETING_OBJECT Экземпляр, указанный в параметре Instance , сносится. Это код ошибки.
STATUS_INVALID_PARAMETER Передан недопустимый параметр. Например, параметр NewContext не указывает на допустимый контекст файла или для параметра Operation было указано недопустимое значение. Это код ошибки.
STATUS_NOT_SUPPORTED Контексты файлов для этого файла не поддерживаются. Это код ошибки.

Комментарии

Дополнительные сведения о контекстах см. в разделе О контекстах минифильтра.

Драйвер минифильтра вызывает FltSetFileContext , чтобы задать или заменить собственный контекст файла. Драйвер минифильтра может прикрепить к файлу только один контекст для каждого экземпляра драйвера минифильтра.

Не удается вызвать FltSetFileContext для нераскрытого объекта FileObject. Следовательно , fltSetFileContext нельзя вызвать из предварительно созданного обратного вызова для файла, так как файл не был открыт на этом этапе. Однако драйвер минифильтра может выделить и настроить контекст файла в обратном вызове перед созданием, передать его в обратный вызов после создания с помощью параметра контекста завершения и задать контекст файла для файла, соответствующего этому потоку в обратном вызове после создания.

Подсчет ссылок

Если fltSetFileContext успешно выполняется:

  • Число ссылок в NewContext увеличивается. Если NewContext больше не требуется, минифильтр должен вызвать FltReleaseContext для уменьшения количества ссылок.

В противном случае, если fltSetFileContext завершается сбоем :

  • Количество ссылок в NewContext остается неизменным.
  • Если значение OldContext не равно NULL и не указывает на NULL_CONTEXT то OldContext является указателем на контекст, связанный в данный момент с файлом. Фильтр, вызывающий FltSetFileContext , должен в конечном итоге вызвать FltReleaseContext для OldContext , если указатель контекста больше не нужен.

Независимо от успеха:

  • Фильтр, вызывающий FltSetFileContext , должен вызывать FltReleaseContext для уменьшения количества ссылок в объекте NewContext , который был увеличен с помощью FltAllocateContext.

Дополнительные сведения см. в разделе Ссылки на контексты.

Другие контекстные операции

Дополнительные сведения см . в разделах Настройка контекстов и Освобождение контекстов:

Требования

Требование Значение
Минимальная версия клиента Доступно и поддерживается начиная с Windows Vista.
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая Fltkernel.h)
Библиотека Fltmgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

См. также раздел

FLT_CONTEXT_REGISTRATION

FltAllocateContext

FltDeleteContext

FltDeleteFileContext

FltGetFileContext

FltReleaseContext

FltSupportsFileContexts

FltSupportsFileContextsEx