Поделиться через


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

Подпрограмма FltSetStreamHandleContext задает контекст для дескриптора потока.

Синтаксис

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

Параметры

[in] Instance

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

[in] FileObject

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

[in] Operation

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

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

[in] NewContext

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

[out, optional] OldContext

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

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

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

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

Замечания

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

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

FltSetStreamHandleContext нельзя вызывать на нераскрытый FileObject. Поэтому fltSetStreamHandleContext нельзя вызывать из предварительно созданного обратного вызова для потока, так как поток не был открыт в этом моменте. Однако мини-фильтр может выделить и настроить контекст дескриптора потока в предварительно созданном обратном вызове, передать его в обратный вызов после создания с помощью параметра контекста завершения и задать контекст дескриптора потока в потоке после создания обратного вызова.

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

Если FltSetStreamHandleContext успешно:

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

Если FltSetStreamHandleContext завершается ошибкой:

  • Количество ссылок на NewContext остается неизменным.
  • Если OldContext не NULL и не указывает на NULL_CONTEXT, то OldContext — это указатель на контекст, связанный с дескриптором потока. Вызов фильтра FltSetStreamHandleContext должен вызывать FltReleaseContext для OldContext, а также когда указатель контекста больше не нужен.

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

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

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно и поддерживается в пакете обновления 1 для Microsoft Windows 2000 с пакетом обновления 1 (SP4), Windows XP с пакетом обновления 2 (SP2), Windows Server 2003 с пакетом обновления 1 (SP1) и более поздних операционных систем.
целевая платформа Всеобщий
заголовка fltkernel.h (include Fltkernel.h)
библиотеки Fltmgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

См. также

FltAllocateContext

FltDeleteContext

FltDeleteStreamHandleContext

FltGetStreamHandleContext

FltReleaseContext