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


Функция 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. Используйте макрос NtCurrentProcess, определенный в Ntddk.h, чтобы указать текущий процесс.

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

Замечания

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

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

Подпрограммы драйверов, выполняемые в контексте процесса, отличные от системного процесса, должны задать атрибут OBJ_KERNEL_HANDLE для параметра HandleAttributesZwOpenProcessTokenEx. Это ограничивает использование дескриптора, возвращаемого ZwOpenProcessTokenEx процессам, выполняемым в режиме ядра. В противном случае дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер.

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

Заметка

Если вызов функции ZwOpenProcessTokenEx происходит в пользовательском режиме, следует использовать имя "NtOpenProcessTokenEx" вместо "ZwOpenProcessTokenEx".

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP
целевая платформа Всеобщий
заголовка ntifs.h (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
правил соответствия DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

См. также

ACCESS_MASK

ACL

PsDereferencePrimaryToken

использование версий собственных системных служб и Zw

ZwClose

ZwOpenThreadTokenEx