Función SeAssignSecurity (wdm.h)

La rutina SeAssignSecurity crea un descriptor de seguridad auto relativo para un nuevo objeto, dado el descriptor de seguridad de su directorio primario y cualquier seguridad solicitada originalmente para el objeto.

Sintaxis

NTSTATUS SeAssignSecurity(
  [in, optional] PSECURITY_DESCRIPTOR      ParentDescriptor,
  [in, optional] PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  [out]          PSECURITY_DESCRIPTOR      *NewDescriptor,
  [in]           BOOLEAN                   IsDirectoryObject,
  [in]           PSECURITY_SUBJECT_CONTEXT SubjectContext,
  [in]           PGENERIC_MAPPING          GenericMapping,
  [in]           POOL_TYPE                 PoolType
);

Parámetros

[in, optional] ParentDescriptor

Puntero a un búfer que contiene el SECURITY_DESCRIPTOR del directorio primario, si existe, que contiene el nuevo objeto que se va a crear. ParentDescriptor puede ser NULL o tener una lista de control de acceso del sistema (SACL) o una lista de control de acceso discrecional (DACL) NULL.

[in, optional] ExplicitDescriptor

Puntero a un búfer que contiene el SECURITY_DESCRIPTOR especificado por el usuario que se aplica al nuevo objeto. ExplicitDescriptor puede ser NULL o tener una SACL NULL o una DACL NULL .

[out] NewDescriptor

Recibe un puntero al SECURITY_DESCRIPTOR devuelto. SeAssignSecurity asigna el búfer del grupo de memoria paginado.

[in] IsDirectoryObject

Especifica si el nuevo objeto es un objeto de directorio. TRUE indica que el objeto contiene otros objetos.

[in] SubjectContext

Puntero a un búfer que contiene el contexto de seguridad del asunto que crea el objeto. Se usa para recuperar la información de seguridad predeterminada del nuevo objeto, como el propietario predeterminado, el grupo principal y el control de acceso discrecional.

[in] GenericMapping

Puntero a la estructura GENERIC_MAPPING que describe la asignación de cada derecho genérico a los derechos no genéricos implícitos.

[in] PoolType

Este parámetro no se utiliza. El búfer que contiene el nuevo descriptor de seguridad siempre se asigna desde el grupo paginado.

Valor devuelto

SeAssignSecurity puede devolver una de las siguientes opciones:

Código devuelto Descripción
STATUS_SUCCESS
La asignación se realizó correctamente.
STATUS_INVALID_OWNER
El SID proporcionado para el propietario del descriptor de seguridad de destino no es el autor de la llamada para asignar como propietario de un objeto.
STATUS_PRIVILEGE_NOT_HELD
El autor de la llamada no tiene el privilegio (SeSecurityPrivilege) necesario para asignar explícitamente la ACL del sistema especificada.

Comentarios

El descriptor de seguridad final devuelto al autor de la llamada puede contener una combinación de información, algunas proporcionadas explícitamente del elemento primario del nuevo objeto.

SeAssignSecurity supone que no se ha realizado la comprobación de privilegios. Esta rutina realiza la comprobación de privilegios.

La asignación de ACL discrecionales y del sistema se rige por la lógica que se muestra en la tabla siguiente:

ACL explícita (no predeterminada) especificada ACL predeterminada explícita especificada No se especificó ninguna ACL
ACL heredable del elemento primario Asignación de la ACL especificada Asignación de la ACL heredada Asignación de la ACL heredada
No se puede heredar ninguna ACL del elemento primario Asignación de la ACL especificada Asignación de la ACL predeterminada Asignar ninguna ACL
 

Una ACL especificada explícitamente, ya sea una ACL predeterminada o no, puede estar vacía o nula. El autor de la llamada debe ser un cliente en modo kernel o tener privilegios adecuados para asignar explícitamente una ACL del sistema predeterminada o no predeterminada.

La asignación del propietario y el grupo del nuevo objeto se rige por la lógica siguiente:

  • Si el descriptor de seguridad pasado incluye un propietario, se asigna como propietario del nuevo objeto. De lo contrario, el token del autor de la llamada se considera para determinar el propietario. Dentro del token, se asigna el propietario predeterminado, si existe. De lo contrario, se asigna el identificador de usuario del autor de la llamada.
  • Si el descriptor de seguridad pasado incluye un grupo, se asigna como grupo del nuevo objeto. De lo contrario, el token del autor de la llamada se considera para determinar el grupo. Dentro del token, se asigna el grupo predeterminado, si existe. De lo contrario, se asigna el identificador de grupo principal del autor de la llamada.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows 2000 y versiones posteriores de Windows.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Consulte también

GENERIC_MAPPING

IoGetFileObjectGenericMapping

SECURITY_DESCRIPTOR

SeDeassignSecurity