Função SeAssignSecurity (wdm.h)

A rotina SeAssignSecurity cria um descritor de segurança auto-relativo para um novo objeto, dado o descritor de segurança de seu diretório pai e qualquer segurança originalmente solicitada para o objeto.

Sintaxe

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

Ponteiro para um buffer que contém o SECURITY_DESCRIPTOR para o diretório pai, se houver, 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 um buffer que contém o SECURITY_DESCRIPTOR especificado pelo usuário que é aplicado ao novo objeto. ExplicitDescriptor pode ser NULL ou ter uma SACL NULL ou uma DACL NULL .

[out] NewDescriptor

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

[in] IsDirectoryObject

Especifica se o novo objeto é um objeto de diretório. TRUE indica que o objeto contém outros objetos.

[in] SubjectContext

Ponteiro para um buffer que contém o contexto de segurança do assunto que cria o objeto . Isso é usado para recuperar informações de segurança padrão para o novo objeto, como o proprietário padrão, o grupo primário e o controle de acesso discricionário.

[in] GenericMapping

Ponteiro para a estrutura GENERIC_MAPPING que descreve o mapeamento de cada direito genérico para os direitos não genéricos implícitos.

[in] PoolType

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

Retornar valor

SeAssignSecurity pode retornar um dos seguintes:

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

Comentários

O descritor de segurança final retornado ao chamador pode conter uma combinação de informações, algumas fornecidas explicitamente do pai do novo objeto.

SeAssignSecurity pressupõe que a verificação de privilégios não foi executada. Essa rotina executa a verificação de privilégios.

A atribuição de ACLs discricionárias e do sistema é regida pela lógica ilustrada na tabela a seguir:

ACL explícita (não padrão) especificada ACL padrão explícita especificada Nenhuma ACL especificada
ACL herdável do pai Atribuir ACL especificada Atribuir ACL herdada Atribuir ACL herdada
Nenhuma ACL herdável do pai Atribuir ACL especificada Atribuir ACL padrão Atribuir nenhuma ACL
 

Uma ACL especificada explicitamente, seja uma ACL padrão ou não, pode ser vazia ou nula. O chamador deve ser um cliente no modo kernel ou ter o privilégio apropriado para atribuir explicitamente uma ACL de sistema padrão ou não padrão.

A atribuição do proprietário e do grupo do novo objeto é regida pela seguinte lógica:

  • Se o descritor de segurança passado incluir um proprietário, ele será atribuído como o proprietário do novo objeto. Caso contrário, o token do chamador será considerado para determinar o proprietário. Dentro do token, o proprietário padrão, se houver, é atribuído. Caso contrário, a ID de usuário do chamador será atribuída.
  • Se o descritor de segurança passado incluir um grupo, ele será atribuído como o grupo do novo objeto. Caso contrário, o token do chamador será considerado para determinar o grupo. Dentro do token, o grupo padrão, se houver, é atribuído. Caso contrário, a ID do grupo primário do chamador será atribuída.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows 2000 e versões posteriores do Windows.
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 da DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Confira também

GENERIC_MAPPING

IoGetFileObjectGenericMapping

SECURITY_DESCRIPTOR

SeDeassignSecurity