TmCreateEnlistment 함수(wdm.h)

TmCreateEnlistment 루틴은 트랜잭션에 대한 새 인리스트먼트 개체를 만듭니다.

구문

NTSTATUS TmCreateEnlistment(
  [out]          PHANDLE            EnlistmentHandle,
  [in]           KPROCESSOR_MODE    PreviousMode,
  [in]           ACCESS_MASK        DesiredAccess,
  [in]           POBJECT_ATTRIBUTES ObjectAttributes,
  [in]           PRKRESOURCEMANAGER ResourceManager,
  [in]           PKTRANSACTION      Transaction,
  [in, optional] ULONG              CreateOptions,
  [in]           NOTIFICATION_MASK  NotificationMask,
  [in, optional] PVOID              EnlistmentKey
);

매개 변수

[out] EnlistmentHandle

TmCreateEnlistment에 대한 호출이 성공하면 새 인리스트먼트 개체에 대한 핸들을 수신하는 호출자가 할당한 변수에 대한 포인터입니다.

[in] PreviousMode

인리스트먼트 핸들을 사용하여 인리스트먼트 개체에 액세스하는 프로세스의 프로세서 모드입니다. 이 값은 UserMode 또는 KernelMode여야 합니다.

[in] DesiredAccess

인리스트먼트 개체에 대한 호출자의 요청된 액세스를 지정하는 ACCESS_MASK 값입니다. 이 매개 변수에 대한 자세한 내용은 ZwCreateEnlistment에 대한 DesiredAccess 매개 변수에 대한 설명을 참조하세요.

[in] ObjectAttributes

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

[in] ResourceManager

리소스 관리자 개체에 대한 포인터입니다. 이 포인터를 가져오려면 구성 요소가 ObReferenceObjectByHandle 을 호출하고 ZwCreateResourceManager 또는 ZwOpenResourceManager 에 대한 이전 호출이 제공한 개체 핸들을 제공해야 합니다.

[in] Transaction

트랜잭션 개체에 대한 포인터입니다. 이 포인터를 가져오려면 구성 요소가 ObReferenceObjectByHandle 을 호출하고 ZwCreateTransaction 또는 ZwOpenTransaction 에 대한 이전 호출이 제공한 개체 핸들을 제공해야 합니다. KTM은 호출 리소스 관리자가 처리하는 트랜잭션 목록에 이 트랜잭션을 추가합니다.

[in, optional] CreateOptions

인리스트먼트 옵션 플래그입니다. 다음 표에는 사용 가능한 유일한 플래그가 포함되어 있습니다.

CreateOptions 플래그 의미
ENLISTMENT_SUPERIOR 호출자가 지정된 트랜잭션에 대해 우수한 트랜잭션 관리자 로 등록됩니다.
 

이 매개 변수는 선택 사항이며 0일 수 있습니다.

[in] NotificationMask

Ktmtypes.h에 정의된 TRANSACTION_NOTIFY_XXX 값의 비트 OR입니다. 이 마스크 값은 KTM이 호출자에게 보내는 트랜잭션 알림 유형을 지정합니다.

[in, optional] EnlistmentKey

인리스트먼트를 고유하게 식별하는 호출자 정의 정보에 대한 포인터입니다. 리소스 관리자는 ZwGetNotificationResourceManager 를 호출하거나 KTM이 ResourceManagerNotification 콜백 루틴을 호출할 때 이 포인터를 받습니다. 리소스 관리자는 TmReferenceEnlistmentKey 및 TmDereferenceEnlistmentKey 를 호출하여 이 키에 대한 참조 수를 유지할 수 있습니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

반환 값

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

반환 코드 설명
STATUS_INVALID_PARAMETER
CreateOptions 또는 NotificationMask 매개 변수의 값이 잘못되었거나, 트랜잭션 매개 변수가 지정하는 트랜잭션을 KTM에서 찾을 수 없습니다.
STATUS_INSUFFICIENT_RESOURCES
메모리 할당에 실패했습니다.
STATUS_TRANSACTIONMANAGER_NOT_ONLINE
KTM 또는 리소스 관리자가 작동 상태가 아니므로 인리스트먼트에 실패했습니다.
STATUS_TRANSACTION_NOT_ACTIVE
Transaction 매개 변수가 지정하는 트랜잭션이 활성 상태가 아니므로 인리스트먼트에 실패했습니다.
STATUS_TRANSACTION_SUPERIOR_EXISTS
호출자는 우수한 트랜잭션 관리자 로 등록하려고 했지만 우수한 인리스트먼트가 이미 있습니다.
STATUS_TM_VOLATILE
호출자가 우수한 트랜잭션 관리자로 등록하려고 하지만 호출자의 리소스 관리자 개체는 휘발성 이지만 연결된 트랜잭션 관리자 개체는 휘발성이 아닙니다.
STATUS_ACCESS_DENIED
DesiredAccess 매개 변수의 값이 잘못되었습니다.
 

루틴은 다른 NTSTATUS 값을 반환할 수 있습니다.

설명

TmCreateEnlistment 루틴은 ZwCreateEnlistment 루틴의 포인터 기반 버전입니다.

Zw Xxx 루틴 대신 KTM의 TmXxx 루틴을 사용하는 시기에 대한 자세한 내용은 TmXxx 루틴 사용을 참조하세요.

요구 사항

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

추가 정보

ACCESS_MASK

InitializeObjectAttributes

OBJECT_ATTRIBUTES

ObReferenceObjectByHandle

ResourceManagerNotification

ZwCreateEnlistment

ZwCreateResourceManager

ZwCreateTransaction

ZwGetNotificationResourceManager

ZwOpenResourceManager

ZwOpenTransaction