Interface IADsSecurityDescriptor (iads.h)

L’interface IADsSecurityDescriptor permet d’accéder aux propriétés d’un objet descripteur de sécurité ADSI.

Héritage

L’interface IADsSecurityDescriptor hérite de l’interface IDispatch. IADsSecurityDescriptor a également les types de membres suivants :

Méthodes

L’interface IADsSecurityDescriptor possède ces méthodes.

 
IADsSecurityDescriptor ::CopySecurityDescriptor

La méthode IADsSecurityDescriptor ::CopySecurityDescriptor copie un objet descripteur de sécurité ADSI qui contient des données de sécurité sur un objet.

Remarques

Utilisez cette interface pour examiner et modifier les contrôles d’accès en un objet de service d’annuaire Active Directory. Vous pouvez également l’utiliser pour créer des copies d’un descripteur de sécurité. Pour obtenir cette interface, utilisez la méthode IADs.Get pour obtenir l’attribut ntSecurityDescriptor de l’objet. Pour plus d’informations sur la création d’un descripteur de sécurité et sa définition sur un objet, consultez Création d’un descripteur de sécurité pour un nouvel objet d’annuaire et DACL Null et DACL vides.

Souvent, il n’est pas possible de modifier toutes les parties du descripteur de sécurité. Par exemple, si l’utilisateur actuel a le contrôle total d’un objet, mais qu’il n’est pas administrateur et qu’il n’est pas propriétaire de l’objet, l’utilisateur peut modifier la liste dacl, mais ne peut pas modifier le propriétaire. Cela génère une erreur lorsque le ntSecurityDescriptor est mis à jour. Pour éviter ce problème, l’interface IADsObjectOptions peut être utilisée pour spécifier les parties spécifiques du descripteur de sécurité à modifier.

Exemples

L’exemple de code suivant montre comment utiliser l’interface IADsObjectOptions pour modifier uniquement des parties spécifiques du descripteur de sécurité.

Const ADS_OPTION_SECURITY_MASK = 3
Const ADS_SECURITY_INFO_OWNER = 1
Const ADS_SECURITY_INFO_GROUP = 2
Const ADS_SECURITY_INFO_DACL = 4

Dim obj as IADs
Dim sd as IADsSecurityDescriptor
Dim oOptions as IADsObjectOptions

' Bind to the object.
Set obj = GetObject("LDAP://.....")

' Get the IADsSecurityDescriptor.
Set sd = obj.Get("ntSecurityDescriptor")

' Modify the DACL as required.

' Get the IADsObjectOptions for the object - not the IADsSecurityDescriptor.
Set oOptions = obj

' Set options so that only the DACL will be updated.
oOptions.SetOption ADS_OPTION_SECURITY_MASK, ADS_INFO_DACL

' Update the security descriptor.
obj.Put "ntSecurityDescriptor", sd
obj.SetInfo

L’exemple de code suivant montre comment afficher les données d’un descripteur de sécurité.

' Get the security descriptor.
Dim x As IADs
Dim sd As IADsSecurityDescriptor

On Error GoTo Cleanup
 
Set x = GetObject("LDAP://DC=Fabrikam,DC=com")
Set sd = x.Get("ntSecurityDescriptor")
Debug.Print sd.Control
Debug.Print sd.Group
Debug.Print sd.Owner
Debug.Print sd.Revision
 
Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set x = Nothing
    Set sd = Nothing

L’exemple de code suivant montre comment afficher des données à partir d’un descripteur de sécurité d’un objet d’annuaire.

HRESULT DisplaySD(IADs *pObj)
{
    IADsSecurityDescriptor *pSD = NULL;
    BSTR bstr = NULL;
    long lVal = 0;    
    HRESULT hr = S_OK;
    VARIANT var;
    
    VariantInit(&var);

    if(pObj==NULL)
    {
        return E_FAIL;
    }
    
    hr = pObj->Get(CComBSTR("ntSecurityDescriptor"), &var);
    if(FAILED(hr)){goto Cleanup;}
    
    
    hr = V_DISPATCH(&var)->QueryInterface(IID_IADsSecurityDescriptor,(void**)&pSD);
    if(FAILED(hr)){goto Cleanup;}
    
   hr = pSD->get_Control(&lVal);
   printf("SD Control = %d\n",lVal);

   hr = pSD->get_Owner(&bstr);
   printf("SD Owner   = %S\n",bstr);
   SysFreeString(bstr);

   hr = pSD->get_Group(&bstr);
   printf("SD Group   = %S\n",bstr);
   SysFreeString(bstr);

   hr = pSD->get_Revision(&lVal);
   printf("SD Revision= %d\n",lVal);
        
Cleanup:
    VariantClear(&var);
    if(pSD) pSD->Release();
    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

Voir aussi

Création d’un descripteur de sécurité pour un objet New Directory

IADsAccessControlEntry

IADsAccessControlList

IDispatch

DLL Null et DACL vides