ntOpenTransaction 函数 (wdm.h)

ZwOpenTransaction 例程获取现有事务对象的句柄。

语法

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenTransaction(
  [out]          PHANDLE            TransactionHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
  [in]           LPGUID             Uow,
  [in, optional] HANDLE             TmHandle
);

参数

[out] TransactionHandle

指向调用方分配的变量的指针,如果 ZwOpenTransaction 返回STATUS_SUCCESS,该变量接收事务对象的句柄。

[in] DesiredAccess

一个 ACCESS_MASK 值,该值指定调用方对事务对象的请求访问权限。 有关如何指定此参数的信息,请参阅 ZwCreateTransactionDesiredAccess 参数。

[in, optional] ObjectAttributes

指向 OBJECT_ATTRIBUTES 结构的指针,该结构指定对象的属性。 使用 InitializeObjectAttributes 例程初始化此结构,但仅指定该例程的 InitializedAttributesAttributes 参数。 如果调用方未在系统线程上下文中运行,则必须在 Attributes 参数中设置OBJ_KERNEL_HANDLE标志。 ObjectAttributes 参数是可选的,可以为 NULL

[in] Uow

指向 GUID 的指针,该 GUID 是事务对象 的工作单元 (UOW) 标识符。 此 GUID 标识要打开的事务对象。

[in, optional] TmHandle

事务管理器对象的句柄。 如果此参数不为 NULL,KTM 仅搜索属于指定事务管理器对象的事务对象。 如果此参数为 NULL,KTM 将搜索所有事务对象。

返回值

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

返回代码 说明
STATUS_INVALID_PARAMETER
DesiredAccessUow 参数为零。
STATUS_OBJECT_TYPE_MISMATCH
指定的句柄不是事务对象的句柄。
STATUS_INVALID_HANDLE
对象句柄无效。
STATUS_TRANSACTION_NOT_FOUND
KTM 找不到事务对象。
STATUS_ACCESS_DENIED
DesiredAccess 参数的值无效。
 

例程可能会返回其他 NTSTATUS 值

注解

通常,资源管理器在从以前调用 ZwCreateTransaction 的事务客户端收到事务 UOW 后调用 ZwOpenTransaction

有关 ZwOpenTransaction 的详细信息,请参阅创建资源管理器

NtOpenTransactionZwOpenTransaction 是同一 Windows Native System Services 例程的两个版本。

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

要求

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

另请参阅

ACCESS_MASK

InitializeObjectAttributes

OBJECT_ATTRIBUTES

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

ZwCommitTransaction

ZwCreateTransaction

ZwQueryInformationTransaction

ZwRollbackTransaction