Поделиться через


Функция 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 для разработчиков драйверов и документации по этим разделам в пакете SDK для Windows.

Для вызовов драйверов в режиме ядра NtXxx и ZwXxx версии подпрограммы Windows Native System Services могут вести себя по-разному в том, как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между NtXxx и ZwXxx версиями подпрограммы см. в разделе Using Nt and Zw Versions of the Native System Services Routines.

Требования

Требование Ценность
заголовка ntifs.h
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

См. также

ACCESS_MASK

ACL

PsDereferencePrimaryToken

NtClose

NtOpenProcessTokenEx

NtOpenThreadTokenEx