Erstellen von Sicherheitsbeschreibungen für neue Verzeichnisobjekte

Sie können ADSI verwenden, um einen Sicherheitsdeskriptor zu erstellen und als nTSecurityDescriptor-Eigenschaft eines neuen Objekts festzulegen oder es zu verwenden, um die nTSecurityDescriptor-Eigenschaft eines vorhandenen Objekts zu ersetzen.

So erstellen Sie einen Sicherheitsdeskriptor für ein Objekt:

  1. Verwenden Sie CoCreateInstance , um das ADSI COM-Objekt für den neuen Sicherheitsdeskriptor zu erstellen und einen IADsSecurityDescriptor-Schnittstellenzeiger auf dieses Objekt abzurufen. Beachten Sie, dass die Klassen-ID CLSID_SecurityDescriptor ist.
  2. Verwenden Sie die IADsSecurityDescriptor::p ut_Owner-Methode , um den Besitzer des Objekts festzulegen. Der Trustee ist ein Benutzer, eine Gruppe oder ein anderer Sicherheitsprinzipal. Eine Anwendung sollte den Wert aus der entsprechenden Eigenschaft aus dem Benutzer- oder Gruppenobjekt des Trustee verwenden, auf den die ACE angewendet werden soll.
  3. Verwenden Sie die IADsSecurityDescriptor::p ut_Control-Methode , um zu steuern, ob DACLs und SACLs vom Objekt aus dem übergeordneten Container geerbt werden.
  4. Verwenden Sie CoCreateInstance , um das ADSI COM-Objekt für die DACL für den neuen Sicherheitsdeskriptor zu erstellen und einen IADsAccessControlList-Schnittstellenzeiger auf dieses Objekt abzurufen. Beachten Sie, dass die Klassen-ID CLSID_AccessControlList ist.
  5. Verwenden Sie coCreateInstance , um das ADSI COM-Objekt für das neue ACE zu erstellen und einen IADsAccessControlEntry-Schnittstellenzeiger auf dieses Objekt abzurufen. Beachten Sie, dass die Klassen-ID CLSID_AccessControlEntry ist.
  6. Legen Sie für jedes ACE, das der DACL hinzugefügt werden soll, die Eigenschaften der ACE mithilfe der Eigenschaftsmethoden des IADsAccessControlEntry-Objekts des ACE fest. Weitere Informationen zu den Eigenschaften, die für eine ACE festgelegt werden sollen, finden Sie unter Festlegen von Zugriffsrechten für ein Objekt.
  7. Verwenden Sie für jedes ACE, das der DACL hinzugefügt werden soll, die QueryInterface-Methode für das IADsAccessControlEntry-Objekt , um einen IDispatch-Zeiger abzurufen. Die IADsAccessControlList::AddAce-Methode erfordert einen IDispatch-Schnittstellenzeiger auf die ACE.
  8. Verwenden Sie für jedes ACE, das der DACL hinzugefügt werden soll, IADsAccessControlList::AddAce , um der DACL das neue ACE hinzuzufügen. Beachten Sie, dass sich die Reihenfolge der ACEs innerhalb der ACL auf die Auswertung des Zugriffs auf das Objekt auswirken kann. Der richtige Zugriff auf das Objekt erfordert möglicherweise, dass Sie eine neue ACL erstellen, die ACEs aus der vorhandenen ACL in der richtigen Reihenfolge zur neuen ACL hinzufügen und dann die vorhandene ACL im Sicherheitsdeskriptor durch die neue ACL ersetzen. Weitere Informationen finden Sie unter Order of ACEs in a DACL.
  9. Führen Sie die Schritte 4-8 aus, um die SACL für den neuen Sicherheitsdeskriptor zu erstellen.
  10. Verwenden Sie die IADsSecurityDescriptor::p ut_DiscretionaryAcl-Methode , um die DACL festzulegen. Weitere Informationen zu DACLs finden Sie unter Null-DACLs und leere DACLs.
  11. Verwenden Sie die IADsSecurityDescriptor::p ut_SystemAcl-Methode , um die SACL festzulegen.
  12. Konvertieren Sie das IADsSecurityDescriptor-Objekt mithilfe der QueryInterface-Methode des IADsSecurityDescriptor-Objekts in ein VARIANT-Objekt, um eine IDispatch-Schnittstelle abzurufen. Legen Sie dann das vt-Element des VARIANT auf VT_DISPATCH fest und legen Sie das PdispVal-Element des VARIANT-Elements auf den IDispatch-Zeiger fest.
  13. Rufen Sie einen IADs-Schnittstellenzeiger auf das Objekt ab.
  14. Verwenden Sie die IADs::P ut-Methode mit "nTSecurityDescriptor" und der oben erstellten VARIANT , um den neuen Sicherheitsdeskriptor in den Eigenschaftencache zu schreiben.
  15. Verwenden Sie die IADs::SetInfo-Methode , um die Eigenschaft des Objekts im Verzeichnis zu aktualisieren.