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


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

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

Синтаксис

NTSTATUS FLTAPI FltSetTransactionContext(
  [in]            PFLT_INSTANCE             Instance,
  [in]            PKTRANSACTION             Transaction,
  [in]            FLT_SET_CONTEXT_OPERATION Operation,
  [in]            PFLT_CONTEXT              NewContext,
  [out, optional] PFLT_CONTEXT              *OldContext
);

Параметры

[in] Instance

Указатель непрозрачного экземпляра для вызывающего объекта.

[in] Transaction

Непрозрачный указатель транзакции для транзакции, в которой задан контекст.

[in] Operation

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

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

[in] NewContext

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

[out, optional] OldContext

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

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

FltSetTransactionContext возвращает 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 не указывает на допустимый контекст транзакции или недопустимое значение было указано для параметра Operation. Это код ошибки.

Замечания

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

Драйвер мини-фильтра вызывает FltSetTransactionContext для подключения контекста к транзакции или удаления или замены существующего контекста транзакции. Драйвер мини-фильтра может присоединить только один контекст к данной транзакции.

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

Если FltSetTransactionContext выполнено:

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

Кроме того, если FltSetTransactionContext завершается ошибкой:

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

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

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

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

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

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

  • Чтобы выделить новый контекст, вызовите FltAllocateContext.

Чтобы получить контекст транзакции, вызовите FltGetTransactionContext.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступные и поддерживаемые в Windows Vista и более поздних операционных системах.
целевая платформа Всеобщий
заголовка fltkernel.h (include Fltkernel.h)
библиотеки FltMgr.lib
DLL FltMgr.sys
IRQL <= APC_LEVEL.

См. также

FltAllocateContext

FltCommitComplete

FltDeleteContext

FltDeleteTransactionContext

FltEnlistInTransaction

FltGetTransactionContext

FltPrepareComplete

FltPrepareComplete

FltReleaseContext

FltRollbackComplete

FltRollbackEnlistment