Порядок ACE в списке DACL

Когда процесс пытается получить доступ к защищаемому объекту, система выполняет шаги по записям управления доступом (ACE) в списке управления доступом (DACL) объекта, пока не найдет ACE, которые разрешают или запрещают запрошенный доступ. Права доступа, которые daCL предоставляет пользователю, могут отличаться в зависимости от порядка ACE в DACL. Следовательно, операционная система Windows XP определяет предпочтительный порядок для ACE в списке DACL защищаемого объекта. Предпочтительный порядок предоставляет простую платформу, которая гарантирует, что ACE с запретом в доступе фактически запрещает доступ. Дополнительные сведения об алгоритме проверки доступа в системе см. в разделе Управление доступом к объекту служб DACLs.

В Windows Server 2003 и Windows XP правильный порядок ACE осложняется внедрением объектов ACE и автоматическим наследованием.

Ниже описан предпочтительный порядок.

  1. Все явные ACE помещаются в группу перед всеми унаследованными ACE.
  2. В группе явных ACE ACE, запрещенные в доступе, помещаются перед ACE, разрешенными для доступа.
  3. Наследуемые ACE размещаются в порядке, в котором они наследуются. ACE, унаследованные от родительского объекта дочернего объекта, следуют сначала, а затем ACE, унаследованные от бабушки и дедушки, и т. д. вверх по дереву объектов.
  4. Для каждого уровня унаследованных ACE, доступ которых запрещен, помещается перед ACE, разрешенных доступом.

Конечно, в ACL требуются не все типы ACE.

Такие функции, как AddAccessAllowedAceEx и AddAccessAllowedObjectAce, добавляют ACE в конец ACL. Ответственность за добавление ACE в правильном порядке лежит на вызывающем объекте.