NtCreateTransaction 函数 (wdm.h)

ZwCreateTransaction 例程创建 事务对象

语法

__kernel_entry NTSYSCALLAPI NTSTATUS NtCreateTransaction(
  [out]          PHANDLE            TransactionHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional] LPGUID             Uow,
  [in, optional] HANDLE             TmHandle,
  [in, optional] ULONG              CreateOptions,
  [in, optional] ULONG              IsolationLevel,
  [in, optional] ULONG              IsolationFlags,
  [in, optional] PLARGE_INTEGER     Timeout,
  [in, optional] PUNICODE_STRING    Description
);

参数

[out] TransactionHandle

如果调用 ZwCreateTransaction 成功,则指向接收新事务对象的句柄的调用方分配的变量的指针。

[in] DesiredAccess

一个 ACCESS_MASK 值,该值指定调用方请求对事务对象的访问。 除了为各种对象定义的访问权限(请参阅 ACCESS_MASK),调用方还可以为事务对象指定以下任何标志。

访问掩码 允许调用方
TRANSACTION_COMMIT 提交事务(请参阅 ZwCommitTransaction)。
TRANSACTION_ENLIST 为事务创建登记(请参阅 ZwCreateEnlistment)。
TRANSACTION_PROPAGATE 请勿使用。
TRANSACTION_QUERY_INFORMATION 获取有关事务的信息(请参阅 ZwQueryInformationTransaction)。
TRANSACTION_ROLLBACK 回滚事务(请参阅 ZwRollbackTransaction)。
TRANSACTION_SET_INFORMATION 设置事务的信息(请参阅 ZwSetInformationTransaction)。
 

或者,可以指定以下一个或多个ACCESS_MASK位图。 这些位图将上表中的标志与STANDARD_RIGHTS_XXX 标志组合在 ACCESS_MASK 参考页上。 还可以将这些位图与上表中的其他标志组合在一起。 下表显示了位图如何对应于特定的访问权限。

Rights bitmap 特定访问权限集
TRANSACTION_GENERIC_READ STANDARD_RIGHTS_READ、TRANSACTION_QUERY_INFORMATION 和 SYNCHRONIZE
TRANSACTION_GENERIC_WRITE STANDARD_RIGHTS_WRITE、TRANSACTION_SET_INFORMATION、TRANSACTION_COMMIT、TRANSACTION_ENLIST、TRANSACTION_ROLLBACK、TRANSACTION_PROPAGATE、TRANSACTION_SAVEPOINT 和 SYNCHRONIZE
TRANSACTION_GENERIC_EXECUTE STANDARD_RIGHTS_EXECUTE、TRANSACTION_COMMIT、TRANSACTION_ROLLBACK 和 SYNCHRONIZE
TRANSACTION_ALL_ACCESS STANDARD_RIGHTS_REQUIRED、TRANSACTION_GENERIC_READ、TRANSACTION_GENERIC_WRITE和TRANSACTION_GENERIC_EXECUTE
TRANSACTION_RESOURCE_MANAGER_RIGHTS STANDARD_RIGHTS_WRITE、TRANSACTION_GENERIC_READ、TRANSACTION_SET_INFORMATION、TRANSACTION_ENLIST、TRANSACTION_ROLLBACK、TRANSACTION_PROPAGATE 和 SYNCHRONIZE
 

通常,资源管理器指定TRANSACTION_RESOURCE_MANAGER_RIGHTS。

DesiredAccess 值不能为零。

[in, optional] ObjectAttributes

指向指定对象名称和其他属性的 OBJECT_ATTRIBUTES 结构的指针。 使用 InitializeObjectAttributes 例程初始化此结构。 如果调用方未在系统线程上下文中运行,则必须在调用 InitializeObjectAttributes时设置OBJ_KERNEL_HANDLE属性。 此参数是可选的,可以 NULL

[in, optional] Uow

指向 KTM 用作新事务对象的工作单位(UOW)标识符 的 GUID 的指针。 此参数是可选的,可以 NULL。 如果此参数 NULL,KTM 将生成 GUID 并将其分配给事务对象。 有关详细信息,请参阅以下“备注”部分。

[in, optional] TmHandle

