다음을 통해 공유


IADsAccessControlEntry 속성 메서드

IADsAccessControlEntry 인터페이스의 속성 메서드는 다음 표에 설명된 속성을 얻거나 설정합니다. 자세한 내용은 Interface 속성 메서드를 참조하세요.

속성

AccessMask

개체에 대한 액세스 권한을 지정하는 플래그 집합을 포함합니다. Active Directory 개체에 대한 유효한 값은 ADS_RIGHTS_ENUM 열거형에 정의됩니다.

파일 또는 파일 공유 개체에 대한 자세한 내용과 가능한 값 목록은 파일 보안 및 액세스 권한을 참조하세요.

레지스트리 개체에 대한 자세한 내용과 가능한 값 목록은 레지스트리 키 보안 및 액세스 권한을 참조하세요.

액세스 형식: 읽기/쓰기

스크립팅 데이터 형식: LONG

// C++ method syntax
HRESULT get_AccessMask(
  [out] LONG* plnAccessMask
);
HRESULT put_AccessMask(
  [in] LONG lnAccessMask
);

AceFlags

다른 컨테이너 또는 개체가 ACE를 상속할 수 있는지 여부를 지정하는 플래그 집합을 포함합니다. Active Directory 개체에 대한 유효한 값은 ADS_ACEFLAG_ENUM 열거형에 정의됩니다.

파일, 파일 공유 및 레지스트리 개체에 대한 자세한 내용과 가능한 값은 ACE_HEADER 구조체의 AceFlags 멤버를 참조하세요.

액세스 형식: 읽기/쓰기

스크립팅 데이터 형식: LONG

// C++ method syntax
HRESULT get_AceFlags(
  [out] LONG* plnAceFlags
);
HRESULT put_AceFlags(
  [in] LONG lnAceFlags
);

AceType

ACE의 형식을 나타내는 값을 포함합니다. Active Directory 개체에 대한 유효한 값은 ADS_ACETYPE_ENUM 열거형에 정의됩니다.

파일, 파일 공유 및 레지스트리 개체에 대한 자세한 내용과 가능한 값은 ACE_HEADER 구조체의 AceType 멤버를 참조하세요.

액세스 형식: 읽기/쓰기

스크립팅 데이터 형식: LONG

// C++ method syntax
HRESULT get_AceType(
  [out] LONG* plAceType
);
HRESULT put_AceType(
  [in] LONG lnAceType
);

플래그

ACE에 개체 형식 또는 상속된 개체 형식이 있는지 여부를 나타내는 플래그입니다. 유효한 플래그는 ADS_FLAGTYPE_ENUM 열거형에 정의됩니다.

액세스 형식: 읽기/쓰기

스크립팅 데이터 형식: LONG

// C++ method syntax
HRESULT get_Flags(
  [out] LONG* lnflags
);
HRESULT put_Flags(
  [in] LONG lnflags
);

InheritedObjectType

ADSI 개체의 자식 개체 형식을 나타내는 플래그입니다. 해당 값은 문자열 형식의 개체에 대한 GUID 입니다. 이러한 GUID 가 설정되면 ACE는 GUID에서 참조하는 개체에만 적용됩니다.

액세스 형식: 읽기/쓰기

스크립팅 데이터 형식: BSTR

// C++ method syntax
HRESULT get_InheritedObjectType(
  [out] BSTR* bstrInheritedObjectType
);
HRESULT put_InheritedObjectType(
  [in] BSTR bstrInheritedObjectType
);

ObjectType

ADSI 개체 형식을 나타내는 플래그입니다. 해당 값은 속성에 대한 GUID 이거나 문자열 형식의 개체입니다. GUIDADS_RIGHT_DS_READ_PROP 및 ADS_RIGHT_DS_WRITE_PROP 액세스 마스크를 사용할 때 속성을 참조 합니다. GUIDADS_RIGHT_DS_CREATE_CHILDADS_RIGHT_DS_DELETE_CHILD 액세스 마스크를 사용할 때 개체를 지정합니다.

액세스 형식: 읽기/쓰기

스크립팅 데이터 형식: BSTR

// C++ method syntax
HRESULT get_ObjectType(
  [out] BSTR* bstrObjectType
);
HRESULT put_ObjectType(
  [in] BSTR bstrObjectType
);

Trustee

ACE가 적용되는 계정의 이름을 포함합니다.

액세스 형식: 읽기/쓰기

스크립팅 데이터 형식: BSTR

// C++ method syntax
HRESULT get_Trustee(
  [out] BSTR* pbstrSecurityId
);
HRESULT put_Trustee(
  [in] BSTR bstrSecurityId
);

예제

다음 코드 예제에서는 IADsAccessControlEntry 속성 메서드를 사용하여 임의 ACL에 항목을 추가하는 방법을 보여 줍니다.

Dim x As IADs
Dim sd As IADsSecurityDescriptor
Dim ace As IADsAccessControlEntry
Dim Dacl As IADsAccessControlList
Dim Ace1 As New AccessControlEntry
Dim Ace2 As New AccessControlEntry

On Error GoTo Cleanup
 
Set x = GetObject("LDAP://OU=Sales, DC=Fabrikam,DC=com")
Set sd = x.Get("ntSecurityDescriptor")
Set Dacl = sd.DiscretionaryAcl
 
' Show the existing ACEs.
For Each ace In Dacl
  Debug.Print ace.Trustee
