Condividi tramite


Lettura di un set di diritti di accesso di controllo nell'ACL di un oggetto

Usando ADSI, si legge un ace di controllo proprio come qualsiasi altro ACE in un ACL. Tenere presente che è anche possibile usare le API di sicurezza Win32 per leggere gli elenchi di controllo di accesso negli oggetti directory. Tuttavia, i diritti di accesso di controllo usano le proprietà dell'interfaccia IADsAccessControlEntry in modo specifico per concedere e negare i diritti di accesso di controllo:

  • AccessMask deve contenere ADS_RIGHT_DS_CONTROL_ACCESS.
  • Il valore flags è ADS_FLAG_OBJECT_TYPE_PREedizione Standard NT.
  • ObjectType è il formato stringa dell'attributo rightsGUID del diritto di accesso di controllo. Il formato stringa del GUID è lo stesso formato della libreria COM StringFromGUID2.
  • AceType è ADS_ACETYPE_ACCESS_ALLOWED_OBJECT per concedere al truste il diritto di accesso di controllo o ADS_ACETYPE_ACCESS_DENIED_OBJECT negare al trustee il diritto di accesso al controllo.
  • Trustee è l'entità di sicurezza, ovvero l'utente, il gruppo, il computer e così via, a cui si applica l'ace.

Utilizzare la procedura seguente per leggere un ace per un oggetto ADSI. La procedura seguente si applica alle applicazioni C e C++.

Per leggere un ace per un oggetto ADSI

  1. Ottenere un puntatore all'interfaccia IAD all'oggetto .
  2. Usare il metodo IADs::Get per ottenere il descrittore di sicurezza dell'oggetto. Il nome della proprietà che contiene il descrittore di sicurezza è "nTSecurityDescriptor". La proprietà verrà restituita come VARIANT che contiene un puntatore IDispatch. Tenere presente che il membro vt è VT_DISPATCH. Chiamare QueryInterface sul puntatore IDispatch per ottenere un'interfaccia IADsSecurityDescriptor per usare i metodi su tale interfaccia per accedere all'ACL del descrittore di sicurezza.
  3. Usare il metodo IADsSecurityDescriptor::get_DiscretionaryAcl per ottenere l'ACL. Il metodo restituisce un puntatore IDispatch. Chiamare QueryInterface sul puntatore IDispatch per ottenere un'interfaccia IADsAccessControlList per usare i metodi su tale interfaccia per accedere ai singoli ACL.
  4. Usare il metodo IADsAccessControlList::get__NewEnum per enumerare gli ACL. Il metodo restituisce un puntatore IUnknown. Chiamare QueryInterface sul puntatore IUnknown per ottenere un'interfaccia IEnumVARIANT.
  5. Utilizzare il metodo IEnumVARIANT::Next per enumerare gli ACL. La proprietà viene restituita come VARIANT che contiene un puntatore IDispatch. Tenere presente che il membro vt è VT_DISPATCH. Chiamare QueryInterface sul puntatore IDispatch per ottenere un'interfaccia IADsAccessControlEntry per leggere ace.
  6. Chiamare il metodo IADsAccessControlEntry::get_AccessMask per ottenere AccessMask e verificare che il valore AccessMask per il flag ADS_RIGHT_DS_CONTROL_ACCESS. Se ha questo flag, l'ace contiene un diritto di accesso di controllo.
  7. Chiamare il metodo IADsAccessControlEntry::get_Flags per ottenere il flag per il tipo di oggetto.
  8. Controllare il valore Flags per ADS_FLAG_OBJECT_TYPE_PREedizione Standard NT flag. Se Flags è impostato su ADS_FLAG_OBJECT_TYPE_PREedizione Standard NT, chiamare il metodo IADsAccessControlEntry::get_ObjectType per ottenere una stringa contenente il rightsGUID del diritto di accesso di controllo a cui si applica l'ACE.
  9. Chiamare il metodo IADsAccessControlEntry::get_AceType per ottenere il tipo ACE. Il tipo sarà un ADS_ACETYPE_ACCESS_ALLOWED_OBJECT per concedere al truste il diritto di accesso di controllo o ADS_ACETYPE_ACCESS_DENIED_OBJECT di negare il diritto di accesso al controllo.
  10. Chiamare il metodo IADsAccessControlEntry::get_Trustee per ottenere l'entità di sicurezza, ovvero utente, gruppo, computer e così via a cui si applica ace.
  11. Al termine delle stringhe ObjectType e Trustee , usare SysFreeString per liberare la memoria per tali stringhe.
  12. Al termine delle interfacce, chiamare Release per decrementare o rilasciare tutti i riferimenti all'interfaccia.