安全标识符

SID) (安全标识符 是用于标识 受托人的可变长度的唯一值。 每个帐户都有一个由机构(如 Windows 域控制器)颁发的唯一 SID,并存储在安全数据库中。 每次用户登录时,系统都会从数据库中检索该用户的 SID,并将其置于该用户的 访问令牌 中。 系统使用访问令牌中的 SID 在与 Windows 安全的所有后续交互中标识用户。 当 SID 已用作用户或组的唯一标识符时,它不能再次用于标识其他用户或组。

Windows 安全性在以下安全元素中使用 SID:

除了分配给特定用户和组的唯一创建的特定于域的 SID 外,还有标识泛型组和泛型用户的 已知 SID 。 例如,众所周知的 SID“所有人”和“世界”标识包含所有用户的组。

大多数应用程序永远不需要使用 SID。 由于 已知 SID 的名称可能会有所不同,因此应使用 函数根据预定义常量生成 SID,而不是使用已知 SID 的名称。 例如,美国英语版本的 Windows 操作系统具有一个名为“BUILTIN\Administrators”的已知 SID,该 SID 在系统的国际版本上可能具有不同的名称。 有关生成已知 SID 的示例,请参阅 使用 C++ 在访问令牌中搜索 SID

如果需要使用 SID,请不要直接操作它们。 请改用以下函数。

函数 说明
AllocateAndInitializeSid 分配并初始化具有指定数量的子授权的 SID。
ConvertSidToStringSid 将 SID 转换为适合显示、存储或传输的字符串格式。
ConvertStringSidToSid 将字符串格式的 SID 转换为有效的功能 SID。
CopySid 将源 SID 复制到缓冲区。
EqualPrefixSid 测试两个 SID 前缀值是否相等。 SID 前缀是整个 SID,最后一个子授权值除外。
EqualSid 测试两个 SID 是否相等。 它们必须完全匹配才能被视为相等。
FreeSid 使用 AllocateAndInitializeSid 函数释放以前分配的 SID。
GetLengthSid 检索 SID 的长度。
GetSidIdentifierAuthority 检索指向 SID 标识符颁发机构的指针。
GetSidLengthRequired 检索存储具有指定数量的子授权的 SID 所需的缓冲区大小。
GetSidSubAuthority 检索指向 SID 中指定子授权的指针。
GetSidSubAuthorityCount 检索 SID 中的子授权数。
InitializeSid 初始化 SID 结构。
IsValidSid 通过验证修订号是否在已知范围内以及子授权数是否小于最大值来测试 SID 的有效性。
LookupAccountName 检索与指定帐户名称对应的 SID。
LookupAccountSid 检索与指定 SID 对应的帐户名称。