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
- Rufen Sie zunächst den Sicherheitsdeskriptor des Objekts ab, das die IADsSecurityDescriptor-Schnittstelle implementiert.
- Rufen Sie anschließend die ACL aus dem Sicherheitsdeskriptor ab.
- 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
- Fügen Sie zunächst der ACL den ACE hinzu.
- Weisen Sie anschließend die ACL dem Sicherheitsdeskriptor zu.
- Drittens: Committen Sie den Sicherheitsdeskriptor in den Verzeichnisspeicher.
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 |