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

Подпрограмма NtSetInformationToken изменяет сведения в указанном токене. Вызывающий процесс должен иметь соответствующие права доступа для задания сведений.

Синтаксис

__kernel_entry NTSYSCALLAPI NTSTATUS NtSetInformationToken(
  [in] HANDLE                  TokenHandle,
  [in] TOKEN_INFORMATION_CLASS TokenInformationClass,
  [in] PVOID                   TokenInformation,
  [in] ULONG                   TokenInformationLength
);

Параметры

[in] TokenHandle

Дескриптор маркера доступа, в котором необходимо изменить сведения.

[in] TokenInformationClass

Значение из перечисленного типа TOKEN_INFORMATION_CLASS , определяющего тип изменяемой информации. Возможные значения этого параметра перечислены в столбце TokenInformationClass Value таблицы, приведенной в описании параметра TokenInformation .

[in] TokenInformation

Указатель на буфер, предоставленный вызывающим объектом, содержащий сведения, которые необходимо изменить в маркере. Структура сведений в этом буфере зависит от значения TokenInformationClass, как показано в следующей таблице. Все структуры должны быть выровнены по 32-разрядной границе.

Значение TokenInformationClass Влияние на буфер TokenInformation
TokenDefaultDacl Буфер содержит структуру TOKEN_DEFAULT_DACL , указывающую daCL по умолчанию для вновь созданных объектов. TOKEN_ADJUST_DEFAULT для задания этих сведений требуется доступ. Содержимое буфера не проверяется на наличие структурной правильности или согласованности.
TokenGroups Недопустимый класс сведений. Эти данные доступны только для чтения.
TokenOwner Буфер содержит структуру TOKEN_OWNER , указывающую идентификатор безопасности владельца по умолчанию для вновь созданных объектов. TOKEN_ADJUST_DEFAULT для задания этих сведений требуется доступ. Значения владельца, которые могут быть указаны, ограничены идентификаторами пользователей и групп с атрибутом, указывающим, что они могут быть назначены владельцем объектов.
TokenPrimaryGroup Буфер содержит структуру TOKEN_PRIMARY_GROUP , указывающую идентификатор безопасности основной группы по умолчанию для вновь созданных объектов. TOKEN_ADJUST_DEFAULT для задания этих сведений требуется доступ. Должен быть одним из идентификаторов групп, которые уже есть в маркере.
TokenPrivileges Недопустимый класс сведений. Эти данные доступны только для чтения.
TokenSource Недопустимый класс сведений. Эти данные доступны только для чтения.
TokenStatistics Недопустимый класс сведений. Эти данные доступны только для чтения.
TokenUser Недопустимый класс сведений. Эти данные доступны только для чтения.

[in] TokenInformationLength

Размер в байтах структуры, переданной в буфер TokenInformation . Должно быть больше или равно минимальному значению, заданному в следующей таблице.

Значение TokenInformationClass Minimum TokenInformationLength
TokenDefaultDacl sizeof(TOKEN_DEFAULT_DACL)
TokenOwner sizeof(TOKEN_OWNER)
TokenPrimaryGroup sizeof(TOKEN_PRIMARY_GROUP)

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

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

Код возврата Описание
STATUS_ACCESS_DENIED TokenHandle не имеет требуемого доступа.
STATUS_ALLOTTED_SPACE_EXCEEDED Пространство, выделенное для хранения управления доступом по умолчанию, и идентификатор основной группы недостаточно велик, чтобы принять новое значение одного из этих полей.
STATUS_INFO_LENGTH_MISMATCH Значение TokenInformationLength меньше требуемого минимума.
STATUS_INSUFFICIENT_RESOURCES Не удалось записать сведения о безопасности указанного владельца по умолчанию.
STATUS_INVALID_HANDLE TokenHandle не является допустимым дескриптором.
STATUS_INVALID_INFO_CLASS TokenInformationClass не является допустимым классом сведений о токене.
STATUS_INVALID_OWNER Вызывающий объект не может задать указанный идентификатор владельцем (или владельцем по умолчанию) объекта.
STATUS_INVALID_PRIMARY_GROUP Вызывающий объект не может задать указанный идентификатор в качестве основной группы объекта.
STATUS_INVALID_SID Указанная информация о безопасности владельца по умолчанию недопустима.
STATUS_OBJECT_TYPE_MISMATCH TokenHandle не был дескриптором маркера.

Комментарии

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

Примечание

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

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

Требования

   
Минимальная версия клиента Windows 7
Целевая платформа Универсальное
Верхняя часть ntifs.h (include Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDDIs, PowerIrpDDis

См. также

NtQueryInformationToken

PsDereferenceImpersonationToken

PsDereferencePrimaryToken

SECURITY_IMPERSONATION_LEVEL

SID

SeQueryAuthenticationIdToken

SeQuerySubjectContextToken

SeTokenIsAdmin

SeTokenIsRestricted

TOKEN_DEFAULT_DACL

TOKEN_GROUPS

TOKEN_INFORMATION_CLASS

TOKEN_OWNER

TOKEN_PRIMARY_GROUP

TOKEN_PRIVILEGES

TOKEN_SOURCE

TOKEN_STATISTICS

TOKEN_TYPE

TOKEN_USER

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