Criando ou modificando uma ACL

O Windows dá suporte a um conjunto de funções que criam uma ACL ( lista de controle de acesso ) ou modificam as ACEs (entradas de controle de acesso ) em uma ACL existente.

A função SetEntriesInAcl cria uma nova ACL. SetEntriesInAcl pode especificar um conjunto completamente novo de ACEs para a ACL ou pode mesclar um ou mais ACEs novos com as ACEs de uma ACL existente. A função SetEntriesInAcl usa uma matriz de estruturas EXPLICIT_ACCESS para especificar as informações para os novos ACEs. Cada estrutura EXPLICIT_ACCESS contém informações que descrevem um único ACE. Essas informações incluem os direitos de acesso, o tipo de ACE, os sinalizadores que controlam a herança ace e uma estrutura TRUSTEE que identifica o administrador.

Para adicionar um novo ACE a uma ACL existente

  1. Use a função GetSecurityInfo ou GetNamedSecurityInfo para obter a DACL ou SACL existente do descritor de segurança de um objeto.
  2. Para cada novo ACE, chame a função BuildExplicitAccessWithName para preencher uma estrutura EXPLICIT_ACCESS com as informações que descrevem o ACE.
  3. Chame SetEntriesInAcl, especificando a ACL existente e uma matriz de estruturas EXPLICIT_ACCESS para os novos ACEs. A função SetEntriesInAcl aloca e inicializa a ACL e seus ACEs.
  4. Chame a função SetSecurityInfo ou SetNamedSecurityInfo para anexar a nova ACL ao descritor de segurança do objeto.

Se o chamador especificar uma ACL existente, SetEntriesInAcl mesclará as novas informações ace com as ACEs existentes na ACL. Considere o caso, por exemplo, no qual a ACL existente concede acesso a um administrador especificado e uma estrutura EXPLICIT_ACCESS nega acesso ao mesmo administrador. Nesse caso, SetEntriesInAcl adiciona um novo ACE negado pelo acesso para o administrador e exclui ou modifica o ACE permitido pelo acesso existente para o administrador.

Para obter um código de exemplo que mescla um novo ACE em uma ACL existente, consulte Modificando as ACLs de um objeto em C++.