Función SeAssignSecurityEx (wdm.h)

La rutina SeAssignSecurityEx crea un descriptor de seguridad auto relativo para un nuevo objeto dados los siguientes parámetros opcionales: un descriptor de seguridad del directorio primario del objeto, un descriptor de seguridad explícito para el objeto y el tipo de objeto.

Sintaxis

NTSTATUS SeAssignSecurityEx(
  [in, optional] PSECURITY_DESCRIPTOR      ParentDescriptor,
  [in, optional] PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  [out]          PSECURITY_DESCRIPTOR      *NewDescriptor,
  [in, optional] GUID                      *ObjectType,
  [in]           BOOLEAN                   IsDirectoryObject,
  [in]           ULONG                     AutoInheritFlags,
  [in]           PSECURITY_SUBJECT_CONTEXT SubjectContext,
  [in]           PGENERIC_MAPPING          GenericMapping,
  [in]           POOL_TYPE                 PoolType
);

Parámetros

[in, optional] ParentDescriptor

Puntero al SECURITY_DESCRIPTOR del objeto primario 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) NULL o una lista de control de acceso discrecional (DACL) NULL.

[in, optional] ExplicitDescriptor

Puntero a un SECURITY_DESCRIPTOR explícito que se aplica al nuevo objeto. ExplicitDescriptor puede ser NULL o tener un SACL NULL o una DACL NULL .

[out] NewDescriptor

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

[in, optional] ObjectType

Puntero a un GUID para el tipo de objeto que se va a crear. Si el objeto no tiene un GUID, ObjectType debe establecerse en NULL.

[in] IsDirectoryObject

Especifica si el nuevo objeto es un objeto de directorio. Si IsDirectoryObject se establece en TRUE, el nuevo objeto es un objeto de directorio; de lo contrario, el nuevo objeto no es un objeto de directorio.

[in] AutoInheritFlags

Especifica el tipo de herencia automática que se aplica a las entradas de control de acceso (ACE) en las listas de control de acceso (ACL) especificadas por ParentDescriptor. AutoInheritFlags también controla la comprobación de privilegios, la comprobación de propietarios y el establecimiento de un propietario y un grupo predeterminados para NewDescriptor. AutoInheritFlags debe establecerse en un OR lógico de uno o varios de los valores siguientes:

Valor Significado
SEF_DACL_AUTO_INHERIT NewDescriptor hereda las ACE de la DACL de ParentDescriptor, además de los ASE explícitos especificados por ExplicitDescriptor.
SEF_SACL_AUTO_INHERIT NewDescriptor hereda los ASE en la SACL de ParentDescriptor, además de los ASE explícitos especificados por ExplicitDescriptor.
SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT ExplicitDescriptor es el descriptor predeterminado para el tipo de objeto especificado por ObjectType. ExplicitDescriptor no se usa si se heredan de ParentDescriptor.
SEF_AVOID_PRIVILEGE_CHECK No se realiza la comprobación de privilegios. Esta marca es útil con la herencia automática, ya que evita la comprobación de privilegios en cada elemento secundario que debe actualizarse.
SEF_AVOID_OWNER_CHECK No se realiza la comprobación del propietario.
SEF_DEFAULT_OWNER_FROM_PARENT Si explicitDescriptor especifica un propietario, esta marca no se usa y el propietario de NewDescriptor se establece en el propietario especificado por ExplictDescriptor.

Si explicitDescriptor no especifica un propietario, esta marca se usa de la siguiente manera: si se establece la marca, el propietario de NewDescriptor se establece en el propietario de ParentDescriptor. De lo contrario, el propietario de NewDescriptor se establece en el propietario especificado por SubjectContext.

SEF_DEFAULT_GROUP_FROM_PARENT Si explicitDescriptor especifica un grupo, esta marca no se usa y el grupo de NewDescriptor se establece en el grupo especificado por ExplictDescriptor.

Si explicitDescriptor no especifica un grupo, esta marca se usa de la siguiente manera: si se establece la marca, el grupo de NewDescriptor se establece en el grupo de ParentDescriptor. De lo contrario, el grupo de NewDescriptor se establece en el grupo especificado por SubjectContext.

 

La asignación de ACL discrecionales y del sistema se describe en la tabla siguiente:

Descriptor explícito no predeterminado(1) Descriptor explícito predeterminado(2) NULL Descriptor explícito
La ACL se hereda del descriptor primario(3). Asigne las ACL heredadas y explícitas(5)(6). Asigne la ACL heredada. Asigne la ACL heredada.
La ACL no se hereda del descriptor primario(4). Asigne una ACL no predeterminada. Asigne la ACL predeterminada. No asigne ninguna ACL.
 

Notas sobre la asignación

  1. No se especifica la marca SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT.
  2. Se especifica la marca SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT.
  3. Se especifica la marca de herencia automática de una ACL (SEF_DACL_AUTO_INHERIT o SEF_SACL_AUTO_INHERIT).
  4. No se especifica la marca de herencia automática para una ACL.
  5. Los ASE con el INHERITED_ACE bit establecido en su miembro AceFlagsno se copian en el descriptor de seguridad asignado.
  6. Los ACL que se heredan del descriptor primario se anexan después de los ACL especificados por el descriptor explícito.

[in] SubjectContext

Puntero a un contexto de seguridad del asunto que crea el objeto. SubjectContext se usa para recuperar la información de seguridad predeterminada del nuevo objeto, incluido el propietario predeterminado, el grupo principal y el control de acceso discrecional.

[in] GenericMapping

Puntero a una matriz de valores de máscara de acceso que especifican la asignación entre cada derecho genérico a derechos específicos del objeto.

[in] PoolType

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

Valor devuelto

SeAssignSecurityEx devuelve uno de los valores siguientes:

Código devuelto Descripción
STATUS_SUCCESS
La asignación se realizó correctamente.
STATUS_INVALID_OWNER
El SID proporcionado como propietario del nuevo descriptor de seguridad no es un SID que el autor de la llamada tiene autorización 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 el SACL especificado.

Comentarios

SeAssignSecurityEx amplía el funcionamiento básico de SeAssignSecurity de las siguientes maneras:

  • ObjectType especifica opcionalmente un tipo de objeto. La herencia específica del objeto se controla mediante los siguientes miembros de una ACE específica del objeto: Flags, InheritedObjectType y Header.AceFlags.
  • AutoInheritFlags especifica el tipo de herencia automática de AEC que se usa. AutoInheritFlags también controla la comprobación de privilegios, la comprobación de propietarios y el establecimiento de un propietario y un grupo predeterminados para NewDescriptor.
Para obtener más información sobre la seguridad y el control de acceso, consulte la documentación sobre estos temas en la Microsoft Windows SDK.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
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)

Consulte también

GENERIC_MAPPING

SECURITY_DESCRIPTOR

SeAssignSecurity

SeDeassignSecurity