Функция NtOpenThreadTokenEx (ntifs.h)
Подпрограмма NtOpenThreadTokenEx открывает маркер доступа, связанный с потоком.
Синтаксис
__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenThreadTokenEx(
[in] HANDLE ThreadHandle,
[in] ACCESS_MASK DesiredAccess,
[in] BOOLEAN OpenAsSelf,
[in] ULONG HandleAttributes,
[out] PHANDLE TokenHandle
);
Параметры
[in] ThreadHandle
Дескриптор для потока, маркер доступа которого должен быть открыт. Дескриптор должен иметь доступ THREAD_QUERY_INFORMATION. Используйте макрос NtCurrentThread , чтобы указать текущий поток.
[in] DesiredAccess
ACCESS_MASK структуры, указывающей запрошенные типы доступа к маркеру доступа. Эти запрошенные типы доступа сравниваются со списком управления доступом (DACL) маркера, чтобы определить, какие права доступа предоставляются или запрещаются.
[in] OpenAsSelf
Логическое значение, указывающее, следует ли выполнять проверка доступа в контексте безопасности потока, вызывающего NtOpenThreadTokenEx, или в контексте безопасности процесса для вызывающего потока.
Если этот параметр имеет значение FALSE, проверка доступа выполняется с помощью контекста безопасности вызывающего потока. Если поток олицетворяет клиента, этот контекст безопасности может быть контекстом клиентского процесса. Если этот параметр имеет значение TRUE, проверка доступа выполняется с использованием контекста безопасности процесса для вызывающего потока.
[in] HandleAttributes
Атрибуты для созданного дескриптора. В настоящее время поддерживается только OBJ_KERNEL_HANDLE. Если вызывающий объект не выполняется в контексте системного процесса, он должен указать OBJ_KERNEL_HANDLE для этого параметра.
[out] TokenHandle
Указатель на переменную, выделенную вызывающим объектом, которая получает дескриптор только что открытого маркера доступа.
Возвращаемое значение
NtOpenThreadTokenEx возвращает 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 не был дескриптором потока. |
Комментарии
NtOpenThreadTokenEx открывает маркер доступа, связанный с потоком, и возвращает дескриптор для этого маркера.
Параметр OpenAsSelf позволяет серверным процессам открывать маркер доступа для клиентского процесса, если клиентский процесс указал уровень олицетворения SecurityIdentification для перечисленного типа SECURITY_IMPERSONATION_LEVEL . Без этого параметра вызывающий процесс не сможет открыть маркер доступа клиента с помощью контекста безопасности клиента, так как невозможно открыть объекты исполнительного уровня с помощью уровня олицетворения SecurityIdentification.
Любой дескриптор, полученный путем вызова NtOpenThreadTokenEx , в конечном итоге должен быть освобожден путем вызова NtClose.
Подпрограммы драйвера, выполняемые в контексте процесса, отличном от контекста системного процесса, должны задавать атрибут OBJ_KERNEL_HANDLE для параметра HandleAttributesобъекта NtOpenThreadTokenEx. Это ограничивает использование дескриптора, возвращаемого NtOpenThreadTokenEx , процессами, выполняемыми в режиме ядра. В противном случае дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер.
Дополнительные сведения о безопасности и управлении доступом см. в статье Модель безопасности Windows для разработчиков драйверов и в документации по этим темам в Windows SDK.
Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы Собственные системные службы Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями подпрограмм NtXxx и ZwXxx см. в разделе Использование версий NT и Zw подпрограмм собственных системных служб.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP |
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Правила соответствия DDI | HwStorPortProhibitedDIs, PowerIrpDDis |