ImpersonateLoggedOnUser 함수를 사용하면 호출 스레드가 로그온한 사용자의 보안 컨텍스트를 가장할 수 있습니다. 사용자는 토큰 핸들로 표시됩니다.
Syntax
BOOL ImpersonateLoggedOnUser(
[in] HANDLE hToken
);
매개 변수
[in] hToken
로그온한 사용자를 나타내는 기본 또는 가장 액세스 토큰 에 대한 핸들입니다. LogonUser, CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken 또는 OpenThreadToken 함수에 대한 호출에서 반환되는 토큰 핸들일 수 있습니다. hToken이 기본 토큰에 대한 핸들인 경우 토큰에 TOKEN_QUERY 및 TOKEN_DUPLICATE 액세스 권한이 있어야 합니다. hToken이 가장 토큰에 대한 핸들인 경우 토큰에 TOKEN_QUERY 및 TOKEN_IMPERSONATE 액세스 권한이 있어야 합니다.
반환 값
함수가 성공하면 반환 값은 0이 아닌 값입니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 얻으려면 GetLastError를 호출합니다.
비고
가장은 스레드가 종료되거나 RevertToSelf를 호출할 때까지 지속됩니다.
호출 스레드는 ImpersonateLoggedOnUser를 호출하기 위한 특정 권한이 필요하지 않습니다.
ImpersonateLoggedOnUser에 대한 호출이 실패하면 클라이언트 연결이 가장되지 않고 클라이언트 요청이 프로세스의 보안 컨텍스트에서 수행됩니다. 프로세스가 LocalSystem과 같은 높은 권한의 계정으로 실행되거나 관리 그룹의 구성원으로 실행되는 경우 사용자는 그렇지 않은 경우 허용되지 않는 작업을 수행할 수 있습니다. 따라서 항상 호출의 반환 값을 확인하고 실패할 경우 오류를 발생시키고, 는 클라이언트 요청을 계속 실행하지 않습니다.
다음 중 하나가 true인 경우 ImpersonateLoggedOnUser 를 비롯한 모든 가장 함수는 요청된 가장을 허용합니다.
- 호출자에게 SeImpersonatePrivilege 권한이 있습니다.
- 프로세스(또는 호출자의 로그온 세션의 다른 프로세스)는 LogonUser 또는 LsaLogonUser 함수를 통해 명시적 자격 증명을 사용하여 토큰을 만들었습니다.
- 인증된 ID는 호출자와 동일합니다.
중요합니다
가장이 성공하려면 토큰에 가장 수준의 SecurityImpersonation 이상이 있어야 합니다. 호출자에게 SeImpersonatePrivilege가 있더라도 SecurityIdentification 또는 SecurityAnonymous 수준이 있는 토큰은 가장에 사용할 수 없습니다. SecurityIdentification 토큰은 ID 확인 및 ACL 검사를 허용하지만 가장은 허용하지 않습니다.
가장 수준 요구 사항
동작은 토큰의 가장 수준에 따라 달라집니다.
- SecurityAnonymous: 서버는 클라이언트 ID 정보를 가져올 수 없으며 클라이언트를 가장할 수 없습니다.
- SecurityIdentification: 서버는 클라이언트의 ID를 가져오고 액세스 유효성 검사를 수행할 수 있지만 클라이언트를 가장할 수는 없습니다. 이는 많은 시나리오의 기본 수준입니다.
- SecurityImpersonation: 서버는 로컬 시스템에서 클라이언트의 보안 컨텍스트를 가장할 수 있습니다. 이는 ImpersonateLoggedOnUser 가 성공하는 데 필요한 최소 수준입니다.
- SecurityDelegation: 서버는 원격 시스템뿐만 아니라 로컬에서도 클라이언트를 가장할 수 있습니다.
WINDOWS XP SP1 이하:SeImpersonatePrivilege 권한은 지원되지 않습니다.
가장에 대한 자세한 내용은 클라이언트 가장을 참조하세요.
요구 사항
| 요구 사항 | 가치 |
|---|---|
| 지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
| 지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
| 대상 플랫폼 | 윈도우즈 |
| Header | securitybaseapi.h(Windows.h 포함) |
| Library | Advapi32.lib |
| DLL | Advapi32.dll |