Интерфейс 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 |