ADS_SECURITY_INFO_ENUM 열거형(iads.h)
ADS_SECURITY_INFO_ENUM 열거형은 개체의 보안 데이터를 검사하는 데 사용할 수 있는 옵션을 지정합니다.
Syntax
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 인터페이스를 사용하여 이 열거형에 나열된 보안 데이터 옵션을 제공합니다.
다음 목록에는 일반적인 플래그 조합 및 해당 사용이 나열되어 있습니다.
플래그 조합 | Description |
---|---|
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에만 사용할 수 있습니다.
VBScript(Visual Basic Scripting Edition)는 형식 라이브러리에서 데이터를 읽을 수 없으므로 애플리케이션은 기호화된 상수 대신 적절한 숫자 상수를 사용하여 적절한 플래그를 설정해야 합니다. 심볼 상수를 좋은 프로그래밍 사례로 사용하려면 여기에서와 같이 이러한 상수에 대한 명시적 선언을 작성합니다.
예제
다음 코드 예제에서는 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 |