перечисление 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 |