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


перечисление ADS_SECURITY_INFO_ENUM (iads.h)

Перечисление ADS_SECURITY_INFO_ENUM указывает доступные параметры для проверки данных безопасности объекта.

Синтаксис

typedef enum __MIDL___MIDL_itf_ads_0001_0077_0002 {
  ADS_SECURITY_INFO_OWNER = 0x1,
  ADS_SECURITY_INFO_GROUP = 0x2,
  ADS_SECURITY_INFO_DACL = 0x4,
  ADS_SECURITY_INFO_SACL = 0x8
} ADS_SECURITY_INFO_ENUM;

Константы

 
ADS_SECURITY_INFO_OWNER
Значение: 0x1
Считывает или задает данные владельца.
ADS_SECURITY_INFO_GROUP
Значение: 0x2
Считывает или задает данные группы.
ADS_SECURITY_INFO_DACL
Значение: 0x4
Считывает или задает данные списка управления доступом на уровне пользователей.
ADS_SECURITY_INFO_SACL
Значение: 0x8
Считывает или задает данные системного списка управления доступом.

Комментарии

Параметры, определенные в этом перечислении, являются бит-масками. С помощью соответствующих побитовых операций можно задать несколько параметров.

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

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

Сочетание флагов Описание
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP и ADS_SECURITY_INFO_DACL Разрешить пользователям считывать данные безопасности владельца, группы или DACL объекта. Это значение по умолчанию при создании объекта.
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP, ADS_SECURITY_INFO_DACL и ADS_SECURITY_INFO_SACL Разрешить пользователям считывать saCL. Флаг ADS_SECURITY_INFO_SACL нельзя использовать сам по себе.
 

В настоящее время такие параметры доступны только для Active Directory.

Так как Visual Basic Scripting Edition (VBScript) не может считывать данные из библиотеки типов, приложение должно использовать соответствующие числовые константы вместо символьных констант, чтобы задать соответствующие флаги. Чтобы использовать символические константы в качестве хорошей практики программирования, напишите явные объявления таких констант, как показано здесь.

Примеры

В следующем примере кода отображается количество записей управления доступом в saCL.

Const ADS_SECURITY_INFO_OWNER = &H1
Const ADS_SECURITY_INFO_GROUP = &H2
Const ADS_SECURITY_INFO_DACL = &H4
Const ADS_SECURITY_INFO_SACL = &H8

Const ADS_OPTION_SECURITY_MASK = 3

Dim x As IADs
Dim dso As IADsOpenDSObject
Dim adsPath As String
Dim sd As IADsSecurityDescriptor
Dim sacl As IADsAccessControlList
Dim objOps As IADsObjectOptions
Dim opt As Variant
Dim canReadSacl As Variant
 
Set dso = GetObject("LDAP:")
adsPath = "LDAP://ArcSrv1/dc=Sales,dc=Fabrikam,dc=com"
Set x = dso.OpenDSObject(adsPath, vbNullString, vbNullString, 1)
Set objOps = x
 
canReadSacl = ADS_SECURITY_INFO_OWNER _
                Or ADS_SECURITY_INFO_GROUP _
                Or ADS_SECURITY_INFO_DACL _
                Or ADS_SECURITY_INFO_SACL
 
opt = objOps.GetOption(ADS_OPTION_SECURITY_MASK)
If opt <> canReadSacl Then
    objOps.SetOption ADS_OPTION_SECURITY_MASK, canReadSacl
End If
Set sd = x.Get("ntSecurityDescriptor")
Set sacl = sd.SystemAcl
Debug.Print "sacl(aceCount)= " & sacl.AceCount

В следующем примере кода отображается количество записей управления доступом в системном ACL. Для краткости проверка ошибок опущена.

void TestObjectOptions()
{
    long lCanReadSACL = ADS_SECURITY_INFO_OWNER | 
        ADS_SECURITY_INFO_GROUP | 
        ADS_SECURITY_INFO_DACL | 
        ADS_SECURITY_INFO_SACL;

    HRESULT hr = S_OK;
    CComPtr<IADs> spObj;
    hr = ADsOpenObject(L"LDAP://arcSrv1/dc=Sales,dc=Fabrikam,dc=com", 
        NULL, 
        NULL,
        ADS_SECURE_AUTHENTICATION,
        IID_IADs,
        (void**)&spObj);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IADsObjectOptions> spObjOps;
    hr = spObj->QueryInterface(IID_IADsObjectOptions, (void**)&spObjOps);
    if(S_OK != hr)
    {
        return;
    }

    CComVariant svar;
    hr = spObjOps->GetOption(ADS_OPTION_SECURITY_MASK, &svar);
    if(S_OK != hr)
    {
        return;
    }

    if(V_I4(&svar) != lCanReadSACL)
    {
        svar = lCanReadSACL;
        hr = spObjOps->SetOption(ADS_OPTION_SECURITY_MASK, svar);
    }

    hr = spObj->Get(CComBSTR("ntSecurityDescriptor"), &svar);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IADsSecurityDescriptor> spSd;
    hr = V_DISPATCH(&svar)->QueryInterface(IID_IADsSecurityDescriptor, 
                                            (void**)&spSd);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IDispatch> spDisp;
    hr = spSd->get_SystemAcl(&spDisp);
    if(S_OK != hr)
    {
        return;
    }

    CComPtr<IADsAccessControlList> spSacl;
    hr = spDisp->QueryInterface(IID_IADsAccessControlList, 
                                (void**)&spSacl);
    if(S_OK != hr)
    {
        return;
    }

    LONG lOptions;
    hr = spSacl->get_AceCount(&lOptions);
    if(S_OK != hr)
    {
        return;
    }

    _tprintf(TEXT("Number of ACE's in the SACL is %d\n"), lOptions);
}

Требования

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

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

Перечисления ADSI

IADsObjectOptions

IADsObjectOptions::GetOption

IADsObjectOptions::SetOption