Criando ou modificando uma ACL
O Windows oferece suporte a um conjunto de funções que criam uma ACL (de lista de controle de acesso)ou modificam asde entrada de controle de acesso(ACEs) em uma ACL existente.
A funçãoSetEntriesInAcl cria uma nova ACL. SetEntriesInAcl pode especificar um conjunto completamente novo de ACEs para a ACL ou pode mesclar uma ou mais novas ACEs com as ACEs de uma ACL existente. A função SetEntriesInAcl usa uma matriz de estruturas EXPLICIT_ACCESS para especificar as informações para as novas ACEs. Cada estrutura EXPLICIT_ACCESS contém informações que descrevem uma única ACE. Essas informações incluem os direitos de acesso, o tipo de ACE, os sinalizadores que controlam a herança ACE e uma estrutura de TRUSTEE que identifica o trustee.
Para adicionar uma nova ACE a uma ACL existente
- Use as funções GetSecurityInfo ou GetNamedSecurityInfo para obter a DACL ou SACL existente do descritor de segurança de um objeto.
- Para cada nova ACE, chame a funçãoBuildExplicitAccessWithName para preencher uma estrutura EXPLICIT_ACCESS com as informações que descrevem a ACE.
- Chame SetEntriesInAcl, especificando a ACL existente e uma matriz de estruturas de EXPLICIT_ACCESS para as novas ACEs. A função SetEntriesInAcl aloca e inicializa a ACL e as suas ACEs.
- Chame a função SetSecurityInfo ou a função 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 da ACE com as ACEs existentes na ACL. Considere o caso, por exemplo, em que a ACL existente concede acesso a um administrador fiduciário especificado e uma estrutura EXPLICIT_ACCESS nega acesso ao mesmo administrador. Nesse caso, SetEntriesInAcl adiciona uma nova ACE de acesso negado para o administrador e exclui ou modifica a ACE de acesso permitido existente para o administrador.
Para obter o código de exemplo que mescla uma nova ACE em uma ACL existente, consulte Modificando as ACLs de um objeto em C++.