Функция 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
Указатель на переменную, выделенную вызывающим объектом, которая получает адрес существующего контекста дескриптора потока для параметра Instance , если он уже задан. Этот параметр является необязательным и может иметь значение NULL. Дополнительные сведения об этом параметре см. в следующем разделе Примечаний.
Возвращаемое значение
Подпрограмма FltSetStreamHandleContext возвращает STATUS_SUCCESS или соответствующее значение NTSTATUS, например один из следующих кодов ошибок:
Код возврата | Описание |
---|---|
STATUS_FLT_CONTEXT_ALREADY_DEFINED | Если FLT_SET_CONTEXT_KEEP_IF_EXISTS был указан для параметра Operation, этот код ошибки указывает, что контекст уже присоединен к дескриптору потока. |
STATUS_FLT_CONTEXT_ALREADY_LINKED | Контекст, на который указывает NewContext , уже связан с объектом . Другими словами, этот код ошибки указывает, что NewContext уже используется из-за успешного предыдущего вызова процедуры Контекста FltSetXxx. |
STATUS_FLT_DELETING_OBJECT | Указанный экземпляр будет снесен. Это код ошибки. |
STATUS_INVALID_PARAMETER | Передан недопустимый параметр. Например, параметр NewContext не указывает на допустимый контекст дескриптора потока или для параметра Operation было указано недопустимое значение. |
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.
Дополнительные сведения см. в разделе Ссылки на контексты.
Другие контекстные операции
Дополнительные сведения см . в разделах Настройка контекстов и Освобождение контекстов:
Чтобы определить, поддерживаются ли контексты дескриптора потоков для заданного файла, вызовите FltSupportsStreamHandleContexts.
Чтобы выделить новый контекст, вызовите FltAllocateContext.
Чтобы получить контекст дескриптора потока, вызовите FltGetStreamHandleContext.
Чтобы удалить контекст дескриптора потока, вызовите Метод FltDeleteStreamHandleContext или FltDeleteContext.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно и поддерживается в накопительном пакете обновления 1 для Microsoft Windows 2000 с пакетом обновления 1 (SP4), Windows XP с пакетом обновления 2 (SP2), Windows Server 2003 с пакетом обновления 1 (SP1) и более поздних версий. |
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая Fltkernel.h) |
Библиотека | Fltmgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по