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 结构,该结构指定新创建对象的默认所有者 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 sizeofTOKEN_DEFAULT_DACL
TokenOwner sizeofTOKEN_OWNER
TokenPrimaryGroup sizeofTOKEN_PRIMARY_GROUP

返回值

ZwSetInformationToken 返回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 中这些主题的文档。

注意

如果在用户模式下调用 ZwSetInformationToken 函数,则应使用名称 NtSetInformationToken“而不是”ZwSetInformationToken”。

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

要求

要求 价值
最低支持的客户端 Windows 7
目标平台 普遍
标头 ntifs.h (include 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