DACL 中的 ACE 顺序

进程 尝试访问安全对象时,系统会在对象的 自由访问控制列表(DACL)中逐步执行 访问控制项(ACE),直到找到允许或拒绝所请求的访问的 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 按正确的顺序添加。