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
[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 반환된 핸들을 커널 모드에서 실행되는 프로세스로 제한합니다. 그렇지 않으면 드라이버가 실행 중인 컨텍스트의 프로세스에서 핸들에 액세스할 수 있습니다.
보안 및 액세스 제어에 대한 자세한 내용은 드라이버 개발자를 위한
메모
ZwOpenThreadTokenEx 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwOpenThreadTokenEx" 대신 이름 "NtOpenThreadTokenEx ""를 사용해야 합니다.
커널 모드 드라이버의 호출의 경우 NtXxx 및 ZwXxx 버전의 Windows Native System Services 루틴은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP |
대상 플랫폼 | 보편적 |
헤더 | ntifs.h(Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL |
PASSIVE_LEVEL |
DDI 규정 준수 규칙 |
HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |
참고 항목
ACL
네이티브 시스템 서비스 루틴 Nt 및 Zw 버전 사용
ZwClose
ZwOpenProcessTokenEx