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 sizeof(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. Las solicitudes de versión de Windows son las siguientes:
Valor | Significado |
---|---|
|
Nivel de revisión válido en todas las versiones de Windows. |
|
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 |
---|---|
|
La ACL se creó e inicializó correctamente. |
|
La nueva ACL no encaja en el búfer en Acl. Se requiere un búfer de ACL mayor. |
|
La revisión especificada no es actual o el valor de AclLength es demasiado grande. |
Comentarios
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 todas las ACE que se almacenarán en la ACL. Para calcular el tamaño de una ACE, agregue el tamaño de la estructura ACE, como sizeof(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 el 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 | Value |
---|---|
Plataforma de destino | Universal |
Encabezado | ntifs.h (incluya Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |