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
Controle de Acesso de baixo nível