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 例程的 NtXxx 和 ZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxx 和 ZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 |
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI,PowerIrpDDis |