Next
 
 
' Setup the first ACE.
Ace1.AccessMask = -1 'Full Permission (Allowed)
Ace1.AceType = ADS_ACETYPE_ACCESS_ALLOWED
Ace1.AceFlags = ADS_ACEFLAG_INHERIT_ACE
Ace1.Trustee = "ACTIVED\Administrator"
 
' Setup the 2nd ACE.
Ace2.AccessMask = -1 'Full Permission (Denied)
Ace2.AceType = ADS_ACETYPE_ACCESS_DENIED
Ace2.AceFlags = ADS_ACEFLAG_INHERIT_ACE
Ace2.Trustee = "ACTIVED\Andyhar"
 
' Add the ACEs to the Discretionary ACL.
Dacl.AddAce Ace1
Dacl.AddAce Ace2
 
sd.DiscretionaryAcl = Dacl
x.Put "ntSecurityDescriptor", Array(sd)
x.SetInfo

Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If

    Set x = Nothing
    Set sd = Nothing
    Set ace = Nothing
    Set Dacl = Nothing
    Set Ace1 = Nothing
    Set Ace2 = Nothing
    Set obj = Nothing
    Set cls = Nothing

다음 코드 예제에서는 액세스 제어 항목을 표시합니다.

IADs *pADs = NULL;
IDispatch *pDisp = NULL;
IADsSecurityDescriptor *pSD = NULL;
VARIANT var;
HRESULT hr = S_OK;
 
VariantInit(&var);

hr = ADsOpenObject(L"LDAP://OU=Sales, DC=Fabrikam,DC=com",NULL,NULL,
                   ADS_SECURE_AUTHENTICATION, IID_IADs,(void**)&pADs);
if(FAILED(hr)) {goto Cleanup;}

hr = pADs->Get(CComBSTR("ntSecurityDescriptor"),&var);
if(FAILED(hr)) {goto Cleanup;}

pDisp = V_DISPATCH(&var);

hr = pDisp->QueryInterface(IID_IADsSecurityDescriptor,(void**)&pSD);
if(FAILED(hr)) {goto Cleanup;}
pDisp->Release();


pSD->get_DiscretionaryAcl(&pDisp);

hr = pDisp->QueryInterface(IID_IADsAccessControlList,(void**)&pACL);
if(FAILED(hr)) {goto Cleanup;}

hr = DisplayAccessInfo(pSD);
if(FAILED(hr)) {goto Cleanup;}
VariantClear(&var);

Cleanup:
    if(pADs) pADs->Release();
    if(pDisp) pDisp->Release();
    if(pSD) pSD->Release();
    return hr;



HRESULT DisplayAccessInfo(IADsSecurityDescriptor *pSD)
{
    LPWSTR lpszFunction = L"DisplayAccessInfo";
    IDispatch *pDisp = NULL;
    IADsAccessControlList *pACL = NULL;
    IADsAccessControlEntry *pACE = NULL;
    IEnumVARIANT *pEnum = NULL;
    IUnknown *pUnk = NULL;
    HRESULT hr = S_OK;
    ULONG nFetch = 0;
    BSTR bstrValue = NULL;
    VARIANT var;
    LPWSTR lpszOutput = NULL;
    LPWSTR lpszMask = NULL;
    size_t nLength = 0;
    
    VariantInit(&var);
    
    hr = pSD->get_DiscretionaryAcl(&pDisp);
    if(FAILED(hr)){goto Cleanup;}
    hr = pDisp->QueryInterface(IID_IADsAccessControlList,(void**)&pACL);
    if(FAILED(hr)){goto Cleanup;}
    
    hr = pACL->get__NewEnum(&pUnk);
    if(FAILED(hr)){goto Cleanup;}
    
    hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);
    
    if(FAILED(hr)){goto Cleanup;}
    hr = pEnum->Next(1,&var,&nFetch);
    
    while(hr == S_OK)
    {
        if(nFetch==1)
        {
            if(VT_DISPATCH != V_VT(&var))
            {
                goto Cleanup;
            }
            
            pDisp = V_DISPATCH(&var);
            hr = pDisp->QueryInterface(IID_IADsAccessControlEntry,(void**)&pACE);
            
            if(SUCCEEDED(hr))
            {
                lpszMask = L"Trustee: %s";
                hr = pACE->get_Trustee(&bstrValue);
                nLength = wcslen(lpszMask) + wcslen(bstrValue) + 1;
                lpszOutput = new WCHAR[nLength];
                swprintf_s(lpszOutput,lpszMask,bstrValue);
                printf(lpszOutput);
                delete [] lpszOutput;
                SysFreeString(bstrValue);
                
                pACE->Release();
                pACE = NULL;
                pDisp->Release();
                pDisp = NULL;
            }       
            
            VariantClear(&var);
        }       
        hr = pEnum->Next(1,&var,&nFetch);
    }
    
Cleanup:
    if(pDisp) pDisp->Release();
    if(pACL) pACL->Release();
    if(pACE) pACE->Release();
    if(pEnum) pEnum->Release();
    if(pUnk) pUnk->Release();
    if(szValue) SysFreeString(szValue);
    return hr;
}

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows Vista
지원되는 최소 서버
Windows Server 2008
헤더
Iads.h
DLL
Activeds.dll
IID
IID_IADsAccessControlEntry B4F3A14C-9BDD-11D0-852C-00C04FD8D503으로 정의됩니다.

추가 정보

IADsAccessControlEntry

IADsAccessControlList

IADsSecurityDescriptor