Função SeSetSecurityDescriptorInfoEx (ntifs.h)

A rotina SeSetSecurityDescriptorInfoEx modifica o descritor de segurança de um objeto e especifica se o objeto dá suporte à herança automática de ACE (entradas de controle de acesso).

Sintaxe

NTSTATUS SeSetSecurityDescriptorInfoEx(
  [in, optional] PVOID                 Object,
  [in]           PSECURITY_INFORMATION SecurityInformation,
                 PSECURITY_DESCRIPTOR  ModificationDescriptor,
  [in, out]      PSECURITY_DESCRIPTOR  *ObjectsSecurityDescriptor,
  [in]           ULONG                 AutoInheritFlags,
  [in]           POOL_TYPE             PoolType,
  [in]           PGENERIC_MAPPING      GenericMapping
);

Parâmetros

[in, optional] Object

Ponteiro para o objeto cujo descritor de segurança deve ser modificado. Isso é usado para atualizar informações de cota de segurança.

[in] SecurityInformation

Ponteiro para um valor que especifica quais informações de segurança devem ser definidas. Pode ser uma combinação de uma ou mais das opções a seguir.

Valor Significado
DACL_SECURITY_INFORMATION Indica que a DACL (lista de controle de acesso discricionário) do objeto está sendo definida. Requer acesso WRITE_DAC.
GROUP_SECURITY_INFORMATION Indica que o identificador de grupo primário do objeto está sendo definido. Requer acesso WRITE_OWNER.
OWNER_SECURITY_INFORMATION Indica que o identificador do proprietário do objeto está sendo definido. Requer acesso WRITE_OWNER.
SACL_SECURITY_INFORMATION Indica que a ACL do sistema (SACL) do objeto está sendo definida. Requer acesso ACCESS_SYSTEM_SECURITY.

ModificationDescriptor

O descritor de segurança de entrada a ser aplicado ao objeto . Espera-se que o chamador dessa rotina investigue e capture o descritor de segurança passado antes de chamar e libere-o após a chamada.

[in, out] ObjectsSecurityDescriptor

Ponteiro para um ponteiro para o descritor de segurança do objeto. O descritor de segurança deve estar no formato auto-relativo. Essa estrutura deve ser desalocada pelo chamador.

[in] AutoInheritFlags

Máscara de bits que controla a herança automática de ACEs. Defina como o OR lógico de um ou mais dos seguintes sinalizadores de bits:

Sinalizadores de informações de segurança Significado
SEF_DACL_AUTO_INHERIT Se esse sinalizador for definido, a DACL será tratada como uma DACL herdada automaticamente e será processada conforme descrito na seção Comentários a seguir. Esse bit será ignorado se DACL_SECURITY_INFORMATION não estiver definido no parâmetro SecurityInformation .
SEF_SACL_AUTO_INHERIT Se esse sinalizador for definido, a SACL será tratada como uma SACL herdada automaticamente e será processada conforme descrito na seção Comentários a seguir. Esse bit será ignorado se SACL_SECURITY_INFORMATION não estiver definido no parâmetro SecurityInformation .

[in] PoolType

Especifica o tipo de pool a ser usado ao alocar um novo descritor de segurança, que pode ser um dos seguintes:

  • NonPagedPool
  • PagedPool
  • NonPagedPoolCacheAligned
  • PagedPoolCacheAligned

Normalmente, um chamador especifica PagedPool ou nonPagedPool se o buffer for acessado em IRQL >= DISPATCH_LEVEL ou em um contexto de thread arbitrário.

Os tipos de pool NonPagedPoolMustSucceed e NonPagedPoolCacheAlignedMustS estão obsoletos e não devem mais ser usados.

[in] GenericMapping

Ponteiro para uma estrutura GENERIC_MAPPING que especifica o mapeamento de tipos de acesso genéricos para tipos de acesso específicos e padrão para o objeto que está sendo acessado. Espera-se que essa estrutura de mapeamento seja segura para acessar (ou seja, capturada, se necessário) antes de ser passada para essa rotina.

Retornar valor

Código de retorno Descrição
STATUS_SUCCESS O descritor de segurança do objeto foi modificado com êxito.
STATUS_BAD_DESCRIPTOR_FORMAT O descritor de segurança do objeto fornecido não estava em formato auto-relativo.
STATUS_NO_SECURITY_ON_OBJECT O objeto não tem um descritor de segurança.

Comentários

Se o parâmetro AutoInheritFlags for zero, o efeito de chamar SeSetSecurityDescriptorInfoEx será o mesmo que chamar SeSetSecurityDescriptorInfo.

Se AutoInheritFlags especificar o bit SEF_DACL_AUTO_INHERIT, SeSetSecurityDescriptorInfoEx aplicará as seguintes regras à DACL para criar o novo descritor de segurança do descritor atual:

  • Se o sinalizador SE_DACL_PROTECTED não estiver definido nos bits de controle do descritor de segurança atual ou do SecurityDescriptor de entrada, SeSetSecurityDescriptorInfoEx construirá o descritor de segurança de saída dos ACEs herdados do descritor de segurança atual e acEs não herdados de SecurityDescriptor. Ou seja, é impossível alterar uma ACE herdada alterando a ACL em um objeto . Esse comportamento preserva as ACEs herdadas, pois elas foram herdadas do contêiner pai.

  • Se SE_DACL_PROTECTED estiver definido no SecurityDescriptor de entrada, o descritor de segurança atual será ignorado. O descritor de segurança de saída é criado como uma cópia do SecurityDescriptor de entrada com qualquer INHERITED_ACE bits desativados.

Idealmente, um editor de ACL deve desativar os bits INHERITED_ACE indicando ao chamador que os ACEs herdados do pai do objeto agora estão sendo definidos explicitamente no objeto.

  • Se SE_DACL_PROTECTED estiver definido no descritor de segurança atual e não no SecurityDescriptor, o descritor de segurança atual será ignorado. O descritor de segurança de saída é criado como uma cópia do SecurityDescriptor. É responsabilidade do chamador garantir que as ACEs corretas tenham o INHERITED_ACE bit ativado.

Se AutoInheritFlags especificar o bit SEF_SACL_AUTO_INHERIT, SeSetSecurityDescriptorInfoEx aplicará regras semelhantes à nova SACL.

Para obter mais informações sobre controle de acesso e herança ace, consulte a seção Segurança da documentação do SDK do Microsoft Windows.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Confira também

ACE

ACL

GENERIC_MAPPING

RtlCreateSecurityDescriptor

RtlCreateSecurityDescriptorRelative

RtlLengthSecurityDescriptor

RtlSetDaclSecurityDescriptor

RtlSetOwnerSecurityDescriptor

RtlValidSecurityDescriptor

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SeQuerySecurityDescriptorInfo

SeSetSecurityDescriptorInfo