IADsAccessControlList-Schnittstelle (iads.h)

Die IADsAccessControlList-Schnittstelle ist eine duale Schnittstelle, die einzelne Zugriffssteuerungseinträge (Access Control Entries, ACEs) verwaltet.

Vererbung

Die IADsAccessControlList-Schnittstelle erbt von der IDispatch-Schnittstelle . IADsAccessControlList verfügt auch über folgende Membertypen:

Methoden

Die IADsAccessControlList-Schnittstelle verfügt über diese Methoden.

 
IADsAccessControlList::AddAce

Die IADsAccessControlList::AddAce-Methode fügt dem IADsAccessControlEntry-Objekt ein IADsAccessControlEntry-Objekt hinzu.
IADsAccessControlList::CopyAccessList

Die IADsAccessControlList::CopyAccessList-Methode kopiert jeden Zugriffssteuerungseintrag (Access Control Entry, ACE) in der Zugriffssteuerungsliste (Access Control List, ACL) in den Prozessbereich des Aufrufers.
IADsAccessControlList::get__NewEnum

Die IADsAccessControlList::get__NewEnum-Methode wird verwendet, um ein Enumeratorobjekt für die ACL zum Aufzählen von ACEs abzurufen.
IADsAccessControlList::RemoveAce

Entfernt einen Zugriffssteuerungseintrag (Access Control Entry, ACE) aus der Zugriffssteuerungsliste (Access Control List, ACL).

Hinweise

Eine Zugriffssteuerungsliste (Access Control List, ACL) ist eine Sammlung von ACEs, die eine spezifischere Zugriffssteuerung für dasselbe ADSI-Objekt für verschiedene Clients bereitstellen können. Im Allgemeinen implementieren verschiedene Anbieter unterschiedliche Zugriffssteuerungen, sodass das Verhalten des Objekts spezifisch für den Anbieter ist. Weitere Informationen finden Sie in der Anbieterdokumentation. Weitere Informationen zu Microsoft-Anbietern finden Sie unter ADSI-Systemanbieter. Derzeit unterstützt nur der LDAP-Anbieter Zugriffssteuerungen.

Bevor Sie mit einem Objekt ace arbeiten können, rufen Sie zuerst die ACL ab, zu der sie gehören. ACLs werden von Sicherheitsdeskriptoren verwaltet und können von einer ermessensgesteuerten ACL und einer System-ACL sein. Weitere Informationen finden Sie unter IADsSecurityDescriptor.

Mithilfe der Eigenschaften und Methoden der IADsAccessControlList-Schnittstelle können Sie ACEs abrufen und aufzählen, der Liste neue Einträge hinzufügen oder vorhandene Einträge entfernen.

So verwalten Sie Zugriffssteuerungen über eine ADSI

  1. Rufen Sie zunächst den Sicherheitsdeskriptor des Objekts ab, das die IADsSecurityDescriptor-Schnittstelle implementiert.
  2. Rufen Sie anschließend die ACL aus dem Sicherheitsdeskriptor ab.
  3. Drittens: Arbeiten Sie mit dem ACE (ACEs) des Objekts in der ACL.

So sorgen Sie dafür, dass neue oder geänderte ACEs dauerhaft sind

  1. Fügen Sie zunächst der ACL den ACE hinzu.
  2. Weisen Sie anschließend die ACL dem Sicherheitsdeskriptor zu.
  3. Drittens: Committen Sie den Sicherheitsdeskriptor in den Verzeichnisspeicher.
Weitere Informationen zu DACLs finden Sie unter Null-DACLs und leere DACLs.

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie Sie mit Zugriffssteuerungseinträgen einer ermessensbezogenen ACL arbeiten.

Dim X As IADs
Dim Namespace As IADsOpenDSObject
Dim SecurityDescriptor As IADsSecurityDescriptor
Dim Dacl As IADsAccessControlList

On Error GoTo Cleanup
 
