Criando ou modificando uma ACL

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 de 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 de 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 suas 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 mescla 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 de 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 Modificar as ACLs de um objeto em C++.