다음을 통해 공유


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 비트맵 중 하나 이상을 지정할 수 있습니다. 이러한 비트맵은 이전 테이블의 플래그를 ACCESS_MASK 참조 페이지에 설명된 STANDARD_RIGHTS_XXX 플래그와 결합합니다. 이러한 비트맵을 이전 테이블의 추가 플래그와 결합할 수도 있습니다. 다음 표에서는 비트맵이 특정 액세스 권한에 해당하는 방법을 보여줍니다.

권한 비트맵 특정 액세스 권한 집합
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 값은 0일 수 없습니다.

[in, optional] ObjectAttributes

개체 이름 및 기타 특성을 지정하는 OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. InitializeObjectAttributes 루틴을 사용하여 이 구조를 초기화합니다. 호출자가 시스템 스레드 컨텍스트에서 실행되고 있지 않으면 InitializeObjectAttributes를 호출할 때 OBJ_KERNEL_HANDLE 특성을 설정해야 합니다. 이 매개 변수는 선택 사항이며 NULL 수 있습니다.

[in, optional] Uow

KTM이 새 트랜잭션 개체의 UOW(작업 단위) 식별자사용하는 GUID에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL 수 있습니다. 이 매개 변수가 NULL 경우 KTM은 GUID를 생성하고 트랜잭션 개체에 할당합니다. 자세한 내용은 다음 설명 섹션을 참조하세요.

[in, optional] TmHandle

ZwCreateTransactionManager 또는 ZwOpenTransactionManager대한 이전 호출에서 얻은 트랜잭션 관리자 개체 대한 핸들입니다. KTM은 지정된 트랜잭션 관리자 개체에 새 트랜잭션 개체를 할당합니다. 이 매개 변수가 NULL 경우 KTM은 나중에 리소스 관리자가 트랜잭션에 대한 인리스트먼트를 만들 때 새 트랜잭션 개체를 트랜잭션 관리자에 할당합니다.

[in, optional] CreateOptions

선택적 개체 만들기 플래그입니다. 다음 표에는 Ktmtypes.h에 정의된 사용 가능한 플래그가 포함되어 있습니다.

옵션 플래그 의미
TRANSACTION_DO_NOT_PROMOTE 나중에 사용할 수 있습니다.

[in, optional] IsolationLevel

나중에 사용할 수 있습니다. 호출자는 이 매개 변수를 0으로 설정해야 합니다.

[in, optional] IsolationFlags

나중에 사용할 수 있습니다. 호출자는 이 매개 변수를 0으로 설정해야 합니다.

[in, optional] Timeout

제한 시간 값에 대한 포인터입니다. 이 매개 변수로 지정된 시간까지 트랜잭션이 커밋되지 않은 경우 KTM은 트랜잭션을 롤백합니다. 제한 시간 값은 시스템 시간 단위(100나노초 간격)로 표현되며 절대 시간 또는 상대 시간을 지정할 수 있습니다. 시간 제한 가리키는 값이 음수이면 만료 시간은 현재 시스템 시간을 기준으로 합니다. 그렇지 않으면 만료 시간이 절대입니다. 이 포인터는 선택 사항이며 트랜잭션에 제한 시간 값이 없도록 하려면 NULL 수 있습니다. 시간 제한 = NULL 또는 *제한 시간 = 0이면 트랜잭션이 시간 초과되지 않습니다. (ZwSetInformationTransaction 사용하여 제한 시간 값을 설정할 수도 있습니다.)

[in, optional] Description

NULL로 끝나는 문자열을 포함하는 호출자 제공 UNICODE_STRING 구조체에 대한 포인터입니다. 문자열은 트랜잭션에 대한 설명을 제공합니다. KTM은 문자열의 복사본을 저장하고 로그 스트림에 쓰는 메시지에 문자열을 포함합니다. 최대 문자열 길이는 MAX_TRANSACTION_DESCRIPTION_LENGTH. 이 매개 변수는 선택 사항이며 NULL 수 있습니다.

반환 값

ZwCreateTransaction 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 루틴이 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 묘사
STATUS_INVALID_PARAMETER
CreateOptions 매개 변수에 잘못된 플래그가 포함되어 있거나, DesiredAccess 매개 변수가 0이거나, Description 매개 변수의 문자열이 너무 깁니다.
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를 가져올 수 있습니다.

일반적으로 구성 요소가 트랜잭션에 대한 UOW 식별자를 이미 생성한 다른 TPS 구성 요소와 통신하지 않는 한 KTM에서 트랜잭션 개체에 대한 GUID를 생성하도록 허용해야 합니다.

트랜잭션 핸들을 닫기 위해 ZwCreateTransaction 호출한 구성 요소는 ZwClose호출해야 합니다. 트랜잭션에 대한 ZwCommitTransaction 구성 요소를 호출하기 전에 마지막 트랜잭션 핸들이 닫히면 KTM이 트랜잭션을 롤백합니다.

트랜잭션 클라이언트에서 ZwCreateTransaction사용하는 방법에 대한 자세한 내용은 트랜잭션 클라이언트만들기를 참조하세요.

커널 모드 드라이버의 호출의 경우 NtXxxZwXxx 버전의 Windows Native System Services 루틴은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. NtXxxZwXxx 루틴 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴 Nt 및 Zw 버전 사용참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows Vista 이상 운영 체제 버전에서 사용할 수 있습니다.
대상 플랫폼 보편적
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs, PowerIrpDDis

참고 항목

ACCESS_MASK

InitializeObjectAttributes

OBJECT_ATTRIBUTES

UNICODE_STRING

네이티브 시스템 서비스 루틴 Nt 및 Zw 버전 사용

ZwClose

ZwCommitTransaction

ZwCreateEnlistment

ZwCreateTransactionManager

ZwOpenTransaction

ZwOpenTransactionManager

ZwQueryInformationTransaction

ZwRollbackTransaction

ZwSetInformationTransaction