DACL 中 ACE 的顺序

进程尝试访问安全对象时,系统会在对象的任意访问控制列表中 (ACE) (DACL) 逐步执行访问控制,直到找到允许或拒绝所请求访问的 ACE。 DACL 允许用户的访问权限可能因 DACL 中 ACE 的顺序而异。 因此,Windows XP 操作系统在安全对象的 DACL 中定义了 ACE 的首选顺序。 首选顺序提供了一个简单的框架,可确保拒绝访问的 ACE 实际上拒绝访问。 有关系统用于检查访问的算法的详细信息,请参阅 DACL 如何控制对对象的访问

对于 Windows Server 2003 和 Windows XP,ACE 的正确顺序因引入特定于对象的 ACE 和自动继承而变得复杂。

以下步骤描述了首选顺序:

  1. 所有显式 ACE 都放在任何继承的 ACE 之前的组中。
  2. 在显式 ACE 组中,拒绝访问的 ACE 放置在允许访问的 ACE 之前。
  3. 继承的 ACE 按继承顺序放置。 首先从子对象的父级继承 ACE,然后从祖父级继承 ACE,依此类而论。
  4. 对于每个继承的 ACE 级别,拒绝访问的 ACE 放置在允许访问的 ACE 之前。

当然,并非 ACL 中需要所有 ACE 类型。

AddAccessAllowedAceExAddAccessAllowedObjectAce 等函数将 ACE 添加到 ACL 的末尾。 调用方负责确保按正确的顺序添加 ACE。