访问令牌
访问令牌 是描述 进程 或线程安全上下文的对象。 令牌中的信息包括与进程或线程关联的用户帐户的标识和特权。 用户登录时,系统会通过将密码与存储在安全数据库中的信息进行比较来验证用户的密码。 如果密码 经过身份验证,系统将生成访问令牌。 代表此用户执行的每个进程都有此访问令牌的副本。
当线程与 安全对象交互时,系统使用访问令牌来标识用户, 或尝试执行需要特权的系统任务。 访问令牌包含以下信息:
- 用户帐户的安全标识符 (SID)
- 用户所属组的 SID
- 标识当前 登录会话 的 登录 SID
- 用户或用户组持有的 特权列表
- 所有者 SID
- 主组的 SID
- 系统创建安全对象时使用的默认 DACL,而不指定 安全描述符
- 访问令牌的源
- 令牌是 主 还是 模拟 令牌
- 限制 SID 的可选 列表
- 当前模拟级别
- 其他统计信息
每个进程都有一个 主令牌,用于描述与进程关联的用户帐户安全上下文。 默认情况下,当进程的线程与安全对象交互时,系统将使用主令牌。 此外,线程可以模拟客户端帐户。 通过模拟,线程可以使用客户端的安全上下文与安全对象进行交互。 模拟客户端的线程具有主令牌和 模拟令牌。
使用 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 | 将访问令牌标识为主要令牌或模拟令牌。 |