Função SeAssignSecurityEx (wdm.h)

A rotina SeAssignSecurityEx cria um descritor de segurança auto-relativo para um novo objeto, considerando os seguintes parâmetros opcionais: um descritor de segurança do diretório pai do objeto, um descritor de segurança explícito para o objeto e o tipo de objeto.

Sintaxe

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

Ponteiro para o SECURITY_DESCRIPTOR do objeto pai que contém o novo objeto que está sendo criado. ParentDescriptor pode ser NULL ou ter uma SACL (lista de controle de acesso do sistema NULL) ou uma DACL (lista de controle de acesso discricionário) NULL.

[in, optional] ExplicitDescriptor

Ponteiro para uma SECURITY_DESCRIPTOR explícita que é aplicada ao novo objeto. ExplicitDescriptor pode ser NULL ou ter um SACL NULL ou um DACL NULL .

[out] NewDescriptor

Recebe um ponteiro para o SECURITY_DESCRIPTOR retornado. SeAssignSecurityEx aloca o buffer do pool de memória paginado.

[in, optional] ObjectType

Ponteiro para um GUID para o tipo de objeto que está sendo criado. Se o objeto não tiver um GUID, ObjectType deverá ser definido como NULL.

[in] IsDirectoryObject

Especifica se o novo objeto é um objeto de diretório. Se IsDirectoryObject estiver definido como TRUE, o novo objeto será um objeto de diretório, caso contrário, o novo objeto não será um objeto de diretório.

[in] AutoInheritFlags

Especifica o tipo de herança automática que é aplicada às ACE (entradas de controle de acesso) nas listas de controle de acesso (ACL) especificadas por ParentDescriptor. AutoInheritFlags também controla a verificação de privilégios, a verificação de proprietário e a configuração de um proprietário e grupo padrão para NewDescriptor. AutoInheritFlags deve ser definido como um OR lógico de um ou mais dos seguintes valores:

Valor Significado
SEF_DACL_AUTO_INHERIT AcEs na DACL de ParentDescriptor são herdados por NewDescriptor, além de ACEs explícitas especificadas por ExplicitDescriptor.
SEF_SACL_AUTO_INHERIT AcEs no SACL de ParentDescriptor são herdados por NewDescriptor, além de ACEs explícitas especificadas por ExplicitDescriptor.
SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT ExplicitDescriptor é o descritor padrão para o tipo de objeto especificado por ObjectType. ExplicitDescriptor não será usado se ACEs forem herdados de ParentDescriptor.
SEF_AVOID_PRIVILEGE_CHECK A verificação de privilégios não foi feita. Esse sinalizador é útil com herança automática porque evita a verificação de privilégios em cada filho que precisa ser atualizado.
SEF_AVOID_OWNER_CHECK A verificação de proprietário não foi feita.
SEF_DEFAULT_OWNER_FROM_PARENT Se um proprietário for especificado por ExplicitDescriptor, esse sinalizador não será usado e o proprietário de NewDescriptor será definido como o proprietário especificado por ExplictDescriptor.

Se um proprietário não for especificado por ExplicitDescriptor, esse sinalizador será usado da seguinte maneira: se o sinalizador estiver definido, o proprietário de NewDescriptor será definido como o proprietário do ParentDescriptor. Caso contrário, o proprietário de NewDescriptor será definido como o proprietário especificado pelo SubjectContext.

SEF_DEFAULT_GROUP_FROM_PARENT Se um grupo for especificado por ExplicitDescriptor, esse sinalizador não será usado e o grupo de NewDescriptor será definido como o grupo especificado por ExplictDescriptor.

Se um grupo não for especificado por ExplicitDescriptor, esse sinalizador será usado da seguinte maneira: se o sinalizador estiver definido, o grupo de NewDescriptor será definido como o grupo de ParentDescriptor. Caso contrário, o grupo de NewDescriptor será definido como o grupo especificado pelo SubjectContext.

 

A atribuição de ACLs do sistema e discricionárias é descrita na tabela a seguir:

Descritor explícito não padrão(1) Descritor explícito padrão(2) NULL Descritor explícito
A ACL é herdada do descritor pai(3). Atribua ACLs herdadas e explícitas(5)(6). Atribuir ACL herdada. Atribuir ACL herdada.
A ACL não é herdada do descritor pai(4). Atribuir ACL não padrão. Atribuir ACL padrão. Atribuir nenhuma ACL.
 

Anotações de atribuição

  1. O sinalizador SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT não é especificado.
  2. O sinalizador SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT é especificado.
  3. O sinalizador de herdação automática de uma ACL é especificado (SEF_DACL_AUTO_INHERIT ou SEF_SACL_AUTO_INHERIT).
  4. O sinalizador herdado automático de uma ACL não é especificado.
  5. AcEs com o INHERITED_ACE bit definido em seu membro AceFlagsnão são copiados para o descritor de segurança atribuído.
  6. AcEs herdados do descritor pai são acrescentados após os ACEs especificados pelo descritor explícito.

[in] SubjectContext

Ponteiro para um contexto de segurança do assunto que está criando o objeto. SubjectContext é usado para recuperar informações de segurança padrão para o novo objeto, incluindo o proprietário padrão, o grupo primário e o controle de acesso discricionário.

[in] GenericMapping

Ponteiro para uma matriz de valores de máscara de acesso que especificam o mapeamento entre cada direito genérico para direitos específicos do objeto.

[in] PoolType

Esse parâmetro não está em uso. O buffer para manter o novo descritor de segurança sempre é alocado do pool de páginas.

Retornar valor

SeAssignSecurityEx retorna um dos seguintes valores:

Código de retorno Descrição
STATUS_SUCCESS
A tarefa foi bem-sucedida.
STATUS_INVALID_OWNER
O SID fornecido como o proprietário do novo descritor de segurança não é um SID que o chamador está autorizado a atribuir como proprietário de um objeto.
STATUS_PRIVILEGE_NOT_HELD
O chamador não tem o privilégio (SeSecurityPrivilege) necessário para atribuir explicitamente o SACL especificado.

Comentários

SeAssignSecurityEx estende a operação básica de SeAssignSecurity das seguintes maneiras:

  • ObjectType especifica opcionalmente um tipo de objeto. A herança específica do objeto é controlada pelos seguintes membros de um ACE específico do objeto: Flags, InheritedObjectType e Header.AceFlags.
  • AutoInheritFlags especifica o tipo de herança automática de ACEs que é usado. AutoInheritFlags também controla a verificação de privilégios, a verificação de proprietário e a configuração de um proprietário e grupo padrão para NewDescriptor.
Para obter mais informações sobre segurança e controle de acesso, consulte a documentação sobre esses tópicos no SDK do Microsoft Windows.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regras de conformidade de DDI HwStorPortProhibitedDDIs(storport)

Confira também

GENERIC_MAPPING

SECURITY_DESCRIPTOR

SeAssignSecurity

SeDeassignSecurity