Interface IADsAccessControlList (iads.h)
L’interface IADsAccessControlList est une interface double qui gère les entrées de contrôle d’accès (ACÉ) individuelles.
Héritage
L’interface IADsAccessControlList hérite de l’interface IDispatch. IADsAccessControlList a également les types de membres suivants :
Méthodes
L’interface IADsAccessControlList utilise ces méthodes.
IADsAccessControlList ::AddAce La méthode IADsAccessControlList ::AddAce ajoute un objet IADsAccessControlEntry à l’objet IADsAccessControlList. |
IADsAccessControlList ::CopyAccessList La méthode IADsAccessControlList ::CopyAccessList copie chaque entrée de contrôle d’accès (ACE) de la liste de contrôle d’accès (ACL) dans l’espace de processus de l’appelant. |
IADsAccessControlList ::get__NewEnum La méthode IADsAccessControlList ::get__NewEnum est utilisée pour obtenir un objet énumérateur pour la liste de contrôle d’accès afin d’énumérer les AES. |
IADsAccessControlList ::RemoveAce Supprime une entrée de contrôle d’accès (ACE) de la liste de contrôle d’accès (ACL). |
Remarques
Une liste de contrôle d’accès (ACL) est une collection d’ACL qui peut fournir un contrôle d’accès plus spécifique au même objet ADSI pour différents clients. En général, différents fournisseurs implémentent des contrôles d’accès différents et, par conséquent, le comportement de l’objet est spécifique au fournisseur. Pour plus d’informations, consultez la documentation du fournisseur. Pour plus d’informations sur les fournisseurs Microsoft, consultez Fournisseurs de système ADSI. Actuellement, seul le fournisseur LDAP prend en charge les contrôles d’accès.
Avant de pouvoir travailler avec un ACE d’objet, commencez par obtenir la liste de contrôle d’accès à laquelle ils appartiennent. Les listes de contrôle d’accès sont gérées par des descripteurs de sécurité et peuvent être de liste de contrôle d’accès discrétionnaire et de liste de contrôle d’accès système. Pour plus d’informations, consultez IADsSecurityDescriptor.
À l’aide des propriétés et des méthodes de l’interface IADsAccessControlList , vous pouvez récupérer et énumérer des acees, ajouter de nouvelles entrées à la liste ou supprimer des entrées existantes.
Pour gérer les contrôles d’accès sur un ADSI
- Tout d’abord, récupérez le descripteur de sécurité de l’objet qui implémente l’interface IADsSecurityDescriptor .
- Ensuite, récupérez la liste de contrôle d’accès à partir du descripteur de sécurité.
- Troisièmement, utilisez l’ACE, ou ACÉ, de l’objet dans la liste de contrôle d’accès.
Pour rendre les ACE nouveaux ou modifiés persistants
- Tout d’abord, ajoutez l’ACE à la liste de contrôle d’accès.
- Ensuite, affectez la liste de contrôle d’accès au descripteur de sécurité.
- Troisièmement, validez le descripteur de sécurité dans le magasin d’annuaires.
Exemples
L’exemple de code suivant montre comment utiliser les entrées de contrôle d’accès d’une liste de contrôle d’accès discrétionnaire.
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
L’exemple de code suivant énumère les ACL à partir d’une liste DACL.
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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista |
Serveur minimal pris en charge | Windows Server 2008 |
Plateforme cible | Windows |
En-tête | iads.h |