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


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

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

Синтаксис

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenThreadToken(
  [in]  HANDLE      ThreadHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  BOOLEAN     OpenAsSelf,
  [out] PHANDLE     TokenHandle
);

Параметры

[in] ThreadHandle

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

[in] DesiredAccess

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

[in] OpenAsSelf

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

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

[out] TokenHandle

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

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

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

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

Замечания

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

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

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP
заголовка ntifs.h
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe

См. также

ACCESS_MASK

ACL

NtOpenThreadTokenEx

PsDereferencePrimaryToken

SECURITY_IMPERSONATION_LEVEL

ZwClose

ZwOpenProcessTokenEx