Функция NtOpenProcessToken (ntifs.h)

Подпрограмма NtOpenProcessToken открывает маркер доступа, связанный с процессом, и возвращает дескриптор, который можно использовать для доступа к маркеру.

Синтаксис

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenProcessToken(
  [in]  HANDLE      ProcessHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [out] PHANDLE     TokenHandle
);

Параметры

[in] ProcessHandle

Дескриптор процесса, маркер доступа которого должен быть открыт. Дескриптор должен иметь PROCESS_QUERY_INFORMATION доступ. Используйте макрос NtCurrentProcess , определенный в ntddk.h, чтобы указать текущий процесс.

[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 Вызывающий объект не имеет привилегии (SeSecurityPrivilege), необходимой для создания дескриптора маркера с доступом, указанным в параметре DesiredAccess .
STATUS_QUOTA_EXCEEDED Квоты памяти процесса недостаточно для выделения дескриптора маркера.
STATUS_UNSUCCESSFUL Не удалось создать дескриптор маркера.

Комментарии

Чтобы указать атрибуты для дескриптора маркера доступа, используйте вместо него NtOpenProcessTokenEx .

Дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер.

Любой дескриптор, полученный путем вызова NtOpenProcessToken , в конечном итоге должен быть освобожден путем вызова NtClose.

Дополнительные сведения о безопасности и управлении доступом см. в статье Модель безопасности Windows для разработчиков драйверов и в документации по этим темам в windows SDK.

Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы собственных системных служб Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями процедуры NtXxx и ZwXxx см. в разделе Использование версий Nt и Zw для процедур собственных системных служб.

Требования

Требование Значение
Заголовок ntifs.h
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

См. также раздел

ACCESS_MASK

ACL

PsDereferencePrimaryToken

NtClose

NtOpenProcessTokenEx

NtOpenThreadTokenEx