SeFilterToken 함수(ntifs.h)

SeFilterToken 루틴은 기존 액세스 토큰의 제한된 버전인 새 액세스 토큰을 만듭니다.

구문

NTSTATUS SeFilterToken(
  [in]           PACCESS_TOKEN     ExistingToken,
  [in]           ULONG             Flags,
  [in, optional] PTOKEN_GROUPS     SidsToDisable,
  [in, optional] PTOKEN_PRIVILEGES PrivilegesToDelete,
  [in, optional] PTOKEN_GROUPS     RestrictedSids,
                 PACCESS_TOKEN     *FilteredToken
);

매개 변수

[in] ExistingToken

기본 또는 가장 토큰에 대한 포인터입니다. 토큰은 제한된 토큰일 수도 있습니다. 이 토큰은 TOKEN_DUPLICATE 액세스를 위해 이미 열려 있어야 합니다. 이 포인터는 ObReferenceObjectByHandle을 호출하고 TOKEN_DUPLICATE DesiredAccess 형식으로 지정하여 기존 토큰 핸들에서 가져올 수 있습니다.

[in] Flags

추가 권한 옵션을 지정합니다. 이 매개 변수는 0이거나 다음 값의 조합일 수 있습니다.

의미
DISABLE_MAX_PRIVILEGE SE_CHANGE_NOTIFY_PRIVILEGE 제외한 새 토큰의 모든 권한을 사용하지 않도록 설정합니다. 이 값을 지정하면 PrivilegesToDelete 매개 변수가 무시됩니다.
SANDBOX_INERT 토큰에 TOKEN_SANDBOX_INERT 플래그를 저장합니다.

[in, optional] SidsToDisable

제한된 토큰에서 거부 전용 SID를 지정하는 SID_AND_ATTRIBUTES 구조체 배열을 포함하는 TOKEN_GROUPS 구조체에 대한 포인터입니다. 시스템은 거부 전용 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 플래그를 사용하여 SeQueryInformationToken 을 호출합니다. SeFilterToken 은 기존 토큰에서도 찾을 수 없는 배열의 모든 SID를 무시합니다.

SeFilterToken 은 SID_AND_ATTRIBUTES 구조체의 특성 멤버를 무시합니다.

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

[in, optional] PrivilegesToDelete

제한된 토큰에서 삭제할 권한을 지정하는 LUID_AND_ATTRIBUTES 구조의 배열을 포함하는 TOKEN_PRIVILEGES 구조체에 대한 포인터입니다.

기존 토큰에서 보유한 권한을 얻으려면 TokenPrivileges 플래그를 사용하여 SeQueryInformationToken 을 호출합니다. SeFilterToken 은 기존 토큰에서 보유하지 않는 배열의 모든 권한을 무시합니다.

SeFilterToken 은 LUID_AND_ATTRIBUTES 구조체의 특성 멤버를 무시합니다.

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

[in, optional] RestrictedSids

새 토큰에 대한 SID 제한 목록을 지정하는 SID_AND_ATTRIBUTES 구조체 배열을 포함하는 TOKEN_GROUPS 구조체에 대한 포인터입니다. 기존 토큰이 제한된 토큰인 경우 새 토큰에 대한 SID 제한 목록은 이 배열의 교차점과 기존 토큰에 대한 SID 제한 목록입니다.

SID_AND_ATTRIBUTES 구조체의 특성 멤버는 0이어야 합니다. SID 제한은 항상 액세스 검사에 사용하도록 설정됩니다.

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

FilteredToken

제한된 새 토큰의 주소를 수신하는 호출자가 할당한 변수에 대한 포인터입니다. 새 토큰은 기존 토큰과 동일한 형식( 기본 또는 가장)입니다.

반환 값

하나 이상의 매개 변수 값이 유효하지 않으면 SeFilterToken 은 STATUS_INVALID_PARAMETER 반환합니다. (대상 토큰이 가장 토큰이 아닌 경우 이 값이 반환됩니다.) 그렇지 않으면 SeFilterToken 은 STATUS_SUCCESS 반환합니다.

설명

SeFilterToken 은 다음과 같은 방법으로 토큰을 제한할 수 있습니다.

  • 토큰의 SID에 거부 전용 특성을 적용하여 보안 개체에 액세스하는 데 사용할 수 없습니다. 거부 전용 특성에 대한 자세한 내용은 Microsoft Windows SDK 설명서의 액세스 토큰의 SID 특성을 참조하세요.

  • 토큰에서 권한을 제거합니다.

  • 보안 개체에 대한 토큰의 액세스를 검사할 때 시스템에서 사용하는 SID 제한 목록을 지정합니다. 시스템은 두 가지 액세스 검사를 수행합니다. 하나는 토큰의 활성화된 SID를 사용하고 다른 하나는 SID 제한 목록을 사용합니다. 두 액세스 검사 모두 요청된 액세스 권한을 허용하는 경우에만 액세스 권한이 부여됩니다.

제한된 토큰을 SeCreateClientSecuritySeImpersonateClientEx 와 함께 사용하여 액세스 권한 및 권한이 제한된 프로세스를 만들 수 있습니다.

보안 및 액세스 제어에 대한 자세한 내용은 드라이버 개발자를 위한 Windows 보안 모델 및 Windows SDK의 이러한 topics 대한 설명서를 참조하세요.

NewToken에서 반환된 토큰이 더 이상 필요하지 않으면 ObDereferenceObject를 호출하여 토큰을 해제합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

추가 정보

LUID_AND_ATTRIBUTES

ObDereferenceObject

ObReferenceObjectByHandle

SID

SID_AND_ATTRIBUTES

SeCreateClientSecurity

SeImpersonateClientEx

SeQueryInformationToken

SeTokenIsRestricted

TOKEN_GROUPS

TOKEN_PRIVILEGES