Compartir a través de


Función InitializeAcl (securitybaseapi.h)

La función InitializeAcl inicializa una nueva estructura de ACL .

Sintaxis

BOOL InitializeAcl(
  [out] PACL  pAcl,
  [in]  DWORD nAclLength,
  [in]  DWORD dwAclRevision
);

Parámetros

[out] pAcl

Puntero a una estructura de ACL que esta función va a inicializar. Asigne memoria para pAcl antes de llamar a esta función.

[in] nAclLength

Longitud, en bytes, del búfer al que apunta el parámetro pAcl . Este valor debe ser lo suficientemente grande como para contener el encabezado ACL y todas las entradas de control de acceso (ACA) que se almacenarán en la ACL. Además, este valor debe estar alineado con DWORD. Para obtener más información sobre cómo calcular el tamaño de una ACL, vea Comentarios.

[in] dwAclRevision

Nivel de revisión de la estructura de ACL que se va a crear.

Este valor puede ser ACL_REVISION o ACL_REVISION_DS. Use ACL_REVISION_DS si la lista de control de acceso (ACL) admite ACE específicas del objeto.

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

La función InitializeAcl crea una estructura de ACL vacía; la ACL no contiene ACE. Aplicar una ACL vacía a un objeto deniega todo el acceso a ese objeto.

El tamaño inicial de la ACL depende del número de ACL que planee agregar a la ACL antes de usarlo. Por ejemplo, si la ACL contiene una ACE para un usuario y un grupo, inicializaría la ACL basada en dos ACL. Para obtener más información sobre cómo modificar una ACL existente, consulte Modificación de las ACL de un objeto.

Para calcular el tamaño inicial de una ACL, agregue lo siguiente juntos y, a continuación, alinee el resultado con el DWORD más cercano:

  • Tamaño de la estructura de la ACL .
  • Tamaño de cada estructura ACE que la ACL debe contener menos el miembro SidStart (DWORD) de la ACE.
  • Longitud del SID que cada ACE va a contener.

Ejemplos

En el ejemplo siguiente se llama a la función InitializeAcl . El tamaño de la ACL se basa en tres ACE de acceso permitido. Como opción, puede usar el lenguaje de definición de descriptores de seguridad (SDDL) para crear la ACL. Para obtener más información, consulte Creación de una DACL.

En el ejemplo también se omite un paso para simplificar. Para obtener más información, vea el ejemplo De toma de propiedad del objeto . Debe llamar a la función FreeSid al final del código de ejemplo debido a llamar a la función AllocateAndInitializeSid .

#include <windows.h>
#include <Winbase.h>
#pragma comment(lib, "duser.lib")

#define NUM_OF_ACES 3

void main()
{
    PACL pAcl = NULL;
    DWORD cbAcl = 0;
    PSID psids[NUM_OF_ACES];

    // Allocate and initialize SIDs.
    // Step omitted - See Taking Object Ownership example.

    // Add the SID for each ACE to psids. 
    cbAcl = sizeof(ACL) + 
        ((sizeof(ACCESS_ALLOWED_ACE)) * NUM_OF_ACES);
    for (int i = 0; i < NUM_OF_ACES; i++)
    {
        cbAcl += GetLengthSid(psids[i]) - sizeof(DWORD);
    }

    // Align cbAcl to a DWORD.
    cbAcl = (cbAcl + (sizeof(DWORD) - 1)) & 0xfffffffc;

    pAcl = (ACL*)LocalAlloc(LPTR, cbAcl);
    if (pAcl)
    {
        if (InitializeAcl(pAcl, cbAcl, ACL_REVISION))
        {

            // Add the ACEs to the ACL.
            // Add the ACL to the object's security descriptor.
        }
        else
        {

            // Handle error.
        }
    }
    {

        // Handle error.
    }

    // Free pAcl when finished.
    // Call FreeSid when finished.
}

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

ACCESS_ALLOWED_ACE

ACCESS_DENIED_ACE

ACL

AddAccessAllowedAce

AddAccessDeniedAce

AddAce

AddAuditAccessAce

DeleteAce

GetAce

GetAclInformation

IsValidAcl

Access Control de bajo nivel

Funciones de Access Control de bajo nivel

SID

SetAclInformation