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
- Rufen Sie einen IADs-Schnittstellenzeiger auf das -Objekt ab.
- 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.
- 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.
- 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.
- 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.
- 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.
- Rufen Sie die IADsAccessControlEntry::get_Flags-Methode auf, um das Flag für den Objekttyp abzurufen.
- Ü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.
- 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.
- Rufen Sie die IADsAccessControlEntry::get_Trustee-Methode auf, um den Sicherheitsprinzipal abzurufen. d. h. Benutzer, Gruppe, Computer usw., für die der ACE gilt.
- Wenn Sie mit den ObjectType - und Trustee-Zeichenfolgen fertig sind, verwenden Sie SysFreeString , um den Arbeitsspeicher für diese Zeichenfolgen freizugeben.
- Wenn Sie mit den Schnittstellen fertig sind, rufen Sie Release auf, um alle Schnittstellenverweise zu dekrementieren oder freizugeben.