ZwOpenProcessTokenEx 함수(ntifs.h)

ZwOpenProcessTokenEx 루틴은 프로세스와 연결된 액세스 토큰을 엽니다.

구문

NTSYSAPI NTSTATUS ZwOpenProcessTokenEx(
  [in]  HANDLE      ProcessHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  ULONG       HandleAttributes,
  [out] PHANDLE     TokenHandle
);

매개 변수

[in] ProcessHandle

액세스 토큰을 열 프로세스에 대한 핸들입니다. 핸들에는 PROCESS_QUERY_INFORMATION 액세스 권한이 있어야 합니다. Ntddk.h에 정의된 NtCurrentProcess 매크로를 사용하여 현재 프로세스를 지정합니다.

[in] DesiredAccess

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

[in] HandleAttributes

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

[out] TokenHandle

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

반환 값

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

반환 코드 설명
STATUS_ACCESS_DENIED ProcessHandle 에 PROCESS_QUERY_INFORMATION 액세스 권한이 없습니다.
STATUS_INSUFFICIENT_RESOURCES 새 토큰 핸들을 할당할 수 없습니다.
STATUS_INVALID_HANDLE ProcessHandle 이 유효한 핸들이 아니었습니다.
STATUS_INVALID_PARAMETER 지정된 HandleAttributes 에 OBJ_KERNEL_HANDLE 포함되지 않았습니다.
STATUS_OBJECT_TYPE_MISMATCH ProcessHandle 은 프로세스 핸들이 아니었습니다.
STATUS_PRIVILEGE_NOT_HELD 호출자에게 DesiredAccess 매개 변수에 지정된 액세스 권한이 있는 토큰 핸들을 만드는 데 필요한 권한(SeSecurityPrivilege)이 없습니다.
STATUS_QUOTA_EXCEEDED 프로세스의 메모리 할당량이 토큰 핸들을 할당하기에 충분하지 않습니다.
STATUS_UNSUCCESSFUL 토큰 핸들을 만들 수 없습니다.

설명

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

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

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

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

참고

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

커널 모드 드라이버에서 호출하는 경우 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

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

ZwClose

ZwOpenThreadTokenEx