Funzione SetPrivateObjectSecurityEx (securitybaseapi.h)
La funzione SetPrivateObjectSecurityEx modifica il descrittore di sicurezza di un oggetto privato gestito dal gestore risorse che chiama questa funzione. La funzione SetPrivateObjectSecurityEx ha un parametro flags che specifica se gestione risorse supporta l'ereditarietà automatica delle voci di controllo di accesso (AE).
Sintassi
BOOL SetPrivateObjectSecurityEx(
[in] SECURITY_INFORMATION SecurityInformation,
[in] PSECURITY_DESCRIPTOR ModificationDescriptor,
[in, out] PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
[in] ULONG AutoInheritFlags,
[in] PGENERIC_MAPPING GenericMapping,
[in, optional] HANDLE Token
);
Parametri
[in] SecurityInformation
Parti del descrittore di sicurezza da impostare. Questo valore può essere una combinazione dei flag di bit SECURITY_INFORMATION .
[in] ModificationDescriptor
Puntatore a una struttura SECURITY_DESCRIPTOR . Le parti di questo descrittore di sicurezza indicate dal parametro SecurityInformation vengono applicate al descrittore di sicurezza ObjectsSecurityDescriptor .
[in, out] ObjectsSecurityDescriptor
Puntatore a un puntatore a una struttura SECURITY_DESCRIPTOR . Questo descrittore di sicurezza deve essere in formato auto-relativo . La memoria per il descrittore di sicurezza deve essere allocata dall'heap del processo (GetProcessHeap) con la funzione HeapAlloc.
In input, questo è il descrittore di sicurezza corrente dell'oggetto privato. La funzione lo modifica per produrre il nuovo descrittore di sicurezza. Se necessario, la funzione SetPrivateObjectSecurityEx alloca memoria aggiuntiva per produrre un descrittore di sicurezza più grande.
[in] AutoInheritFlags
Specifica l'ereditarietà automatica degli ACL. Se il server protetto non implementa l'ereditarietà automatica, deve specificare zero; in caso contrario, può specificare una combinazione dei valori seguenti, definiti in Winnt.h.
Valore | Significato |
---|---|
|
Il nuovo elenco di controllo di accesso discrezionale (DACL) contiene gli ACL ereditati dall'elenco DACL dell'elemento padre dell'oggetto, nonché gli ACL espliciti specificati nell'elenco DACL di ModificationDescriptor. Se questo flag non è impostato, il nuovo DACL non eredita gli ACL. |
|
Il nuovo elenco di controllo di accesso di sistema (SACL) contiene gli ACL ereditati dall'elenco SACL del descrittore di sicurezza associato all'elemento padre dell'oggetto, nonché gli ACL espliciti specificati nell'elenco SACL di ModificationDescriptor. Se questo flag non è impostato, il nuovo sacl non eredita gli ACL. |
|
La funzione non esegue il controllo dei privilegi. Se viene impostato anche il flag SEF_AVOID_OWNER_CHECK , il parametro Token può essere NULL. Usare questo flag quando si implementa l'ereditarietà automatica per evitare di controllare i privilegi per ogni elemento figlio aggiornato. |
|
La funzione non controlla la validità del proprietario nel risultante ObjectsSecurityDescriptor , come descritto in Osservazioni. Se viene impostato anche il flag SEF_AVOID_PRIVILEGE_CHECK , il parametro Token può essere NULL. |
|
Per impostazione predefinita, il proprietario di ObjectsSecurityDescriptor è il proprietario dell'elemento padre dell'oggetto. Se questo flag non è impostato, il proprietario di ObjectsSecurityDescriptor viene impostato per impostazione predefinita sul proprietario del token specificato dal parametro Token . Il proprietario del token viene specificato nel token stesso. In entrambi i casi, se il parametro ModificationDescriptor non è NULL, il proprietario di ObjectsSecurityDescriptor viene impostato sul proprietario da ModificationDescriptor. |
|
Il gruppo di ObjectsSecurityDescriptor viene predefinito per il gruppo dal proprietario dell'elemento padre dell'oggetto. Se questo flag non è impostato, il gruppo di ObjectsSecurityDescriptor viene impostato per impostazione predefinita sul gruppo del token specificato dal parametro Token . Il gruppo del token viene specificato nel token stesso. In entrambi i casi, se il parametro ModificationDescriptor non è NULL, il gruppo ObjectsSecurityDescriptor viene impostato sul gruppo da ModificationDescriptor. |
|
Un'entità con un livello obbligatorio inferiore a quello dell'oggetto non può scrivere nell'oggetto . |
|
Un'entità con un livello obbligatorio inferiore a quello dell'oggetto non può leggere l'oggetto. |
|
Un'entità con un livello obbligatorio inferiore a quello dell'oggetto non può eseguire l'oggetto . |
|
Eventuali restrizioni specificate dal proprietario dell'elemento padre dell'oggetto che limitano la capacità del chiamante di specificare un DACL in ObjectsSecurityDescriptor vengono ignorate . |
[in] GenericMapping
Puntatore a una struttura di GENERIC_MAPPING che specifica i diritti di accesso specifici e standard corrispondenti a ognuno dei diritti di accesso generici.
[in, optional] Token
Identifica il token di accesso per il client per cui viene modificata la sicurezza dell'oggetto privato. Questo parametro è necessario per garantire che il client abbia fornito un valore legittimo per un nuovo IDENTIFICATORe di sicurezza del proprietario (SID). Il token deve essere aperto per l'accesso TOKEN_QUERY.
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
Se il parametro AutoInheritFlags è zero, SetPrivateObjectSecurityEx è identico alla funzione SetPrivateObjectSecurity .
Questa funzione è destinata all'uso solo da parte dei gestori di risorse. Per implementare la semantica di controllo di accesso di Windows standard per l'aggiornamento dei descrittori di sicurezza, un gestore di risorse deve verificare che le condizioni seguenti vengano soddisfatte prima di chiamare SetPrivateObjectSecurityEx:
- Se il proprietario dell'oggetto è impostato, il processo chiamante deve disporre dell'autorizzazione WRITE_OWNER o essere il proprietario dell'oggetto.
- Se l'elenco DACL dell'oggetto è impostato, il processo chiamante deve disporre dell'autorizzazione WRITE_DAC o essere il proprietario dell'oggetto.
- Se l'oggetto SACL è impostato, è necessario abilitare il privilegio SE_SECURITY_NAME per il processo chiamante.
Il processo che chiama questa funzione non deve rappresentare un client perché i client in genere non dispongono dei privilegi appropriati necessari per le operazioni di token sottostanti.
Se AutoInheritFlags specifica il bit SEF_DACL_AUTO_INHERIT, la funzione applica le regole seguenti all'elenco DACL per creare il nuovo descrittore di sicurezza dal descrittore corrente:
- Se il flag di SE_DACL_PROTECTED non è impostato nei bit di controllo del descrittore di sicurezza corrente o nel descrittore di modificaDescriptor, la funzione costruisce il descrittore di sicurezza di output dagli ACL ereditati del descrittore di sicurezza corrente e degli ACL non crittografati di ModificationDescriptor. Ciò significa che è impossibile modificare un ace ereditato modificando l'elenco di controllo di accesso (ACL) in un oggetto . Questo comportamento mantiene gli ACL ereditati perché sono stati ereditati dal contenitore padre.
Un editor ACL deve rendere gli ACL ereditati non disponibili per impedirne la modifica.
- Se SE_DACL_PROTECTED è impostato in ModificationDescriptor, il descrittore di sicurezza corrente viene ignorato. Il descrittore di sicurezza di output viene compilato come copia di ModificationDescriptor con qualsiasi bit INHERITED_ACE disattivato.
Idealmente, un editor ACL deve disattivare i bit INHERITED_ACE che indicano al chiamante che gli ACL ereditati dall'oggetto padre dell'oggetto vengono ora impostati in modo esplicito sull'oggetto.
- Se SE_DACL_PROTECTED è impostato nel descrittore di sicurezza corrente e non in ModificationDescriptor, il descrittore di sicurezza corrente viene ignorato. Il descrittore di sicurezza di output viene compilato come copia di ModificationDescriptor. È responsabilità del chiamante assicurarsi che gli ACL corretti abbiano il bit di INHERITED_ACE attivato.
Per entrambi i dacl e sacche, determinati tipi di ACL nell'input ObjectsSecurityDescriptor e in ModificationDescriptor verranno sostituiti da due ACL nell'output ObjectsSecurityDescriptor. In particolare, un ace ereditabile che contiene almeno uno degli elementi mappabili seguenti comporterà due ACL nell'output ObjectsSecurityDescriptor. Gli elementi mappabili includono:
- Diritti di accesso generico nella struttura di ACCESS_MASK
- SID proprietario creatore o SID del gruppo creatore come identificatore del soggetto ACE
- Ace che è una copia dell'originale, ma con il flag INHERIT_ONLY impostato
- Ace in cui è attivato il bit INHERITED_ACE e gli elementi generici vengono mappati a elementi specifici:
- I diritti di accesso generico vengono sostituiti dai diritti di accesso standard e specifici corrispondenti indicati nell'input GenericMapping.
- Il SID proprietario di Creator viene sostituito con il proprietario nell'output SecurityDescriptor
- Il SID del gruppo creatore viene sostituito con il gruppo nell'output SecurityDescriptor
- Deve essere un SID formato legalmente
- Deve corrispondere a TokenUser nel token
- Deve corrispondere a un gruppo nei TokenGroup in Token in cui gli attributi del gruppo:
- Includere SE_GROUP_OWNER
- Includere SE_GROUP_USE_FOR_DENY_ONLY
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | securitybaseapi.h (include Windows.h) |
Libreria | Advapi32.lib |
DLL | Advapi32.dll |
Vedi anche
Funzioni di Controllo di accesso client/server