Función SetSecurityDescriptorDacl (securitybaseapi.h)

La función SetSecurityDescriptorDacl establece información en una lista de control de acceso discrecional (DACL). Si una DACL ya está presente en el descriptor de seguridad, se reemplaza la DACL.

Sintaxis

BOOL SetSecurityDescriptorDacl(
  [in, out]      PSECURITY_DESCRIPTOR pSecurityDescriptor,
  [in]           BOOL                 bDaclPresent,
  [in, optional] PACL                 pDacl,
  [in]           BOOL                 bDaclDefaulted
);

Parámetros

[in, out] pSecurityDescriptor

Puntero a la estructura SECURITY_DESCRIPTOR a la que la función agrega la DACL. Este descriptor de seguridad debe tener un formato absoluto , lo que significa que sus miembros deben ser punteros a otras estructuras, en lugar de desplazarse a datos contiguos.

[in] bDaclPresent

Marca que indica la presencia de una DACL en el descriptor de seguridad. Si este parámetro es TRUE, la función establece la marca SE_DACL_PRESENT en la estructura SECURITY_DESCRIPTOR_CONTROL y usa los valores de los parámetros pDacl y bDaclDefaulted . Si este parámetro es FALSE, la función borra la marca de SE_DACL_PRESENT y se omiten pDacl y bDaclDefaulted .

[in, optional] pDacl

Puntero a una estructura de ACL que especifica la DACL para el descriptor de seguridad. Si este parámetro es NULL, se asigna una DACL NULL al descriptor de seguridad, lo que permite todo el acceso al objeto. El descriptor de seguridad hace referencia a la DACL, no se copia en .

[in] bDaclDefaulted

Marca que indica el origen de la DACL. Si esta marca es TRUE, la DACL se ha recuperado mediante algún mecanismo predeterminado. Si es FALSE, un usuario ha especificado explícitamente la DACL. La función almacena este valor en la marca SE_DACL_DEFAULTED de la estructura SECURITY_DESCRIPTOR_CONTROL . Si no se especifica este parámetro, la marca SE_DACL_DEFAULTED se borra.

Valor devuelto

Si la función se ejecuta correctamente, la función devuelve un valor distinto de cero.

Si se produce un error en la función, devuelve cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

Hay una diferencia importante entre una DACL vacía y una DACL inexistente. Cuando una DACL está vacía, no contiene entradas de control de acceso (ACE); por lo tanto, no se conceden explícitamente derechos de acceso. Como resultado, se deniega implícitamente el acceso al objeto.

Cuando un objeto no tiene DACL (cuando el parámetro pDacl es NULL), no se asigna ninguna protección al objeto y se conceden todas las solicitudes de acceso. Para ayudar a mantener la seguridad, restrinja el acceso mediante una DACL.

Hay tres posibles resultados en diferentes configuraciones de la marca bDaclPresent y el parámetro pDacl :

  • Cuando el parámetro pDacl apunta a una DACL y la marca bDaclPresent es TRUE, se especifica una DACL y debe contener AE con acceso permitido para permitir el acceso al objeto.
  • Cuando el parámetro pDacl no apunta a una DACL y la marca bDaclPresent es TRUE, se especifica una DACL NULL . Se permite todo el acceso. No debe usar una DACL NULL con un objeto porque cualquier usuario puede cambiar la DACL y el propietario del descriptor de seguridad. Esto interferirá con el uso del objeto .
  • Cuando el parámetro pDacl no apunta a una DACL y la marca bDaclPresent es FALSE, se puede proporcionar una DACL para el objeto a través de una herencia o un mecanismo predeterminado.

Ejemplos

Para obtener un ejemplo que usa esta función, vea Creating a Security Descriptor for a New Object.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado securitybaseapi.h (incluya Windows.h)
Library Advapi32.lib
Archivo DLL Advapi32.dll

Consulte también

GetSecurityDescriptorDacl

InitializeSecurityDescriptor

IsValidSecurityDescriptor

Access Control de bajo nivel

Funciones de Access Control de bajo nivel

SECURITY_DESCRIPTOR

SECURITY_DESCRIPTOR_CONTROL

SetSecurityDescriptorGroup

SetSecurityDescriptorOwner

SetSecurityDescriptorSacl