DACL 中 ACE 的顺序

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

对于 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。