访问令牌

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

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

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

使用 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 将访问令牌标识为主令牌或模拟令牌。