CreateRestrictedToken 함수(securitybaseapi.h)
CreateRestrictedToken 함수는 기존 액세스 토큰의 제한된 버전인 새 액세스 토큰을 만듭니다. 제한된 토큰에는 SID( 보안 식별자 ) 사용 안 함, 삭제된 권한 및 제한 SID 목록이 있을 수 있습니다. 자세한 내용은 제한된 토큰을 참조하세요.
구문
BOOL CreateRestrictedToken(
[in] HANDLE ExistingTokenHandle,
[in] DWORD Flags,
[in] DWORD DisableSidCount,
[in, optional] PSID_AND_ATTRIBUTES SidsToDisable,
[in] DWORD DeletePrivilegeCount,
[in, optional] PLUID_AND_ATTRIBUTES PrivilegesToDelete,
[in] DWORD RestrictedSidCount,
[in, optional] PSID_AND_ATTRIBUTES SidsToRestrict,
[out] PHANDLE NewTokenHandle
);
매개 변수
[in] ExistingTokenHandle
기본 또는 가장 토큰에 대한 핸들입니다. 토큰은 제한된 토큰일 수도 있습니다. 핸들에는 토큰에 대한 TOKEN_DUPLICATE 액세스 권한이 있어야 합니다.
[in] Flags
추가 권한 옵션을 지정합니다. 이 매개 변수는 0이거나 다음 값의 조합일 수 있습니다.
값 | 의미 |
---|---|
|
SeChangeNotifyPrivilege 권한을 제외한 새 토큰의 모든 권한을 사용하지 않도록 설정합니다. 이 값을 지정하면 DeletePrivilegeCount 및 PrivilegesToDelete 매개 변수가 무시됩니다. |
|
이 값을 사용하는 경우 시스템에서 AppLocker 규칙을 검사 않거나 소프트웨어 제한 정책을 적용하지 않습니다. AppLocker의 경우 이 플래그는 실행 파일, Windows Installer, 스크립트 및 DLL의 네 가지 규칙 컬렉션 모두에 대한 검사를 사용하지 않도록 설정합니다.
설치하는 동안 추출된 DLL을 실행해야 하는 설치 프로그램을 만들 때 SaferComputeTokenFromLevel 함수에서 플래그 SAFER_TOKEN_MAKE_INERT 사용합니다. GetTokenInformation을 사용하여 이 플래그의 존재에 대한 토큰을 쿼리할 수 있습니다. Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: KB2532445 설치된 시스템에서 호출자는 LocalSystem 또는 TrustedInstaller로 실행되어야 합니다. 그렇지 않으면 시스템에서 이 플래그를 무시합니다. 자세한 내용은 의 도움말 및 지원 기술 자료에서 http://support.microsoft.com/kb/2532445"Windows 7 또는 Windows Server 2008 R2를 실행하는 컴퓨터에서 Office 매크로를 사용하여 AppLocker 규칙을 우회할 수 있습니다."를 참조하세요. Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: AppLocker는 지원되지 않습니다. AppLocker는 Windows 7 및 Windows Server 2008 R2에서 도입되었습니다. |
|
새 토큰은 LUA 토큰입니다.
Windows Server 2003 및 Windows XP: 이 값은 지원되지 않습니다. |
|
새 토큰에는 쓰기 액세스를 평가할 때만 고려되는 제한 SID가 포함되어 있습니다.
WINDOWS XP SP2 이상: 이 상수의 값은 0x4. 애플리케이션이 WINDOWS XP와 SP2 이상 운영 체제와 호환되려면 애플리케이션은 GetVersionEx 함수를 호출하여 사용해야 하는 값을 확인하여 운영 체제를 쿼리해야 합니다. Windows Server 2003 및 Windows XP SP1 이하: 이 값은 지원되지 않습니다. |
[in] DisableSidCount
SidsToDisable 배열의 항목 수를 지정합니다.
[in, optional] SidsToDisable
제한된 토큰에서 거부 전용 SID를 지정하는 SID_AND_ATTRIBUTES 구조체 배열에 대한 포인터입니다. 시스템은 거부 전용 SID를 사용하여 보안 개체에 대한 액세스를 거부합니다. 거부 전용 SID가 없을 경우 액세스를 허용하지 않습니다.
SID를 사용하지 않도록 설정하면 SE_GROUP_USE_FOR_DENY_ONLY 켜지고 SE_GROUP_ENABLED 꺼지고 SE_GROUP_ENABLED_BY_DEFAULT. 다른 모든 특성은 무시됩니다.
거부 전용 특성은 사용자 SID 및 SE_GROUP_MANDATORY 특성이 있는 그룹 SID를 포함하여 기존 토큰의 SID 조합에 적용됩니다. 기존 토큰과 연결된 SID를 얻으려면 TokenUser 및 TokenGroups 플래그와 함께 GetTokenInformation 함수를 사용합니다. 함수는 기존 토큰에서도 찾을 수 없는 배열의 모든 SID를 무시합니다.
함수는 SID_AND_ATTRIBUTES 구조체의 Attributes 멤버를 무시합니다.
SID를 사용하지 않도록 설정하지 않으면 이 매개 변수는 NULL 일 수 있습니다.
[in] DeletePrivilegeCount
PrivilegesToDelete 배열의 항목 수를 지정합니다.
[in, optional] PrivilegesToDelete
제한된 토큰에서 삭제할 권한을 지정하는 LUID_AND_ATTRIBUTES 구조체 배열에 대한 포인터입니다.
GetTokenInformation 함수를 TokenPrivileges 플래그와 함께 사용하여 기존 토큰이 보유한 권한을 검색할 수 있습니다. 함수는 기존 토큰에서 보유하지 않는 배열의 모든 권한을 무시합니다.
함수는 LUID_AND_ATTRIBUTES 구조체의 Attributes 멤버를 무시합니다.
권한을 삭제하지 않으려면 이 매개 변수는 NULL 일 수 있습니다.
호출 프로그램이 이 배열에서 너무 많은 권한을 통과하면 CreateRestrictedToken 은 ERROR_INVALID_PARAMETER 반환합니다.
[in] RestrictedSidCount
SidsToRestrict 배열의 항목 수를 지정합니다.
[in, optional] SidsToRestrict
새 토큰에 대한 SID 제한 목록을 지정하는 SID_AND_ATTRIBUTES 구조체 배열에 대한 포인터입니다. 기존 토큰이 제한된 토큰인 경우 새 토큰에 대한 SID 제한 목록은 이 배열의 교차점과 기존 토큰에 대한 SID 제한 목록입니다. SidsToRestrict 매개 변수에 배치된 중복 SID를 제거하기 위해 검사 수행되지 않습니다. 중복 SID를 사용하면 제한된 토큰이 제한 SID 목록에 중복 정보를 포함할 수 있습니다.
SID_AND_ATTRIBUTES 구조체의 Attributes 멤버는 0이어야 합니다. SID 제한은 항상 액세스 검사에 사용하도록 설정됩니다.
제한 SID를 지정하지 않으려면 이 매개 변수는 NULL 일 수 있습니다.
[out] NewTokenHandle
제한된 새 토큰에 대한 핸들을 수신하는 변수에 대한 포인터입니다. 이 핸들은 ExistingTokenHandle과 동일한 액세스 권한을 갖습니다. 새 토큰은 기존 토큰과 동일한 형식, 기본 또는 가장입니다. NewTokenHandle에서 반환된 핸들을 복제할 수 있습니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
설명
CreateRestrictedToken 함수는 다음과 같은 방법으로 토큰을 제한할 수 있습니다.
- 토큰의 SID에 거부 전용 특성을 적용하여 보안 개체에 액세스하는 데 사용할 수 없습니다. 거부 전용 특성에 대한 자세한 내용은 액세스 토큰의 SID 특성을 참조하세요.
- 토큰에서 권한을 제거합니다 .
- 시스템에서 보안 개체에 대한 토큰의 액세스를 검사할 때 사용하는 SID 제한 목록을 지정합니다. 시스템은 두 가지 액세스 검사를 수행합니다. 하나는 토큰의 활성화된 SID를 사용하고 다른 하나는 SID 제한 목록을 사용합니다. 두 액세스 검사 모두 요청된 액세스 권한을 허용하는 경우에만 액세스 권한이 부여됩니다.
ImpersonateLoggedOnUser 함수에서 제한된 토큰을 사용할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | securitybaseapi.h(Windows.h 포함) |
라이브러리 | Advapi32.lib |
DLL | Advapi32.dll |