Функция 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