NtOpenProcessToken 함수(ntifs.h)
NtOpenProcessToken 루틴은 프로세스와 연결된 액세스 토큰을 열고 해당 토큰에 액세스하는 데 사용할 수 있는 핸들을 반환합니다.
구문
__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenProcessToken(
[in] HANDLE ProcessHandle,
[in] ACCESS_MASK DesiredAccess,
[out] PHANDLE TokenHandle
);
매개 변수
[in] ProcessHandle
액세스 토큰을 열 프로세스에 대한 핸들입니다. 핸들에는 PROCESS_QUERY_INFORMATION 액세스 권한이 있어야 합니다. Ntddk.h에 정의된 NtCurrentProcess 매크로를 사용하여 현재 프로세스를 지정합니다.
[in] DesiredAccess
ACCESS_MASK 액세스 토큰에 대한 요청된 액세스 유형을 지정하는 구조입니다. 이러한 요청된 액세스 유형은 토큰의 DACL(임의 액세스 제어 목록)과 비교하여 어떤 액세스가 부여되거나 거부되는지 확인합니다.
[out] TokenHandle
새로 열린 액세스 토큰에 대한 핸들을 수신하는 호출자가 할당한 변수에 대한 포인터입니다.
반환 값
NtOpenProcessToken은 STATUS_SUCCESS 또는 적절한 오류 상태 반환합니다. 가능한 오류 상태 코드에는 다음이 포함됩니다.
반환 코드 | 설명 |
---|---|
STATUS_ACCESS_DENIED | ProcessHandle 에 PROCESS_QUERY_INFORMATION 액세스 권한이 없습니다. |
STATUS_INSUFFICIENT_RESOURCES | 새 토큰 핸들을 할당할 수 없습니다. |
STATUS_INVALID_HANDLE | ProcessHandle 이 유효한 핸들이 아니었습니다. |
STATUS_OBJECT_TYPE_MISMATCH | ProcessHandle 은 프로세스 핸들이 아니었습니다. |
STATUS_PRIVILEGE_NOT_HELD | 호출자에게 DesiredAccess 매개 변수에 지정된 액세스 권한이 있는 토큰 핸들을 만드는 데 필요한 권한(SeSecurityPrivilege)이 없습니다. |
STATUS_QUOTA_EXCEEDED | 프로세스의 메모리 할당량이 토큰 핸들을 할당하기에 충분하지 않습니다. |
STATUS_UNSUCCESSFUL | 토큰 핸들을 만들 수 없습니다. |
설명
액세스 토큰 핸들에 대한 특성을 지정하려면 NtOpenProcessTokenEx 를 대신 사용합니다.
핸들은 드라이버가 실행 중인 컨텍스트의 프로세스에서 액세스할 수 있습니다.
NtOpenProcessToken을 호출하여 얻은 모든 핸들은 결국 NtClose를 호출하여 해제되어야 합니다.
보안 및 액세스 제어에 대한 자세한 내용은 드라이버 개발자를 위한 Windows 보안 모델 및 Windows SDK의 이러한 topics 대한 설명서를 참조하세요.
커널 모드 드라이버에서 호출하는 경우 Windows 네이티브 시스템 서비스 루틴의 NtXxx 및 ZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 NtXxx 버전과 ZwXxx 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | ntifs.h |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
추가 정보
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기