다음을 통해 공유


ZwOpenThreadTokenEx 함수(ntifs.h)

ZwOpenThreadTokenEx 루틴은 스레드와 연결된 액세스 토큰을 엽니다.

구문

NTSYSAPI NTSTATUS ZwOpenThreadTokenEx(
  [in]  HANDLE      ThreadHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  BOOLEAN     OpenAsSelf,
  [in]  ULONG       HandleAttributes,
  [out] PHANDLE     TokenHandle
);

매개 변수

[in] ThreadHandle

액세스 토큰을 열 스레드에 대한 핸들입니다. 핸들에는 THREAD_QUERY_INFORMATION 액세스 권한이 있어야 합니다. NtCurrentThread 매크로를 사용하여 현재 스레드를 지정합니다.

[in] DesiredAccess

액세스 토큰에 대한 요청된 액세스 유형을 지정하는 ACCESS_MASK 구조입니다. 이러한 요청된 액세스 유형은 토큰의 DACL(임의 액세스 제어 목록)과 비교하여 부여되거나 거부된 액세스 권한을 결정합니다.

[in] OpenAsSelf

ZwOpenThreadTokenEx를 호출하는 스레드의 보안 컨텍스트 또는 호출 스레드에 대한 프로세스의 보안 컨텍스트에 대해 액세스 검사 지정할지 여부를 지정하는 부울 값입니다.

이 매개 변수가 FALSE이면 호출 스레드에 대한 보안 컨텍스트를 사용하여 검사 액세스가 수행됩니다. 스레드가 클라이언트를 가장하는 경우 이 보안 컨텍스트는 클라이언트 프로세스의 컨텍스트일 수 있습니다. 이 매개 변수가 TRUE이면 호출 스레드에 대한 프로세스의 보안 컨텍스트를 사용하여 검사 액세스가 이루어집니다.

[in] HandleAttributes

만든 핸들의 특성입니다. 현재는 OBJ_KERNEL_HANDLE만 지원됩니다. 호출자가 시스템 프로세스 컨텍스트에서 실행되고 있지 않으면 이 매개 변수에 대한 OBJ_KERNEL_HANDLE 지정해야 합니다.

[out] TokenHandle

새로 연 액세스 토큰에 대한 핸들을 수신하는 호출자가 할당한 변수에 대한 포인터입니다.

반환 값

ZwOpenThreadTokenEx는 STATUS_SUCCESS 또는 적절한 오류 상태 반환합니다. 가능한 오류 상태 코드에는 다음이 포함됩니다.

반환 코드 설명
STATUS_ACCESS_DENIED ThreadHandle 에 THREAD_QUERY_INFORMATION 액세스 권한이 없습니다.
STATUS_CANT_OPEN_ANONYMOUS 클라이언트가 SecurityAnonymous 가장 수준을 요청했습니다. 그러나 익명 토큰을 열 수 없습니다. 자세한 내용은 SECURITY_IMPERSONATION_LEVEL 참조하세요.
STATUS_INVALID_HANDLE ThreadHandle 이 유효한 핸들이 아니었습니다.
STATUS_INVALID_PARAMETER 지정한 HandleAttributes 에는 OBJ_KERNEL_HANDLE 포함되지 않았습니다.
STATUS_NO_TOKEN 현재 클라이언트를 가장하지 않는 스레드와 연결된 토큰을 열려고 했습니다.
STATUS_OBJECT_TYPE_MISMATCH ThreadHandle 이 스레드 핸들이 아니었습니다.

설명

ZwOpenThreadTokenEx 는 스레드와 연결된 액세스 토큰을 열고 해당 토큰에 대한 핸들을 반환합니다.

OpenAsSelf 매개 변수를 사용하면 클라이언트 프로세스가 SECURITY_IMPERSONATION_LEVEL 열거형 형식에 대한 SecurityIdentification 가장 수준을 지정한 경우 서버 프로세스에서 클라이언트 프로세스에 대한 액세스 토큰을 열 수 있습니다. 이 매개 변수가 없으면 호출 프로세스는 SecurityIdentification 가장 수준을 사용하여 임원 수준 개체를 열 수 없으므로 클라이언트의 보안 컨텍스트를 사용하여 클라이언트의 액세스 토큰을 열 수 없습니다.

ZwOpenThreadTokenEx를 호출하여 얻은 모든 핸들은 결국 ZwClose를 호출하여 해제되어야 합니다.

시스템 프로세스 이외의 프로세스 컨텍스트에서 실행되는 드라이버 루틴은 ZwOpenThreadTokenExHandleAttributes 매개 변수에 대한 OBJ_KERNEL_HANDLE 특성을 설정해야 합니다. 이렇게 하면 ZwOpenThreadTokenEx 에서 반환된 핸들의 사용이 커널 모드에서 실행되는 프로세스로 제한됩니다. 그렇지 않으면 드라이버가 실행 중인 컨텍스트의 프로세스에서 핸들에 액세스할 수 있습니다.

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

참고

ZwOpenThreadTokenEx 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwOpenThreadTokenEx" 대신 "NtOpenThreadTokenEx"라는 이름을 사용해야 합니다.

커널 모드 드라이버에서 호출하는 경우 Windows 네이티브 시스템 서비스 루틴의 NtXxxZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 NtXxx 버전과 ZwXxx 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

추가 정보

<ACCESS_MASK

ACL

PsDereferencePrimaryToken

SECURITY_IMPERSONATION_LEVEL

네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용

ZwClose

ZwOpenProcessTokenEx