Функция 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 |
См. также
использование версий собственных системных служб и Zw