Funzione SetSecurityDescriptorDacl (securitybaseapi.h)
La funzione SetSecurityDescriptorDacl imposta informazioni in un elenco di controllo di accesso discrezionale (DACL). Se un'elenco dati è già presente nel descrittore di sicurezza, l'elenco dati viene sostituito.
Sintassi
BOOL SetSecurityDescriptorDacl(
[in, out] PSECURITY_DESCRIPTOR pSecurityDescriptor,
[in] BOOL bDaclPresent,
[in, optional] PACL pDacl,
[in] BOOL bDaclDefaulted
);
Parametri
[in, out] pSecurityDescriptor
Puntatore alla struttura SECURITY_DESCRIPTOR a cui la funzione aggiunge l'elenco di controllo livello dati. Questo descrittore di sicurezza deve essere in formato assoluto , il che significa che i membri devono essere puntatori ad altre strutture, anziché offset ai dati contigui.
[in] bDaclPresent
Flag che indica la presenza di un'elenco dati nel descrittore di sicurezza. Se questo parametro è TRUE, la funzione imposta il flag di SE_DACL_PRESENT nella struttura SECURITY_DESCRIPTOR_CONTROL e usa i valori nei parametri pDacl e bDaclDefaulted. Se questo parametro è FALSE, la funzione cancella il flag di SE_DACL_PRESENT e pDacl e bDaclDefaulted vengono ignorati.
[in, optional] pDacl
Puntatore a una struttura ACL che specifica l'elenco dati per il descrittore di sicurezza. Se questo parametro è NULL, viene assegnato un DACL NULL al descrittore di sicurezza, che consente l'accesso all'oggetto. L'elenco di controllo livello dati viene fatto riferimento, non copiato in, il descrittore di sicurezza.
[in] bDaclDefaulted
Flag che indica l'origine dell'elenco dati. Se questo flag è TRUE, l'elenco di controllo livello dati è stato recuperato da un meccanismo predefinito. Se FALSE, l'elenco dati è stato specificato in modo esplicito da un utente. La funzione archivia questo valore nel flag SE_DACL_DEFAULTED della struttura SECURITY_DESCRIPTOR_CONTROL . Se questo parametro non è specificato, il flag di SE_DACL_DEFAULTED viene cancellato.
Valore restituito
Se la funzione ha esito positivo, la funzione restituisce un valore diverso da zero.
Se la funzione ha esito negativo, restituisce zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.
Commenti
Esiste una differenza importante tra un daCL vuoto e un daCL non esistente. Quando un daCL è vuoto, non contiene voci di controllo di accesso (ACL); pertanto, non vengono concessi diritti di accesso in modo esplicito. Di conseguenza, l'accesso all'oggetto viene negato in modo implicito.
Quando un oggetto non ha un daCL (quando il parametro pDacl è NULL), non viene assegnata alcuna protezione all'oggetto e vengono concesse tutte le richieste di accesso. Per mantenere la sicurezza, limitare l'accesso usando un elenco dati.
Esistono tre possibili risultati in configurazioni diverse del flag bDaclPresent e del parametro pDacl :
- Quando il parametro pDacl punta a un daCL e il flag bDaclPresent è TRUE, viene specificato un daCL e deve contenere ACL consentiti per l'accesso per consentire l'accesso all'oggetto.
- Quando il parametro pDacl non punta a un daCL e il flag bDaclPresent è TRUE, viene specificato un daCL NULL . È consentito tutto l'accesso. Non è consigliabile usare un daCL NULL con un oggetto perché qualsiasi utente può modificare l'elenco dati e il proprietario del descrittore di sicurezza. Ciò interferirà con l'uso dell'oggetto.
- Quando il parametro pDacl non punta a un daCL e il flag bDaclPresent è FALSE, è possibile specificare un elenco di controllo livello dati per l'oggetto tramite un meccanismo di ereditarietà o predefinito.
Esempio
Per un esempio che usa questa funzione, vedere Creazione di un descrittore di sicurezza per un nuovo oggetto.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows XP [app desktop | App UWP] |
Server minimo supportato | Windows Server 2003 [app desktop | App UWP] |
Piattaforma di destinazione | Windows |
Intestazione | securitybaseapi.h (include Windows.h) |
Libreria | Advapi32.lib |
DLL | Advapi32.dll |
Vedi anche
Controllo di accesso di basso livello