访问令牌

访问令牌 是描述 进程 或线程安全上下文的对象。 令牌中的信息包括与进程或线程关联的用户帐户的标识和特权。 用户登录时,系统会通过将密码与存储在安全数据库中的信息进行比较来验证用户的密码。 如果密码 经过身份验证,系统将生成访问令牌。 代表此用户执行的每个进程都有此访问令牌的副本。

当线程与 安全对象交互时,系统使用访问令牌来标识用户, 或尝试执行需要特权的系统任务。 访问令牌包含以下信息:

每个进程都有一个 主令牌,用于描述与进程关联的用户帐户安全上下文。 默认情况下,当进程的线程与安全对象交互时,系统将使用主令牌。 此外,线程可以模拟客户端帐户。 通过模拟,线程可以使用客户端的安全上下文与安全对象进行交互。 模拟客户端的线程具有主令牌和 模拟令牌

使用 OpenProcessToken 函数检索进程的主令牌的句柄。 使用 OpenThreadToken 函数检索线程模拟令牌的句柄。 有关详细信息,请参阅 模拟

可以使用以下函数来作访问令牌。

功能 描述
AdjustTokenGroups 更改访问令牌中的组信息。
AdjustTokenPrivileges 启用或禁用访问令牌中的特权。 它不授予新权限或撤销现有权限。
CheckTokenMembership 确定指定的访问令牌中是否启用了指定的 SID。
CreateRestrictedToken 创建一个新令牌,该令牌是现有令牌的受限版本。 受限令牌可以禁用 SID、已删除特权和受限 SID 列表。
DuplicateToken 创建复制现有令牌的新模拟令牌。
DuplicateTokenEx 创建复制现有令牌的新主令牌或模拟令牌。
GetTokenInformation 检索有关令牌的信息。
IsTokenRestricted 确定令牌是否具有限制 SID 的列表。
OpenProcessToken 检索进程的主访问令牌的句柄。
OpenThreadToken 检索线程模拟访问令牌的句柄。
SetThreadToken 分配或删除线程的模拟令牌。
SetTokenInformation 更改令牌的所有者、主组或默认 DACL。

 

访问令牌函数使用以下结构来描述访问令牌的各个部分。

结构 描述
TOKEN_CONTROL 标识访问令牌的信息。
TOKEN_DEFAULT_DACL 系统在线程创建的新对象的安全描述符中使用的默认 DACL。
TOKEN_GROUPS 指定访问令牌中组 SID 的 SID 和属性。
TOKEN_OWNER 新对象的安全描述符的默认所有者 SID。
TOKEN_PRIMARY_GROUP 新对象的安全描述符的默认主组 SID。
TOKEN_PRIVILEGES 与访问令牌关联的特权。 此外,还确定是否启用特权。
TOKEN_SOURCE 访问令牌的源。
TOKEN_STATISTICS 与访问令牌关联的统计信息。
TOKEN_USER 与访问令牌关联的用户的 SID。

 

访问令牌函数使用以下枚举类型。

枚举类型 指定
TOKEN_INFORMATION_CLASS 标识从访问令牌中设置或检索的信息类型。
TOKEN_TYPE 将访问令牌标识为主要令牌或模拟令牌。