Freigeben über


Lesen eines Steuerelementzugriffsberechtigungssatzes in der ACL eines Objekts

Mithilfe von ADSI lesen Sie eine Zugriffssteuerung wie alle anderen ACE in einer ACL. Beachten Sie, dass Sie auch die Win32-Sicherheits-APIs verwenden können, um ACLs für Verzeichnisobjekte zu lesen. Die Zugriffssteuerungsrechte verwenden jedoch die Eigenschaften der IADsAccessControlEntry-Schnittstelle in einer Weise, die spezifisch für das Gewähren und Verweigern von Zugriffssteuerungsrechten ist:

  • AccessMask muss ADS_RIGHT_DS_CONTROL_ACCESS enthalten.
  • Der Flags-Wert ist ADS_FLAG_OBJECT_TYPE_PRESENT.
  • ObjectType ist die Zeichenfolgenform des rightsGUID-Attributs des Steuerelementzugriffsrechts. Das Zeichenfolgenformat der GUID ist dasselbe Zeichenfolgenformat wie die Com-Bibliotheksfunktion StringFromGUID2 .
  • AceType ist entweder ADS_ACETYPE_ACCESS_ALLOWED_OBJECT , um dem Treuhänder das Zugriffsrecht für die Steuerung zu gewähren, oder ADS_ACETYPE_ACCESS_DENIED_OBJECT , dem Treuhänder das Zugriffsrecht zu verweigern.
  • Der Treuhänder ist der Sicherheitsprinzipal; das ist der Benutzer, die Gruppe, der Computer usw., für die der ACE gilt.

Verwenden Sie das folgende Verfahren, um ein ACE für ein ADSI-Objekt zu lesen. Das folgende Verfahren gilt für C- und C++-Anwendungen.

So lesen Sie ein ACE für ein ADSI-Objekt

  1. Rufen Sie einen IADs-Schnittstellenzeiger auf das -Objekt ab.
  2. Verwenden Sie die IADs::Get-Methode , um die Sicherheitsbeschreibung des Objekts abzurufen. Der Name der Eigenschaft, die den Sicherheitsdeskriptor enthält, lautet "nTSecurityDescriptor". Die Eigenschaft wird als VARIANT zurückgegeben, die einen IDispatch-Zeiger enthält. Beachten Sie, dass der vt-MemberVT_DISPATCH ist. Rufen Sie QueryInterface auf diesem IDispatch-Zeiger auf, um eine IADsSecurityDescriptor-Schnittstelle abzurufen, um die Methoden auf dieser Schnittstelle für den Zugriff auf die Sicherheitsdeskriptor-ACL zu verwenden.
  3. Verwenden Sie die IADsSecurityDescriptor::get_DiscretionaryAcl-Methode , um die ACL abzurufen. Die -Methode gibt einen IDispatch-Zeiger zurück. Rufen Sie QueryInterface auf diesem IDispatch-Zeiger auf, um eine IADsAccessControlList-Schnittstelle abzurufen, um die Methoden auf dieser Schnittstelle für den Zugriff auf die einzelnen ACEs in der ACL zu verwenden.
  4. Verwenden Sie die IADsAccessControlList::get__NewEnum-Methode , um die ACEs aufzulisten. Die -Methode gibt einen IUnknown-Zeiger zurück. Rufen Sie QueryInterface auf diesem IUnknown-Zeiger auf, um eine IEnumVARIANT-Schnittstelle abzurufen.
  5. Verwenden Sie die IEnumVARIANT::Next-Methode , um die ACEs in der ACL aufzulisten. Die Eigenschaft wird als VARIANT zurückgegeben, die einen IDispatch-Zeiger enthält. Beachten Sie, dass der vt-MemberVT_DISPATCH ist. Rufen Sie QueryInterface auf diesem IDispatch-Zeiger auf, um eine IADsAccessControlEntry-Schnittstelle zum Lesen des ACE abzurufen.
  6. Rufen Sie die IADsAccessControlEntry::get_AccessMask-Methode auf, um accessMask abzurufen, und überprüfen Sie, ob der AccessMask-Wert für das ADS_RIGHT_DS_CONTROL_ACCESS-Flag . Wenn es über dieses Flag verfügt, enthält das ACE ein Steuerungszugriffsrecht.
  7. Rufen Sie die IADsAccessControlEntry::get_Flags-Methode auf, um das Flag für den Objekttyp abzurufen.
  8. Überprüfen Sie den Flags-Wertauf ADS_FLAG_OBJECT_TYPE_PRESENT Flag. Wenn Flags auf ADS_FLAG_OBJECT_TYPE_PRESENT festgelegt ist, rufen Sie die IADsAccessControlEntry::get_ObjectType-Methode auf, um eine Zeichenfolge abzurufen, die die rightsGUID des Steuerelementzugriffsrechts enthält, auf das das ACE angewendet wird.
  9. Rufen Sie die IADsAccessControlEntry::get_AceType-Methode auf, um den ACE-Typ abzurufen. Der Typ ist ein ADS_ACETYPE_ACCESS_ALLOWED_OBJECT , um dem Treuhänder das Zugriffsrecht für die Steuerung zu gewähren, oder ADS_ACETYPE_ACCESS_DENIED_OBJECT , um das Zugriffsrecht für die Steuerung zu verweigern.
  10. Rufen Sie die IADsAccessControlEntry::get_Trustee-Methode auf, um den Sicherheitsprinzipal abzurufen. d. h. Benutzer, Gruppe, Computer usw., für die der ACE gilt.
  11. Wenn Sie mit den ObjectType - und Trustee-Zeichenfolgen fertig sind, verwenden Sie SysFreeString , um den Arbeitsspeicher für diese Zeichenfolgen freizugeben.
  12. Wenn Sie mit den Schnittstellen fertig sind, rufen Sie Release auf, um alle Schnittstellenverweise zu dekrementieren oder freizugeben.