Compartir a través de


Función RtlCreateAcl (ntifs.h)

La rutina RtlCreateAcl crea e inicializa una lista de control de acceso (ACL).

Sintaxis

NTSYSAPI NTSTATUS RtlCreateAcl(
  [out] PACL  Acl,
  [in]  ULONG AclLength,
        ULONG AclRevision
);

Parámetros

[out] Acl

Puntero a un búfer asignado por el autor de la llamada para recibir la estructura de ACL inicializada. Este búfer debe ser al menos tamaño de(ACL),

[in] AclLength

Longitud, en bytes, del búfer al que apunta el parámetro Acl. Este valor debe ser lo suficientemente grande como para contener el encabezado ACL y todas las entradas de control de acceso (ACE) que se almacenarán en la ACL. Consulte la siguiente sección Comentarios para obtener información sobre cómo calcular el tamaño de una ACL.

AclRevision

Nivel de revisión de ACL de la ACE que se va a agregar. Los requisitos de versión de Windows son los siguientes:

Valor Significado
ACL_REVISION

Nivel de revisión válido en todas las versiones de Windows.

ACL_REVISION_DS
NotaAceRevision debe ser ACL_REVISION_DS si la ACL de Acl contiene una ACE específica del objeto.
 

 

Valor devuelto

rtlCreateAcl puede devolver uno de los siguientes valores de estado:

Código devuelto Descripción
STATUS_SUCCESS
La ACL se creó e inicializó correctamente.
STATUS_BUFFER_TOO_SMALL
La nueva ACL no cabe en el búfer en Acl. Se requiere un búfer de ACL mayor.
STATUS_INVALID_PARAMETER
La revisión especificada no es actual o el valor de AclLength es demasiado grande.

Observaciones

La ACL inicializada por RtlCreateAcl no contiene entradas de control de acceso (ACE). Esta ACL está vacía, en lugar de ser una ACL inexistente. Si se aplica una ACL vacía a un objeto, la ACL deniega implícitamente todo el acceso a ese objeto. Para agregar ACL a la ACL, use RtlAddAccessAllowedAce.

Para calcular el tamaño de una ACL, agregue sizeof(ACL) al tamaño de todos los ACL que se almacenarán en la ACL. Para calcular el tamaño de una ACE, agregue el tamaño de la estructura ACE, como tamaño de(ACCESS_ALLOWED_ACE), a la longitud del SID asociado a la ACE y, a continuación, reste el tamaño del miembro SidStart (que forma parte de la estructura ACE y del SID). Use la función RtlLengthSid para obtener la longitud de un SID especificado.

En el ejemplo siguiente se muestra cómo calcular el tamaño de una ACE permitida por el acceso:

sizeof (ACCESS_ALLOWED_ACE) - sizeof (ACCESS_ALLOWED_ACE.SidStart) 
        + GetLengthSid (pAceSid);

Para calcular el tamaño de una ACL, use el siguiente algoritmo, sustituyendo la estructura ACE adecuada en la expresión sizeof(ACE):

cbAcl = sizeof (ACL);
for (i = 0 ; i < nAceCount ; i++) {
    // subtract ACE.SidStart from the size
    cbAce = sizeof (ACE) - sizeof (DWORD);
    // add this ACE's SID length
    cbAce += GetLengthSid (pAceSid[i]);
    // add the length of each ACE to the total ACL length
    cbAcl += cbAce;
}

Para obtener más información sobre la seguridad y el control de acceso, consulte modelo de seguridad de Windows para desarrolladores de controladores y la documentación sobre estos temas en Windows SDK.

Requisitos

Requisito Valor
de la plataforma de destino de Universal
encabezado de ntifs.h (incluya Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= APC_LEVEL

Consulte también

ACCESS_ALLOWED_ACE

ACE de

de ACL

RtlAddAccessAllowedAce

rtlLengthSid

de SID