You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GetTokenInformation函数的返回值有哪些,该如何正确使用?

win32security.GetTokenInformation 使用说明及问题修复

核心问题

你调用GetTokenInformation的第二个参数使用错误:该参数是令牌信息类常量,不是特权LUID的索引值。不同的信息类常量对应返回不同结构的数据,这就是你观察到返回类型不统一的原因。

功能实现思路

如果你要获取当前进程令牌所有权限及其对应flags,按以下步骤执行:

  1. 调用GetTokenInformation时传入win32security.TokenPrivileges作为信息类参数(对应值为3),该调用会返回当前令牌持有的所有权限列表
  2. 遍历返回的权限列表,每个条目结构为 (LUID, 状态flags)
  3. 对每个LUID调用LookupPrivilegeName获取权限的字符串名称,可按需解析flags的值

正确可运行代码

import win32security
import win32api

# 打开当前进程令牌,指定查询权限
token = win32security.OpenProcessToken(
    win32api.GetCurrentProcess(),
    win32security.TOKEN_QUERY_SOURCE | win32security.TOKEN_QUERY
)

# 获取令牌所有权限信息
privilege_list = win32security.GetTokenInformation(token, win32security.TokenPrivileges)

# 遍历解析每个权限
for luid, flags in privilege_list:
    priv_name = win32security.LookupPrivilegeName(None, luid)
    print(f"权限名称: {priv_name: <30} 状态flags: {hex(flags)}")

# 可选:flags对应含义说明
print("\nFlags 位定义:")
print("- 0x01 (SE_PRIVILEGE_ENABLED): 权限当前已启用")
print("- 0x00 (SE_PRIVILEGE_ENABLED_BY_DEFAULT): 权限默认启用")
print("- 0x02 (SE_PRIVILEGE_REMOVED): 权限已被移除")
print("- 0x04 (SE_PRIVILEGE_USED_FOR_ACCESS): 权限近期被用于访问校验")

原代码问题说明

你之前循环传入0~0x30作为第二个参数,对应不同的令牌信息类:比如传0返回令牌关联的用户SID结构、传1返回令牌所属的用户组列表、传2返回令牌默认所有者SID,返回结构自然完全不同,和权限信息没有任何关系。

内容的提问来源于stack exchange,提问作者Roso Bergman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:09:00