当用户登录时,系统通过将其与存储在安全数据库中的信息进行比较来验证用户的密码。如果验证密码,则系统会生成访问令牌并将其附加到用户的进程。此访问令牌在与安全对象的所有后续交互中标识用户,并包含有关进程的以下信息:
*用户的SID
*组SID
*特权
*所有者SID
*主组的SID
*默认的自由访问控制列表(ACL)
*访问令牌的来源
*令牌是主要还是模拟令牌
*当前模拟级别
*其他统计
每个进程都有一个主令牌来确定进程与安全对象进行交互的安全上下文。默认情况下,线程在其进程的安全上下文中运行。然而,线程可以使用模拟来运行在不同的安全上下文中。在这种情况下,线程有一个模拟令牌,它决定了大部分线程的动作的安全上下文。有关详细信息,请参阅模拟.
有关权限的更多信息,请参阅特权.有关安全标识符(SID)的更多信息,请参阅安全标识符(SID).有关自由ACL的更多信息,请参阅访问控制列表(ACL).有关访问令牌的组件的更多信息,请参阅以下令牌结构和枚举类型。
结构或枚举类型 | 指定 |
TOKEN_CONTROL | 用于识别访问令牌的信息。 |
TOKEN_DEFAULT_DACL | 访问令牌的默认自由ACL。 |
TOKEN_GROUPS | 指定访问令牌的组的SID以及是否启用任何权限。 |
TOKEN_INFORMATION_CLASS | 从访问令牌中设置或检索的信息。 |
TOKEN_OWNER | 访问令牌的所有者的SID。 |
TOKEN_PRIMARY_GROUP | 访问令牌的主组的SID。 |
TOKEN_PRIVILEGES | 与访问令牌相关联的权限以及是否启用权限。 |
TOKEN_SOURCE | 访问令牌的来源。 |
TOKEN_STATISTICS | 与访问令牌相关联的统计信息。 |
TOKEN_TYPE | 访问令牌是否被用作模拟令牌。 |
TOKEN_USER | 访问令牌的用户的SID。 |
您可以使用以下功能来操作访问令牌。
以下是应用程序可以用来操作访问令牌的功能。
功能 | 描述 |
AdjustTokenGroups | 更改访问令牌中的组信息。 |
AdjustTokenPrivileges | 更改访问令牌中的权限。 |
DuplicateToken | 创建一个复制现有令牌的新模拟令牌。 |
DuplicateTokenEx | 创建重复现有令牌的新主要令牌或模拟令牌。 |
GetTokenInformation | 检索有关令牌的信息。 |
OpenProcessToken | 检索进程的访问令牌的句柄。 |
OpenThreadToken | 检索线程的访问令牌的句柄。 |
SetThreadToken | 分配或删除线程的模拟令牌。 |
SetTokenInformation | 更改令牌的所有者,主组或默认的自由ACL。 |