DuplicateTokenEx 함수(securitybaseapi.h)

DuplicateTokenEx 함수는 기존 토큰을 복제하는 새 액세스 토큰을 만듭니다. 이 함수는 기본 토큰 또는 가장 토큰을 만들 수 있습니다.

구문

BOOL DuplicateTokenEx(
  [in]           HANDLE                       hExistingToken,
  [in]           DWORD                        dwDesiredAccess,
  [in, optional] LPSECURITY_ATTRIBUTES        lpTokenAttributes,
  [in]           SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
  [in]           TOKEN_TYPE                   TokenType,
  [out]          PHANDLE                      phNewToken
);

매개 변수

[in] hExistingToken

TOKEN_DUPLICATE 액세스를 사용하여 열린 액세스 토큰에 대한 핸들입니다.

[in] dwDesiredAccess

새 토큰에 대해 요청된 액세스 권한을 지정합니다. DuplicateTokenEx 함수는 요청된 액세스 권한을 기존 토큰의 DACL(임의 액세스 제어 목록)과 비교하여 부여되거나 거부된 권한을 결정합니다. 기존 토큰과 동일한 액세스 권한을 요청하려면 0을 지정합니다. 호출자에게 유효한 모든 액세스 권한을 요청하려면 MAXIMUM_ALLOWED 지정합니다.

액세스 토큰에 대한 액세스 권한 목록은 Access-Token 개체에 대한 액세스 권한을 참조하세요.

[in, optional] lpTokenAttributes

새 토큰에 대한 보안 설명자를 지정하고 자식 프로세스가 토큰을 상속할 수 있는지 여부를 결정하는 SECURITY_ATTRIBUTES 구조체에 대한 포인터입니다. lpTokenAttributesNULL이면 토큰은 기본 보안 설명자를 가져오고 핸들을 상속할 수 없습니다. 보안 설명자에 SACL( 시스템 액세스 제어 목록 )이 포함된 경우 토큰은 dwDesiredAccess에서 요청되지 않았더라도 ACCESS_SYSTEM_SECURITY 액세스 권한을 얻습니다.

새 토큰의 보안 설명자에서 소유자를 설정하려면 호출자의 프로세스 토큰에 SE_RESTORE_NAME 권한 집합이 있어야 합니다.

[in] ImpersonationLevel

새 토큰의 가장 수준을 나타내는 SECURITY_IMPERSONATION_LEVEL 열거형의 값을 지정합니다.

[in] TokenType

TOKEN_TYPE 열거형에서 다음 값 중 하나를 지정합니다.

의미
TokenPrimary
새 토큰은 CreateProcessAsUser 함수에서 사용할 수 있는 기본 토큰입니다.
TokenImpersonation
새 토큰은 가장 토큰입니다.

[out] phNewToken

새 토큰을 수신하는 HANDLE 변수에 대한 포인터입니다.

새 토큰 사용을 마쳤으면 CloseHandle 함수를 호출하여 토큰 핸들을 닫습니다.

반환 값

함수가 성공하면 함수는 0이 아닌 값을 반환합니다.

함수가 실패하면 0을 반환합니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

DuplicateTokenEx 함수를 사용하면 CreateProcessAsUser 함수에서 사용할 수 있는 기본 토큰을 만들 수 있습니다. 이렇게 하면 클라이언트를 가장하는 서버 애플리케이션이 클라이언트의 보안 컨텍스트 가 있는 프로세스를 만들 수 있습니다. DuplicateToken 함수는 CreateProcessAsUser에 유효하지 않은 가장 토큰만 만들 수 있습니다.

다음은 DuplicateTokenEx 를 사용하여 기본 토큰을 만드는 일반적인 시나리오입니다. 서버 애플리케이션은 ImpersonateNamedPipeClient와 같은 가장 함수 중 하나를 호출하여 클라이언트를 가장하는 스레드를 만듭니다. 그런 다음 가장 스레드는 OpenThreadToken 함수를 호출하여 클라이언트의 보안 컨텍스트가 있는 가장 토큰 인 자체 토큰을 가져옵니다. 스레드는 TokenPrimary 플래그를 지정하여 DuplicateTokenEx 호출에서 이 가장 토큰을 지정합니다. DuplicateTokenEx 함수는 클라이언트의 보안 컨텍스트가 있는 기본 토큰을 만듭니다.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 securitybaseapi.h(Windows.h 포함)
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

Access Control

기본 Access Control 함수

CloseHandle

CreateProcessAsUser

DdeImpersonateClient

DuplicateToken

ImpersonateNamedPipeClient

OpenThreadToken

RevertToSelf

RpcImpersonateClient

SECURITY_ATTRIBUTES

SECURITY_IMPERSONATION_LEVEL