Função SetSecurityDescriptorDacl (securitybaseapi.h)

A função SetSecurityDescriptorDacl define informações em uma DACL ( lista de controle de acesso discricionário ). Se uma DACL já estiver presente no descritor de segurança, a DACL será substituída.

Sintaxe

BOOL SetSecurityDescriptorDacl(
  [in, out]      PSECURITY_DESCRIPTOR pSecurityDescriptor,
  [in]           BOOL                 bDaclPresent,
  [in, optional] PACL                 pDacl,
  [in]           BOOL                 bDaclDefaulted
);

Parâmetros

[in, out] pSecurityDescriptor

Um ponteiro para a estrutura SECURITY_DESCRIPTOR à qual a função adiciona a DACL. Esse descritor de segurança deve estar em formato absoluto , o que significa que seus membros devem ser ponteiros para outras estruturas, em vez de deslocamentos para dados contíguos.

[in] bDaclPresent

Um sinalizador que indica a presença de uma DACL no descritor de segurança. Se esse parâmetro for TRUE, a função definirá o sinalizador SE_DACL_PRESENT na estrutura SECURITY_DESCRIPTOR_CONTROL e usará os valores nos parâmetros pDacl e bDaclDefaulted . Se esse parâmetro for FALSE, a função limpará o sinalizador SE_DACL_PRESENT e pDacl e bDaclDefaulted serão ignorados.

[in, optional] pDacl

Um ponteiro para uma estrutura de ACL que especifica a DACL para o descritor de segurança. Se esse parâmetro for NULL, uma DACL NULL será atribuída ao descritor de segurança, o que permite todo o acesso ao objeto. A DACL é referenciada pelo descritor de segurança, não copiado.

[in] bDaclDefaulted

Um sinalizador que indica a origem da DACL. Se esse sinalizador for TRUE, a DACL será recuperada por algum mecanismo padrão. Se FALSE, a DACL foi especificada explicitamente por um usuário. A função armazena esse valor no sinalizador SE_DACL_DEFAULTED da estrutura SECURITY_DESCRIPTOR_CONTROL . Se esse parâmetro não estiver especificado, o sinalizador SE_DACL_DEFAULTED estará limpo.

Retornar valor

Se a função for bem-sucedida, a função retornará diferente de zero.

Se a função falhar, ela retornará zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Há uma grande diferença entre uma DACL vazia e uma DACL inexistente. Quando uma DACL está vazia, ela não contém ACEs (entradas de controle de acesso ); portanto, nenhum direito de acesso é concedido explicitamente. Como resultado, o acesso ao objeto é negado implicitamente.

Quando um objeto não tem DACL (quando o parâmetro pDacl é NULL), nenhuma proteção é atribuída ao objeto e todas as solicitações de acesso são concedidas. Para ajudar a manter a segurança, restrinja o acesso usando uma DACL.

Há três resultados possíveis em configurações diferentes do sinalizador bDaclPresent e do parâmetro pDacl :

  • Quando o parâmetro pDacl aponta para uma DACL e o sinalizador bDaclPresent é TRUE, uma DACL é especificada e deve conter ACEs permitidas pelo acesso para permitir o acesso ao objeto.
  • Quando o parâmetro pDacl não aponta para uma DACL e o sinalizador bDaclPresent é TRUE, uma DACL NULL é especificada. Todo o acesso é permitido. Você não deve usar uma DACL NULL com um objeto porque qualquer usuário pode alterar a DACL e o proprietário do descritor de segurança. Isso interferirá no uso do objeto .
  • Quando o parâmetro pDacl não aponta para uma DACL e o sinalizador bDaclPresent é FALSE, uma DACL pode ser fornecida para o objeto por meio de uma herança ou mecanismo padrão.

Exemplos

Para obter um exemplo que usa essa função, consulte Criando um descritor de segurança para um novo objeto.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho securitybaseapi.h (inclua Windows.h)
Biblioteca Advapi32.lib
DLL Advapi32.dll

Confira também

GetSecurityDescriptorDacl

InitializeSecurityDescriptor

IsValidSecurityDescriptor

Controle de Acesso de baixo nível

Funções de Controle de Acesso de baixo nível

SECURITY_DESCRIPTOR

SECURITY_DESCRIPTOR_CONTROL

SetSecurityDescriptorGroup

SetSecurityDescriptorOwner

SetSecurityDescriptorSacl