Set Namespace = GetObject("LDAP://")
Set X= Namespace.OpenDSObject("LDAP://DC=Fabrikam,DC=Com, vbNullString, vbNullString,  ADS_SECURE_AUTHENTICATION)
 
Set SecurityDescriptor = X.Get("ntSecurityDescriptor")
Debug.Print SecurityDescriptor.Owner
Debug.Print SecurityDescriptor.Group
 
Set Dacl = SecurityDescriptor.DiscretionaryAcl
Debug.Print Dacl.AceCount
 
For Each Obj In Dacl
   Debug.Print Obj.Trustee
   Debug.Print Obj.AccessMask
   Debug.Print Obj.AceFlags
   Debug.Print Obj.AceType
Next

Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set X = Nothing
    Set Namespace = Nothing
    Set SecurityDescriptor = Nothing
    Set Dacl = Nothing

Im folgenden Codebeispiel werden ACEs aus einer DACL aufgelistet.

IADs *pADs = NULL;
IDispatch *pDisp = NULL;
IADsSecurityDescriptor *pSD = NULL;
VARIANT var;
HRESULT hr = S_OK;
 
VariantInit(&var);

hr = ADsOpenObject(L"LDAP://OU=Sales, DC=Fabrikam,DC=com",NULL,NULL,
                   ADS_SECURE_AUTHENTICATION, IID_IADs,(void**)&pADs);
if(FAILED(hr)) {goto Cleanup;}

hr = pADs->Get(CComBSTR("ntSecurityDescriptor"), &var);
if(FAILED(hr)) {goto Cleanup;}

pDisp = V_DISPATCH(&var);

hr = pDisp->QueryInterface(IID_IADsSecurityDescriptor,(void**)&pSD);
if(FAILED(hr)) {goto Cleanup;}
pDisp->Release();


pSD->get_DiscretionaryAcl(&pDisp);

hr = pDisp->QueryInterface(IID_IADsAccessControlList,(void**)&pACL);
if(FAILED(hr)) {goto Cleanup;}

hr = DisplayAccessInfo(pSD);
if(FAILED(hr)) {goto Cleanup;}
VariantClear(&var);

Cleanup:
    if(pADs) pADs->Release();
    if(pDisp) pDisp->Release();
    if(pSD) pSD->Release();
    return hr;



HRESULT DisplayAccessInfo(IADsSecurityDescriptor *pSD)
{
    LPWSTR lpszFunction = L"DisplayAccessInfo";
    IDispatch *pDisp = NULL;
    IADsAccessControlList *pACL = NULL;
    IADsAccessControlEntry *pACE = NULL;
    IEnumVARIANT *pEnum = NULL;
    IUnknown *pUnk = NULL;
    HRESULT hr = S_OK;
    ULONG nFetch = 0;
    BSTR bstrValue = NULL;
    VARIANT var;
    LPWSTR lpszOutput = NULL;
    LPWSTR lpszMask = NULL;
    size_t nLength = 0;
    
    VariantInit(&var);
    
    hr = pSD->get_DiscretionaryAcl(&pDisp);
    if(FAILED(hr)){goto Cleanup;}
    hr = pDisp->QueryInterface(IID_IADsAccessControlList,(void**)&pACL);
    if(FAILED(hr)){goto Cleanup;}
    
    hr = pACL->get__NewEnum(&pUnk);
    if(FAILED(hr)){goto Cleanup;}
    
    hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);
    
    if(FAILED(hr)){goto Cleanup;}
    hr = pEnum->Next(1,&var,&nFetch);
    
    while(hr == S_OK)
    {
        if(nFetch==1)
        {
            if(VT_DISPATCH != V_VT(&var))
            {
                goto Cleanup;
            }
            
            pDisp = V_DISPATCH(&var);
            hr = pDisp->QueryInterface(IID_IADsAccessControlEntry,(void**)&pACE);
            
            if(SUCCEEDED(hr))
            {
                lpszMask = L"Trustee: %s";
                hr = pACE->get_Trustee(&bstrValue);
                nLength = wcslen(lpszMask) + wcslen(bstrValue) + 1;
                lpszOutput = new WCHAR[nLength];
                swprintf_s(lpszOutput,lpszMask,bstrValue);
                printf(lpszOutput);
                delete [] lpszOutput;
                SysFreeString(bstrValue);
                
                pACE->Release();
                pACE = NULL;
                pDisp->Release();
                pDisp = NULL;
            }       
            
            VariantClear(&var);
        }       
        hr = pEnum->Next(1,&var,&nFetch);
    }
    
Cleanup:
    if(pDisp) pDisp->Release();
    if(pACL) pACL->Release();
    if(pACE) pACE->Release();
    if(pEnum) pEnum->Release();
    if(pUnk) pUnk->Release();
    if(szValue) SysFreeString(szValue);
    return hr;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Zielplattform Windows
Kopfzeile iads.h

Weitere Informationen

IADsAccessControlEntry

IADsSecurityDescriptor

IDispatch

Null-DACLs und leere DACLs