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


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

Подпрограмма ZwOpenThreadTokenEx открывает маркер доступа, связанный с потоком.

Синтаксис

NTSYSAPI NTSTATUS ZwOpenThreadTokenEx(
  [in]  HANDLE      ThreadHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  BOOLEAN     OpenAsSelf,
  [in]  ULONG       HandleAttributes,
  [out] PHANDLE     TokenHandle
);

Параметры

[in] ThreadHandle

Дескриптор потока, маркер доступа которого должен быть открыт. Дескриптор должен иметь доступ THREAD_QUERY_INFORMATION. Используйте макрос NtCurrentThreadThread, чтобы указать текущий поток.

[in] DesiredAccess

ACCESS_MASK структура, указывающая запрошенные типы доступа к маркеру доступа. Эти запрошенные типы доступа сравниваются со списком управления доступом маркера (DACL), чтобы определить, какие права доступа предоставляются или запрещены.

[in] OpenAsSelf

Логическое значение, указывающее, следует ли проверять доступ к контексту безопасности вызывающего потока ZwOpenThreadTokenEx или в контексте безопасности процесса для вызывающего потока.

Если этот параметр FALSE, проверка доступа выполняется с помощью контекста безопасности для вызывающего потока. Если поток олицетворяет клиента, этот контекст безопасности может быть процессом клиента. Если этот параметр TRUE, проверка доступа выполняется с помощью контекста безопасности процесса для вызывающего потока.

[in] HandleAttributes

Атрибуты созданного дескриптора. В настоящее время поддерживается только OBJ_KERNEL_HANDLE. Если вызывающий объект не запущен в контексте системного процесса, он должен указать OBJ_KERNEL_HANDLE для этого параметра.

[out] TokenHandle

Указатель на выделенную вызывающим переменную, которая получает дескриптор только что открываемого маркера доступа.

Возвращаемое значение

ZwOpenThreadTokenEx возвращает STATUS_SUCCESS или соответствующее состояние ошибки. Возможные коды состояния ошибок включают следующие:

Возвращаемый код Описание
STATUS_ACCESS_DENIED ThreadHandle не было THREAD_QUERY_INFORMATION доступа.
STATUS_CANT_OPEN_ANONYMOUS Клиент запросил уровень олицетворения SecurityAnonymous. Однако анонимный маркер не может быть открыт. Дополнительные сведения см. в SECURITY_IMPERSONATION_LEVEL.
STATUS_INVALID_HANDLE ThreadHandle не является допустимым дескриптором.
STATUS_INVALID_PARAMETER Указанные HandleAttributes не включали OBJ_KERNEL_HANDLE.
STATUS_NO_TOKEN Предпринята попытка открыть маркер, связанный с потоком, который в настоящее время не олицетворяет клиента.
STATUS_OBJECT_TYPE_MISMATCH ThreadHandle не был дескриптором потока.

Замечания

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

Параметр OpenAsSelf позволяет серверу открывать маркер доступа для клиентского процесса, когда клиентский процесс указал уровень олицетворения SecurityIdentification для перечисленного типа SECURITY_IMPERSONATION_LEVEL. Без этого параметра вызывающий процесс не сможет открыть маркер доступа клиента с помощью контекста безопасности клиента, так как невозможно открыть объекты исполнительного уровня с помощью уровня олицетворения SecurityIdentification.

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

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

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

Заметка

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

Для вызовов драйверов в режиме ядра 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

SECURITY_IMPERSONATION_LEVEL

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

ZwClose

ZwOpenProcessTokenEx