RtlCreateAcl 함수(ntifs.h)

RtlCreateAcl 루틴은 ACL(액세스 제어 목록)을 만들고 초기화합니다.

구문

NTSYSAPI NTSTATUS RtlCreateAcl(
  [out] PACL  Acl,
  [in]  ULONG AclLength,
        ULONG AclRevision
);

매개 변수

[out] Acl

초기화된 ACL 구조를 수신하기 위해 호출자가 할당한 버퍼에 대한 포인터입니다. 이 버퍼는 적어도 sizeof(ACL)여야 합니다.

[in] AclLength

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

AclRevision

추가할 ACE의 ACL 수정 버전 수준입니다. Windows 버전 요구 사항은 다음과 같습니다.

의미
ACL_REVISION

모든 Windows 버전에서 유효한 수정 버전 수준입니다.

ACL_REVISION_DS
참고Acl의 ACL에 개체별 ACE가 포함된 경우 AceRevision은 ACL_REVISION_DS 합니다.
 

 

반환 값

RtlCreateAcl은 다음 상태 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_SUCCESS
ACL이 성공적으로 만들어지고 초기화되었습니다.
STATUS_BUFFER_TOO_SMALL
새 ACL이 Acl의 버퍼에 맞지 않습니다. 더 큰 ACL 버퍼가 필요합니다.
STATUS_INVALID_PARAMETER
지정된 수정 버전이 현재 버전이 아니거나 AclLength 값이 너무 큽니다.

설명

RtlCreateAcl로 초기화된 ACL에는 ACE(액세스 제어 항목)가 없습니다. 이 ACL은 존재하지 않는 ACL이 아니라 비어 있습니다. 빈 ACL이 개체에 적용되는 경우 ACL은 해당 개체에 대한 모든 액세스를 암시적으로 거부합니다. ACL에 ACE를 추가하려면 RtlAddAccessAllowedAce를 사용합니다.

ACL의 크기를 계산하려면 ACL에 저장할 모든 ACL의 크기에 sizeof(ACL)를 추가합니다. ACE의 크기를 계산하려면 sizeof(ACCESS_ALLOWED_ACE)와 같은 ACE 구조체의 크기를 ACE와 연결된 SID의 길이에 추가한 다음 SIDStart 멤버의 크기(ACE 구조와 SID 모두의 일부임)를 뺍니다. RtlLengthSid 함수를 사용하여 지정된 SID의 길이를 가져옵니다.

다음 예제에서는 액세스 허용 ACE의 크기를 계산하는 방법을 보여줍니다.

sizeof (ACCESS_ALLOWED_ACE) - sizeof (ACCESS_ALLOWED_ACE.SidStart) 
        + GetLengthSid (pAceSid);

ACL의 크기를 계산하려면 다음 알고리즘을 사용하여 sizeof(ACE) 식에서 적절한 ACE 구조를 대체합니다.

cbAcl = sizeof (ACL);
for (i = 0 ; i < nAceCount ; i++) {
    // subtract ACE.SidStart from the size
    cbAce = sizeof (ACE) - sizeof (DWORD);
    // add this ACE's SID length
    cbAce += GetLengthSid (pAceSid[i]);
    // add the length of each ACE to the total ACL length
    cbAcl += cbAce;
}

보안 및 액세스 제어에 대한 자세한 내용은 드라이버 개발자를 위한 Windows 보안 모델 및 Windows SDK의 이러한 topics 대한 설명서를 참조하세요.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

추가 정보

ACCESS_ALLOWED_ACE

에이스

ACL

RtlAddAccessAllowedAce

RtlLengthSid

SID