Crear o modificar una ACL

Windows admite un conjunto de funciones que crean una lista de control de acceso (ACL) o modifican las entradas de control de acceso (ACE) en una ACL existente.

La función SetEntriesInAcl crea una nueva ACL. SetEntriesInAcl puede especificar un conjunto completamente nuevo de ACE para la ACL, o puede combinar uno o varios ACL nuevos con las ACE de una ACL existente. La función SetEntriesInAcl usa una matriz de estructuras de EXPLICIT_ACCESS para especificar la información de los nuevos ACE. Cada estructura EXPLICIT_ACCESS contiene información que describe una única ACE. Esta información incluye los derechos de acceso, el tipo de ACE, las marcas que controlan la herencia ace y una estructura DE CONFIANZA que identifica al administrador de confianza.

Para agregar una nueva ACE a una ACL existente

  1. Use la función GetSecurityInfo o GetNamedSecurityInfo para obtener la DACL o SACL existente desde el descriptor de seguridad de un objeto.
  2. Para cada nueva ACE, llame a la función BuildExplicitAccessWithName para rellenar una estructura de EXPLICIT_ACCESS con la información que describe la ACE.
  3. Llame a SetEntriesInAcl, especificando la ACL existente y una matriz de estructuras de EXPLICIT_ACCESS para las nuevas ACE. La función SetEntriesInAcl asigna e inicializa la ACL y sus ACE.
  4. Llame a la función SetSecurityInfo o SetNamedSecurityInfo para asociar la nueva ACL al descriptor de seguridad del objeto.

Si el autor de la llamada especifica una ACL existente, SetEntriesInAcl combina la nueva información ace con las ACE existentes en la ACL. Considere el caso, por ejemplo, en el que la ACL existente concede acceso a un administrador de confianza especificado y una estructura de EXPLICIT_ACCESS deniega el acceso al mismo administrador. En este caso, SetEntriesInAcl agrega una nueva ACE de acceso denegada para el administrador de confianza y elimina o modifica la ACE permitida por el acceso existente para el administrador de confianza.

Para obtener código de ejemplo que combina una nueva ACE en una ACL existente, consulte Modificación de las ACL de un objeto en C++.