Ordem de ACEs em uma DACL

Quando um processo tenta acessar um objeto protegível, o sistema percorre as ACEs ( entradas de controle de acesso ) na DACL ( lista de controle de acesso discricionário ) do objeto até encontrar ACEs que permitem ou negam o acesso solicitado. Os direitos de acesso que uma DACL permite a um usuário podem variar dependendo da ordem das ACEs na DACL. Consequentemente, o sistema operacional Windows XP define uma ordem preferencial para ACEs na DACL de um objeto protegível. A ordem preferencial fornece uma estrutura simples que garante que uma ACE negada pelo acesso realmente negue o acesso. Para obter mais informações sobre o algoritmo do sistema para verificar o acesso, consulte Como os DACLs controlam o acesso a um objeto.

Para o Windows Server 2003 e o Windows XP, a ordem adequada dos ACEs é complicada pela introdução de ACEs específicas de objeto e herança automática.

As etapas a seguir descrevem a ordem preferencial:

  1. Todas as ACEs explícitas são colocadas em um grupo antes de quaisquer ACEs herdadas.
  2. Dentro do grupo de ACEs explícitas, aces negados por acesso são colocados antes de ACEs permitidas pelo acesso.
  3. AcEs herdados são colocados na ordem em que são herdados. AcEs herdados do pai do objeto filho vêm primeiro, depois ACEs herdados do avô e assim por diante na árvore de objetos.
  4. Para cada nível de ACEs herdadas, as ACEs negadas pelo acesso são colocadas antes dos ACEs permitidos pelo acesso.

É claro que nem todos os tipos ace são necessários em uma ACL.

Funções como AddAccessAllowedAceEx e AddAccessAllowedObjectAce adicionam uma ACE ao final de uma ACL. É responsabilidade do chamador garantir que as ACEs sejam adicionadas na ordem adequada.