Поделиться через


Интерфейс IADsSecurityDescriptor (iads.h)

Интерфейс IADsSecurityDescriptor предоставляет доступ к свойствам объекта дескриптора безопасности ADSI.

Наследование

Интерфейс IADsSecurityDescriptor наследуется от интерфейса IDispatch . IADsSecurityDescriptor также имеет следующие типы элементов:

Методы

Интерфейс IADsSecurityDescriptor содержит эти методы.

 
IADsSecurityDescriptor::CopySecurityDescriptor

Метод IADsSecurityDescriptor::CopySecurityDescriptor копирует объект дескриптора безопасности ADSI, который содержит данные безопасности об объекте.

Комментарии

Используйте этот интерфейс для проверки и изменения элементов управления доступом к объекту службы каталогов Active Directory. Его также можно использовать для создания копий дескриптора безопасности. Чтобы получить этот интерфейс, используйте метод IADs.Get для получения атрибута ntSecurityDescriptor объекта . Дополнительные сведения о том, как создать дескриптор безопасности и задать его для объекта, см. в разделах Создание дескриптора безопасности для нового объекта каталога и списков DACCL null и пустых списков DACCL.

Часто невозможно изменить все части дескриптора безопасности. Например, если текущий пользователь имеет полный контроль над объектом, но не является администратором и не владеет объектом, пользователь может изменить daCL, но не может изменить владельца. Это приведет к ошибке при обновлении ntSecurityDescriptor . Чтобы избежать этой проблемы, можно использовать интерфейс IADsObjectOptions для указания конкретных частей дескриптора безопасности, которые необходимо изменить.

Примеры

В следующем примере кода показано, как использовать интерфейс IADsObjectOptions для изменения только определенных частей дескриптора безопасности.

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

В следующем примере кода показано, как отобразить данные из дескриптора безопасности.

' 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

В следующем примере кода показано, как отобразить данные из дескриптора безопасности объекта каталога.

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;
}

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header iads.h

См. также раздел

Создание дескриптора безопасности для объекта New Directory

IADsAccessControlEntry

IADsAccessControlList

IDispatch

Списки DACCL null и пустые списки DACCL