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 |