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


Функция NtCreateTransactionManager (wdm.h)

Подпрограмма ZwCreateTransactionManager создает новый объект диспетчера транзакций.

Синтаксис

__kernel_entry NTSYSCALLAPI NTSTATUS NtCreateTransactionManager(
  [out]          PHANDLE            TmHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional] PUNICODE_STRING    LogFileName,
  [in, optional] ULONG              CreateOptions,
  [in, optional] ULONG              CommitStrength
);

Параметры

[out] TmHandle

Указатель на переменную, выделенную вызывающим объектом, которая получает дескриптор нового объекта диспетчера транзакций.

[in] DesiredAccess

Значение ACCESS_MASK , указывающее запрошенный доступ вызывающего объекта к объекту диспетчера транзакций. Помимо прав доступа, определенных для всех типов объектов (см . ACCESS_MASK), вызывающий объект может указать любой из следующих флагов прав доступа для объектов диспетчера транзакций.

флаг ACCESS_MASK Разрешает вызывающей
TRANSACTIONMANAGER_CREATE_RM Создайте диспетчер ресурсов (см . ZwCreateResourceManager).
TRANSACTIONMANAGER_QUERY_INFORMATION Получите сведения о диспетчере транзакций (см . ZwQueryInformationTransactionManager и ZwEnumerateTransactionObject). Также требуется для ZwOpenResourceManager, ZwCreateTransaction и ZwOpenTransaction.)
TRANSACTIONMANAGER_RECOVER Восстановите диспетчер транзакций (см . ZwRecoverTransactionManager и ZwRollforwardTransactionManager).
TRANSACTIONMANAGER_RENAME Не используется.
TRANSACTIONMANAGER_SET_INFORMATION Не используется.
 

Кроме того, можно указать одно или несколько следующих ACCESS_MASK растровых рисунков. Эти точечные изображения объединяют флаги из предыдущей таблицы с флагами STANDARD_RIGHTS_XXX, описанными на странице справки по ACCESS_MASK . Вы также можете объединить эти растровые изображения с дополнительными флагами из предыдущей таблицы. В следующей таблице показано, как растровые изображения соответствуют определенным правам доступа.

Точечный рисунок прав Набор определенных прав доступа
TRANSACTIONMANAGER_GENERIC_READ STANDARD_RIGHTS_READ и TRANSACTIONMANAGER_QUERY_INFORMATION
TRANSACTIONMANAGER_GENERIC_WRITE STANDARD_RIGHTS_WRITE, TRANSACTIONMANAGER_SET_INFORMATION, TRANSACTIONMANAGER_RECOVER, TRANSACTIONMANAGER_RENAME и TRANSACTIONMANAGER_CREATE_RM
TRANSACTIONMANAGER_GENERIC_EXECUTE STANDARD_RIGHTS_EXECUTE
TRANSACTIONMANAGER_ALL_ACCESS STANDARD_RIGHTS_REQUIRED, TRANSACTIONMANAGER_GENERIC_READ, TRANSACTIONMANAGER_GENERIC_WRITE и TRANSACTIONMANAGER_GENERIC_EXECUTE

[in, optional] ObjectAttributes

Указатель на структуру OBJECT_ATTRIBUTES , указывающую имя объекта и другие атрибуты. Используйте подпрограмму InitializeObjectAttributes для инициализации этой структуры. Если вызывающий объект не выполняется в контексте системного потока, он должен задать атрибут OBJ_KERNEL_HANDLE при вызове InitializeObjectAttributes. Этот параметр является необязательным и может иметь значение NULL.

[in, optional] LogFileName

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

[in, optional] CreateOptions

Необязательные флаги создания объектов. В следующей таблице содержатся доступные флаги, определенные в Ktmtypes.h.

Флаг параметра Значение
TRANSACTION_MANAGER_VOLATILE Объект диспетчера транзакций будет переменным. Таким образом, он не будет использовать файл журнала.
TRANSACTION_MANAGER_COMMIT_DEFAULT Только для внутреннего использования.
TRANSACTION_MANAGER_COMMIT_SYSTEM_VOLUME Только для внутреннего использования.
TRANSACTION_MANAGER_COMMIT_SYSTEM_HIVES Только для внутреннего использования.
TRANSACTION_MANAGER_COMMIT_LOWEST Только для внутреннего использования.
TRANSACTION_MANAGER_CORRUPT_FOR_RECOVERY Только для внутреннего использования.
TRANSACTION_MANAGER_CORRUPT_FOR_PROGRESS Только для внутреннего использования.

[in, optional] CommitStrength

Зарезервировано для последующего использования. Этот параметр должен быть равен нулю.

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

ZwCreateTransactionManager возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае эта подпрограмма может возвращать одно из следующих значений:

Код возврата Описание
STATUS_INVALID_PARAMETER
Недопустимое значение входного параметра.
STATUS_INSUFFICIENT_RESOURCES
KTM не удалось выделить системные ресурсы (обычно это память).
STATUS_LOG_CORRUPTION_DETECTED
KTM обнаружил ошибку при создании или открытии файла журнала.
STATUS_INVALID_ACL
Дескриптор безопасности содержит недопустимый список управления доступом (ACL).
STATUS_INVALID_SID
Дескриптор безопасности содержит недопустимый идентификатор безопасности (SID).
STATUS_OBJECT_NAME_EXISTS
Имя объекта, указанное параметром ObjectAttributes , уже существует.
STATUS_OBJECT_NAME_COLLISION
Операционная система обнаружила повторяющееся имя объекта. Ошибка может указывать на то, что поток журнала уже используется.
STATUS_OBJECT_NAME_INVALID
Недопустимое имя объекта, указанное в параметре ObjectAttributes .
STATUS_ACCESS_DENIED
Недопустимое значение параметра DesiredAccess .
 

Подпрограмма может возвращать другие значения NTSTATUS.

Комментарии

Если поток файлов журнала, который указывает параметр LogFileName , не существует, KTM вызывает CLFS для создания потока. Если поток уже существует, KTM вызывает CLFS, чтобы открыть поток.

Компонент TPS должен вызвать ZwRecoverTransactionManager после вызова ZwCreateTransactionManager

Если компонент TPS указывает флаг TRANSACTION_MANAGER_VOLATILE в параметре CreateOptions, все диспетчеры ресурсов, связанные с объектом диспетчера транзакций, должны указывать флаг RESOURCE_MANAGER_VOLATILE при вызове ZwCreateResourceManager.

Компонент TPS, вызывающий ZwCreateTransactionManager , должен в конечном итоге вызвать ZwClose , чтобы закрыть дескриптор объекта.

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

NtCreateTransactionManager и ZwCreateTransactionManager — это две версии одной и той же подпрограммы Windows Native System Services.

Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы собственных системных служб Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями процедуры NtXxx и ZwXxx см. в разделе Использование версий Nt и Zw для процедур собственных системных служб.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционной системы.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs, PowerIrpDDis

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

InitializeObjectAttributes

OBJECT_ATTRIBUTES

UNICODE_STRING

Использование версий Nt и Zw собственных процедур системных служб

ZwClose

ZwOpenTransactionManager

ZwQueryInformationTransactionManager

ZwRecoverTransactionManager

ZwRollforwardTransactionManager