다음을 통해 공유


InitializeAcl 함수(securitybaseapi.h)

InitializeAcl 함수는 새 ACL 구조를 초기화합니다.

구문

BOOL InitializeAcl(
  [out] PACL  pAcl,
  [in]  DWORD nAclLength,
  [in]  DWORD dwAclRevision
);

매개 변수

[out] pAcl

이 함수에서 초기화할 ACL 구조체에 대한 포인터입니다. 이 함수를 호출하기 전에 pAcl 에 대한 메모리를 할당합니다.

[in] nAclLength

pAcl 매개 변수가 가리키는 버퍼의 길이(바이트)입니다. 이 값은 ACL 헤더와 ACL에 저장할 모든 ACL(액세스 제어 항목)을 포함할 수 있을 만큼 커야 합니다. 또한 이 값은 DWORD 정렬이어야 합니다. ACL의 크기를 계산하는 방법에 대한 자세한 내용은 비고를 참조하세요.

[in] dwAclRevision

생성되는 ACL 구조체의 수정 수준입니다.

이 값은 ACL_REVISION 또는 ACL_REVISION_DS 수 있습니다. ACL( 액세스 제어 목록 )이 개체별 AES를 지원하는 경우 ACL_REVISION_DS 사용합니다.

반환 값

함수가 성공하면 함수는 0이 아닌 값을 반환합니다.

함수가 실패하면 0을 반환합니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

InitializeAcl 함수는 빈 ACL 구조를 만듭니다. ACL에는 ACL이 없습니다. 개체에 빈 ACL 을 적용하면 해당 개체에 대한 모든 액세스가 거부됩니다.

ACL의 초기 크기는 ACL을 사용하기 전에 ACL에 추가하려는 AE수에 따라 달라집니다. 예를 들어 ACL 이 사용자 및 그룹에 대한 ACE를 포함하는 경우 두 개의 API를 기반으로 ACL 을 초기화합니다. 기존 ACL 수정에 대한 자세한 내용은 개체의 ACL 수정을 참조하세요.

ACL의 초기 크기를 계산하려면 다음을 함께 추가한 다음 결과를 가장 가까운 DWORD에 맞춥니다.

  • ACL 구조체의 크기입니다.
  • ACL이 포함할 각 ACE 구조체의 크기에서 ACE의 SidStart 멤버(DWORD)를 뺀 값입니다.
  • ACE 가 포함할 SID의 길이입니다.

예제

다음 예제에서는 InitializeAcl 함수를 호출합니다. ACL의 크기는 세 가지 허용 액세스 AES를 기반으로 합니다. 옵션으로 SDDL( 보안 설명자 정의 언어 )을 사용하여 ACL을 만들 수 있습니다. 자세한 내용은 DACL 만들기를 참조하세요.

이 예제에서는 단순화를 위한 단계도 생략합니다. 자세한 내용은 개체 소유권 가져오기 예제를 참조하세요. AllocateAndInitializeSid 함수를 호출하기 때문에 예제 코드의 끝에서 FreeSid 함수를 호출해야 합니다.

#include <windows.h>
#include <Winbase.h>
#pragma comment(lib, "duser.lib")

#define NUM_OF_ACES 3

void main()
{
    PACL pAcl = NULL;
    DWORD cbAcl = 0;
    PSID psids[NUM_OF_ACES];

    // Allocate and initialize SIDs.
    // Step omitted - See Taking Object Ownership example.

    // Add the SID for each ACE to psids. 
    cbAcl = sizeof(ACL) + 
        ((sizeof(ACCESS_ALLOWED_ACE)) * NUM_OF_ACES);
    for (int i = 0; i < NUM_OF_ACES; i++)
    {
        cbAcl += GetLengthSid(psids[i]) - sizeof(DWORD);
    }

    // Align cbAcl to a DWORD.
    cbAcl = (cbAcl + (sizeof(DWORD) - 1)) & 0xfffffffc;

    pAcl = (ACL*)LocalAlloc(LPTR, cbAcl);
    if (pAcl)
    {
        if (InitializeAcl(pAcl, cbAcl, ACL_REVISION))
        {

            // Add the ACEs to the ACL.
            // Add the ACL to the object's security descriptor.
        }
        else
        {

            // Handle error.
        }
    }
    {

        // Handle error.
    }

    // Free pAcl when finished.
    // Call FreeSid when finished.
}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 securitybaseapi.h(Windows.h 포함)
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

ACCESS_ALLOWED_ACE

ACCESS_DENIED_ACE

ACL

AddAccessAllowedAce

AddAccessDeniedAce

AddAce

AddAuditAccessAce

DeleteAce

GetAce

GetAclInformation

IsValidAcl

하위 수준 Access Control

하위 수준 Access Control 함수

SID

SetAclInformation