Controllo dell'accesso a oggetti privati
Un'applicazione server protetta deve controllare i diritti di accesso di un client prima di consentire al client di accedere a un oggetto privato protetto. A tale scopo, il server passa un token di rappresentazione , un descrittore di sicurezza e un set di diritti di accesso richiesti per AccessCheck. Le voci di controllo di accesso (ACL) nel descrittore di sicurezza DACL specificano i diritti di accesso consentiti o negati a vari trustee. La funzione AccessCheck confronta il trustee in ogni ACE con i trustee identificati nel token di impersonificazione. Per una descrizione dell'algoritmo usato per concedere o negare l'accesso, vedere How DACLs Control Access to an Object.
La funzione AccessCheckAndAuditAlarm esegue un controllo di accesso simile. Inoltre, genera record di controllo nel registro eventi di sicurezza a seconda della SACL nel descrittore di sicurezza.
Le funzioni di AccessCheckByType e AccessCheckByTypeAndAuditAlarm sono simili a AccessCheck e AccessCheckAndAuditAlarm, ad eccezione del fatto che consentono di controllare l'accesso ai sottooggetti di un oggetto, ad esempio set di proprietà o proprietà. Le funzioni di AccessCheckByTypeResultList e AccessCheckByTypeResultListAndAuditAlarm sono simili a AccessCheck, ad eccezione del fatto che forniscono i risultati del controllo di accesso per ogni sottooggetto in una gerarchia delle proprietà e dei set di proprietà dell'oggetto. Queste funzioni usano la struttura OBJECT_TYPE_LIST per descrivere la gerarchia degli oggetti per cui viene controllato l'accesso. Le funzioni che generano un messaggio di controllo utilizzano il tipo di enumerazione AUDIT_EVENT_TYPE per indicare se l'oggetto da controllare è un oggetto servizio directory. Per altre informazioni sulla gerarchia di un oggetto e sui relativi sottooggetti, vedere ACL per controllare l'accesso alle proprietà di un oggetto.
I diritti di accesso richiesti passati alle funzioni di AccessCheck e AccessCheckAndAuditAlarm non devono includere diritti di accesso generici . Il server può utilizzare la funzioneMapGenericMaskper convertire i diritti di accesso generici ai diritti specifici e standard corrispondenti in base al mapping specificato nella struttura GENERIC_MAPPING.
Le funzioni di AreAllAccessesGranted e AreAnyAccessesGranted confrontano una maschera di accesso richiesta con una maschera di accesso concessa.
Per il codice di esempio che usa la funzione AccessCheck, vedere Verifica dell'accesso client con ACL in C++.
La funzione ConvertToAutoInheritPrivateObjectSecurity crea e restituisce un descrittore di sicurezza in un formato che consente la propagazione automatica degli ACL ereditabili. Questo descrittore di sicurezza contiene tutti gli ACE, ereditati e non ereditati, nel descrittore di sicurezza corrente ed è nel formato auto-relativo . La funzione ConvertToAutoInheritPrivateObjectSecurity determina se gli ACE vengono ereditati o non ereditati confrontando tutti gli ACE nel descrittore di sicurezza corrente con tutti gli ACE nel suo descrittore di sicurezza padre. Potrebbe non esserci una corrispondenza uno a uno tra i due gruppi di ACE. Ad esempio, un ACE che consente l'autorizzazione di lettura/scrittura può essere equivalente a due ACE: un ACE che consente l'autorizzazione di lettura e un ACE che consente l'autorizzazione di scrittura. Un descrittore di sicurezza padre non può essere fornito quando il descrittore di sicurezza corrente è padre.