线程和安全对象之间的交互

当线程尝试使用安全对象时,系统会先执行访问检查,然后再允许线程继续。 在访问检查中,系统会将线程访问令牌中的安全信息与对象的安全描述符中的安全信息进行比较。

  • 访问令牌包含 安全标识符 (SID) ,用于标识与线程关联的用户。
  • 安全描述符标识对象的所有者,并包含一个 自由访问控制列表 (DACL) 。 DACL 包含 访问控制条目 (ACE) ,其中每个条目指定允许或拒绝给特定用户或组的访问权限。

系统会检查对象的 DACL,从线程的访问令牌中查找应用于用户和组 SID 的 ACE。 系统会检查每个 ACE,直到授予或拒绝访问权限,或者直到没有其他 ACE 要检查。 可想而知, (ACL) 的 访问控制列表 可能有多个适用于令牌 SID 的 ACE。 如果发生这种情况,则每个 ACE 授予的访问权限将累积。 例如,如果一个 ACE 授予对组的读取访问权限,另一个 ACE 向属于组成员的用户授予写入访问权限,则用户可以同时具有对对象的读取和写入访问权限。

下图显示了这些安全信息块之间的关系:

进程、aces 和 dacls 之间的关系