Функция NtOpenProcessToken (ntifs.h)
Подпрограмма NtOpenProcessToken открывает маркер доступа, связанный с процессом, и возвращает дескриптор, который можно использовать для доступа к маркеру.
Синтаксис
__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenProcessToken(
[in] HANDLE ProcessHandle,
[in] ACCESS_MASK DesiredAccess,
[out] PHANDLE TokenHandle
);
Параметры
[in] ProcessHandle
Дескриптор процесса, маркер доступа которого должен быть открыт. Дескриптор должен иметь PROCESS_QUERY_INFORMATION доступ. Используйте макрос NtCurrentProcess , определенный в ntddk.h, чтобы указать текущий процесс.
[in] DesiredAccess
ACCESS_MASK структуры, указывающей запрошенные типы доступа к маркеру доступа. Эти типы запрошенного доступа сравниваются со списком управления доступом (DACL) маркера, чтобы определить, какой доступ предоставляется или запрещается.
[out] TokenHandle
Указатель на переменную, выделенную вызывающим объектом, которая получает дескриптор только что открытого маркера доступа.
Возвращаемое значение
NtOpenProcessToken возвращает STATUS_SUCCESS или соответствующее состояние ошибки. Возможные коды состояния ошибок:
Код возврата | Описание |
---|---|
STATUS_ACCESS_DENIED | У ProcessHandle не было PROCESS_QUERY_INFORMATION доступа. |
STATUS_INSUFFICIENT_RESOURCES | Не удалось выделить новый дескриптор маркера. |
STATUS_INVALID_HANDLE | ProcessHandle не был допустимым дескриптором. |
STATUS_OBJECT_TYPE_MISMATCH | ProcessHandle не был дескриптором процесса. |
STATUS_PRIVILEGE_NOT_HELD | Вызывающий объект не имеет привилегии (SeSecurityPrivilege), необходимой для создания дескриптора маркера с доступом, указанным в параметре DesiredAccess . |
STATUS_QUOTA_EXCEEDED | Квоты памяти процесса недостаточно для выделения дескриптора маркера. |
STATUS_UNSUCCESSFUL | Не удалось создать дескриптор маркера. |
Комментарии
Чтобы указать атрибуты для дескриптора маркера доступа, используйте вместо него NtOpenProcessTokenEx .
Дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер.
Любой дескриптор, полученный путем вызова NtOpenProcessToken , в конечном итоге должен быть освобожден путем вызова NtClose.
Дополнительные сведения о безопасности и управлении доступом см. в статье Модель безопасности Windows для разработчиков драйверов и в документации по этим темам в windows SDK.
Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы собственных системных служб Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями процедуры NtXxx и ZwXxx см. в разделе Использование версий Nt и Zw для процедур собственных системных служб.
Требования
Требование | Значение |
---|---|
Заголовок | ntifs.h |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |