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 枚举类型的 值,用于标识要修改的信息的类型。 此参数的可能值列在 TokenInformation 参数的说明中显示的表的 TokenInformationClass Value 列中。

[in] TokenInformation

指向调用方提供的缓冲区的指针,该缓冲区包含令牌中要修改的信息。 此缓冲区中信息的结构取决于 TokenInformationClass 的值,如下表所示。 所有结构都必须在 32 位边界上对齐。

TokenInformationClass 值 对 TokenInformation 缓冲区的影响
TokenDefaultDacl 缓冲区包含 一个 TOKEN_DEFAULT_DACL 结构,该结构指定新创建的对象的默认 DACL 。 设置此信息需要TOKEN_ADJUST_DEFAULT访问权限。 不会验证缓冲区内容的结构正确性或一致性。
TokenGroups 不是有效的信息类。 此信息为只读信息。
TokenOwner 缓冲区包含 一个TOKEN_OWNER 结构,该结构指定新创建的对象的默认所有者 SID 。 设置此信息需要TOKEN_ADJUST_DEFAULT访问权限。 可以指定的所有者值仅限于用户和组 ID,其属性指示它们可以分配为对象的所有者。
TokenPrimaryGroup 缓冲区包含 一个 TOKEN_PRIMARY_GROUP 结构,该结构指定新创建的对象的默认主组 SID 。 设置此信息需要TOKEN_ADJUST_DEFAULT访问权限。 必须是令牌中已有的组 ID 之一。
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 为存储默认自由访问控制和主组 ID 分配的空间不够大,无法接受其中一个字段的新值。
STATUS_INFO_LENGTH_MISMATCH TokenInformationLength 的值小于所需的最小值。
STATUS_INSUFFICIENT_RESOURCES 无法捕获指定的默认所有者的安全信息。
STATUS_INVALID_HANDLE TokenHandle 不是有效的句柄。
STATUS_INVALID_INFO_CLASS TokenInformationClass 不是有效的令牌信息类。
STATUS_INVALID_OWNER 调用方无法将指定的 ID 设置为对象的所有者 (或默认所有者) 。
STATUS_INVALID_PRIMARY_GROUP 调用方无法将指定的 ID 设置为对象的主组。
STATUS_INVALID_SID 指定的默认所有者的安全信息无效。
STATUS_OBJECT_TYPE_MISMATCH TokenHandle 不是令牌句柄。

注解

有关安全性和访问控制的详细信息,请参阅 面向驱动程序开发人员的 Windows 安全模型 和 Windows SDK 中有关这些主题的文档。

注意

如果对 NtSetInformationToken 函数的调用在内核模式下发生,则应使用名称“ZwSetInformationToken”而不是“NtSetInformationToken”。

对于来自内核模式驱动程序的调用,Windows Native System Services 例程的 NtXxxZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxxZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本

要求

要求
最低受支持的客户端 Windows 7
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI,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 版本