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 |