IADsAccessControlList::AddAce 메서드(iads.h)

IADsAccessControlList::AddAce 메서드는 IADsAccessControlEntry 개체를 IADsAccessControlList 개체에 추가합니다.

구문

HRESULT AddAce(
  [in] IDispatch *pAccessControlEntry
);

매개 변수

[in] pAccessControlEntry

추가할 IADsAccessControlEntry 개체의 IDispatch 인터페이스에 대한 포인터입니다. 이 매개 변수는 NULL일 수 없습니다.

반환 값

다음을 포함하여 표준 HRESULT 값을 반환합니다.

설명

액세스 제어 항목은 보안 설명자의 액세스 제어 목록에 다음 순서로 표시되어야 합니다.

  • 개체 자체에 적용되는 액세스 거부 AES
  • 속성 집합 또는 속성과 같은 개체의 자식에 적용되는 액세스 거부 AES
  • 개체 자체에 적용되는 액세스 허용 ACE
  • 속성 집합 또는 속성과 같은 개체의 자식에 적용되는 액세스 허용 ACE
  • 상속된 모든 AES
이 메서드는 ACE를 ACL의 전면에 추가하므로 반드시 올바른 순서가 발생하는 것은 아닙니다.

예제

다음 Visual Basic 코드 예제에서는 IADsAccessControlList::AddAce 메서드를 사용하여 ACL에 두 개의 ACE를 추가하는 방법을 보여 줍니다.

Const ACL_REVISION_DS = &H4

Dim x as IADs
Dim sd as IADsSecurityDescriptor
Dim Ace1 As new IADsAccessControlEntry
Dim Ace2 As new IADsAccessControlEntry
Dim Dacl As new IADsAccessControlList
On Error GoTo Cleanup

Set x = GetObject("LDAP://OU=Sales,DC=Fabrikam,DC=com")
Set sd = x.Get("ntSecurityDescriptor")

' Add the ACEs to the Discretionary ACL.
 
Dacl.AclRevision = ACL_REVISION_DS 'DS ACL Revision
' Set up the first ACE.
Ace1.AccessMask = -1 'Full Permission (Allowed)
Ace1.AceType = ADS_ACETYPE_ACCESS_ALLOWED
Ace1.AceFlags = ADS_ACEFLAG_INHERIT_ACE
Ace1.Trustee = "myMachine\Administrator"
 
' Set up the 2nd ACE.
Ace2.AccessMask = -1 'Full Permission (Denied)
Ace2.AceType = ADS_ACETYPE_ACCESS_DENIED
Ace2.AceFlags = ADS_ACEFLAG_INHERIT_ACE
Ace2.Trustee = "aDomain\aUser"
 
' Add the ACEs to the Discretionary ACL.
Dacl.AddAce Ace1
Dacl.AddAce Ace2

'Commit the changes. 
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 Ace1 = Nothing
    Set Ace2 = Nothing
    Set Dacl = Nothing
    Set x = Nothing
    Set sd = Nothing

다음 C++ 코드 예제에서는 IADsAccessControlList::AddAce 메서드를 사용하여 ACL에 ACE를 추가합니다. 추가된 ACE는 전체 권한으로 액세스 권한을 허용했습니다.

HRESULT addAceTo(IADsAccessControlList *pAcl)
{
    if(!pAcl) 
    {
        return E_FAIL;
    }

    HRESULT hr = pAcl->put_AclRevision(ACL_REVISION_DS);
    if(FAILED(hr)) 
    {
        return hr;
    }

    IADsAccessControlEntry *pAce = NULL; 
    pAce = createAce(-1,                    // Full permissions.
                     ADS_ACETYPE_ACCESS_ALLOWED,
                     ADS_ACEFLAG_INHERIT_ACE,
                     CComBSTR("aDomain\\aUser"));

    if(!pAce)
    {
        return E_FAIL;
    }

    IDispatch *pDisp;
    hr = pAce->QueryInterface(IID_IDispatch,(void**)&pDisp);
    if(FAILED(hr)) 
    {
        pAce->Release();
        return hr;
    }

    hr = pAcl->AddAce(pDisp);
    pDisp->Release();
    if(pAce) pAce->Release();
    if(FAILED(hr)) 
    {
        return hr;
    }

    printf("Ace has been added to ACL.\n");

    return hr;
}

////////////////////////////////////
// function to create an allowed ACE
////////////////////////////////////
IADsAccessControlEntry *createAce(
                   long mask,
                   long type, 
                   long flag,
                   BSTR trustee)
{
    HRESULT hr;
    IADsAccessControlEntry *pAce;
    hr = CoCreateInstance(CLSID_AccessControlEntry,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_IADsAccessControlEntry,
                          (void**)&pAce);
    if(FAILED(hr)) 
    {
        if(pAce) 
        {
            pAce->Release();
        }

        return NULL;
    }

    hr = pAce->put_AccessMask(mask); 
    hr = pAce->put_AceType(type);
    hr = pAce->put_AceFlags(flag);
    hr = pAce->put_Trustee(trustee); 

    return pAce;
}

요구 사항

   
지원되는 최소 클라이언트 Windows Vista
지원되는 최소 서버 Windows Server 2008
대상 플랫폼 Windows
헤더 iads.h
DLL Activeds.dll

참고 항목

IADsAccessControlEntry

IADsAccessControlList