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

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

Синтаксис

NTSYSAPI NTSTATUS ZwSetInformationToken(
  [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 Минимальное значение TokenInformationLength
TokenDefaultDacl sizeof(TOKEN_DEFAULT_DACL)
TokenOwner sizeof(TOKEN_OWNER)
TokenPrimaryGroup sizeof(TOKEN_PRIMARY_GROUP)

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

ZwSetInformationToken возвращает 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 для разработчиков драйверов и в документации по этим темам в windows SDK.

Примечание

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

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

Требования

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

См. также раздел

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 собственных системных служб

ZwQueryInformationToken