事务管理器对象的句柄, 之前调用 ZwCreateTransactionManagerZwOpenTransactionManager获取。 KTM 将新事务对象分配给指定的事务管理器对象。 如果此参数 NULL,则 KTM 稍后向事务管理器分配新的事务对象,当资源管理器为事务创建登记时。

[in, optional] CreateOptions

可选对象创建标志。 下表包含可用标志,这些标志在 Ktmtypes.h 中定义。

选项标志 意义
TRANSACTION_DO_NOT_PROMOTE 保留以供将来使用。

[in, optional] IsolationLevel

保留以供将来使用。 调用方必须将此参数设置为零。

[in, optional] IsolationFlags

保留以供将来使用。 调用方应将此参数设置为零。

[in, optional] Timeout

指向超时值的指针。 如果事务未在此参数指定的时间提交,KTM 将回滚该事务。 超时值以系统时间单位(100 纳秒间隔)表示,可以指定绝对时间或相对时间。 如果 超时 指向的值为负值,则过期时间相对于当前系统时间。 否则,过期时间是绝对的。 此指针是可选的,如果不希望事务具有超时值,则可以 NULL。 如果 Timeout = NULL 或 *Timeout = 0,则事务永远不会超时。(也可以使用 ZwSetInformationTransaction 设置超时值。

[in, optional] Description

指向调用方提供的 UNICODE_STRING 结构的指针,该结构包含 NULL 终止的字符串。 该字符串提供事务的说明。 KTM 存储字符串的副本,并在写入日志流的消息中包含字符串。 最大字符串长度为MAX_TRANSACTION_DESCRIPTION_LENGTH。 此参数是可选的,可以 NULL

返回值

ZwCreateTransaction 如果作成功,则返回STATUS_SUCCESS。 否则,此例程可能会返回以下值之一:

返回代码 描述
STATUS_INVALID_PARAMETER
CreateOptions 参数包含无效标志、DesiredAccess 参数为零,或者 说明 参数的字符串太长。
STATUS_INSUFFICIENT_RESOURCES
KTM 无法分配系统资源(通常是内存)。
STATUS_INVALID_ACL
安全描述符包含无效的访问控制列表(ACL)。
STATUS_INVALID_SID
安全描述符包含无效的安全标识符(SID)。
STATUS_OBJECT_NAME_EXISTS
ObjectAttributes 参数指定的对象名称已存在。
STATUS_OBJECT_NAME_INVALID
ObjectAttributes 参数指定的对象名称无效。
STATUS_ACCESS_DENIED
DesiredAccess 参数的值无效。
 

例程可能会 返回其他NTSTATUS 值。

言论

调用方可以使用 Uow 参数为事务对象指定 UOW 标识符。 如果调用方未指定 UOW 标识符,KTM 将生成 GUID 并将其分配给事务对象。 调用方稍后可以通过调用 ZwQueryInformationTransaction来获取此 GUID。

通常,应让 KTM 为事务对象生成 GUID,除非组件与已为事务生成 UOW 标识符的另一个 TPS 组件通信。

若要关闭事务句柄,调用 ZwCreateTransaction 的组件必须调用 ZwClose。 如果在任何组件调用 ZwCommitTransaction 事务之前关闭最后一个事务句柄,KTM 将回滚事务。

若要详细了解事务客户端如何使用 ZwCreateTransaction,请参阅 创建事务客户端

对于内核模式驱动程序的调用,NtXxxZwXxx 版本的 Windows 本机系统服务例程的行为方式可能以不同的方式处理和解释输入参数。 有关 NtXxxZwXxx 例程之间的关系的详细信息,请参阅 使用 Nt 和 Zw 版本的本机系统服务例程

要求

要求 价值
最低支持的客户端 在 Windows Vista 和更高版本的作系统版本中可用。
目标平台 普遍
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI、PowerIrpDDis

另请参阅

ACCESS_MASK

InitializeObjectAttributes

OBJECT_ATTRIBUTES

UNICODE_STRING

使用本机系统服务例程的 Nt 和 Zw 版本

ZwClose

ZwCommitTransaction

ZwCreateEnlistment

ZwCreateTransactionManager

ZwOpenTransaction

ZwOpenTransactionManager

ZwQueryInformationTransaction

ZwRollbackTransaction

ZwSetInformationTransaction