AddAccessDeniedObjectAce 함수(securitybaseapi.h)

AddAccessDeniedObjectAce 함수는 DACL(임의 액세스 제어 목록)의 끝에 ACE(액세스 거부 액세스 제어 항목)를 추가합니다. 새 ACE는 개체 또는 개체의 속성 집합 또는 속성에 대한 액세스를 거부할 수 있습니다. AddAccessDeniedObjectAce를 사용하여 지정된 형식의 자식 개체만 상속할 수 있는 ACE를 추가할 수도 있습니다.

구문

BOOL AddAccessDeniedObjectAce(
  [in, out]      PACL  pAcl,
  [in]           DWORD dwAceRevision,
  [in]           DWORD AceFlags,
  [in]           DWORD AccessMask,
  [in, optional] GUID  *ObjectTypeGuid,
  [in, optional] GUID  *InheritedObjectTypeGuid,
  [in]           PSID  pSid
);

매개 변수

[in, out] pAcl

DACL에 대한 포인터입니다. AddAccessDeniedObjectAce 함수는 이 DACL의 끝에 액세스 거부 ACE를 추가합니다. ACE는 ACCESS_DENIED_OBJECT_ACE 구조체 형식입니다.

[in] dwAceRevision

수정할 DACL의 수정 수준을 지정합니다. 이 값은 ACL_REVISION_DS 합니다. DACL의 수정 버전 수준이 ACL_REVISION_DS보다 낮으면 함수는 이를 ACL_REVISION_DS 변경합니다.

[in] AceFlags

ACE 상속을 제어하는 비트 플래그 집합입니다. 함수는 새 ACE의 ACE_HEADER 구조체의 AceFlags 멤버에서 이러한 플래그를 설정합니다. 이 매개 변수는 다음 값의 조합일 수 있습니다.

의미
CONTAINER_INHERIT_ACE
ACE는 컨테이너 개체에 의해 상속됩니다.
INHERIT_ONLY_ACE
ACE는 ACL( 액세스 제어 목록 )이 할당된 개체에는 적용되지 않지만 자식 개체에서 상속할 수 있습니다.
INHERITED_ACE
상속된 ACE를 나타냅니다. 이 플래그를 사용하면 개체 트리의 보안을 변경하는 작업이 개체에 직접 적용된 ACE를 변경하지 않고 상속된 API를 수정할 수 있습니다.
NO_PROPAGATE_INHERIT_ACE
OBJECT_INHERIT_ACE 및 CONTAINER_INHERIT_ACE 비트는 상속된 ACE로 전파되지 않습니다.
OBJECT_INHERIT_ACE
ACE는 비컨테이너 개체에 의해 상속됩니다.

[in] AccessMask

ACCESS_MASK 형식을 사용하여 새 ACE가 지정된 SID(보안 식별자)에 대해 거부하는 액세스 권한을 지정하는 비트 플래그 집합입니다.

[in, optional] ObjectTypeGuid

새 ACE로 보호되는 개체, 속성 집합 또는 속성의 형식을 식별하는 GUID 구조체에 대한 포인터입니다. 이 매개 변수가 NULL인 경우 새 ACE는 ACL이 할당된 개체를 보호합니다.

[in, optional] InheritedObjectTypeGuid

새 ACE를 상속할 수 있는 개체의 형식을 식별하는 GUID 구조체에 대한 포인터입니다. 이 매개 변수가 NULL이 아닌 경우 지정된 개체 형식만 ACE를 상속할 수 있습니다. NULL이면 모든 형식의 자식 개체가 ACE를 상속할 수 있습니다. 두 경우 모두 상속은 AceFlags 매개 변수의 값과 자식 개체에 배치된 상속에 대한 보호를 통해 제어됩니다.

[in] pSid

새 ACE에서 액세스를 허용하는 사용자, 그룹 또는 로그온 세션을 식별하는 SID에 대한 포인터입니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다. 가능한 오류 값은 다음과 같습니다.

반환 코드 설명
ERROR_ALLOTTED_SPACE_EXCEEDED
새 ACE가 ACL에 맞지 않습니다. 더 큰 ACL 버퍼가 필요합니다.
ERROR_INVALID_ACL
지정된 ACL이 제대로 구성되지 않았습니다.
ERROR_INVALID_FLAGS
AceFlags 매개 변수가 잘못되었습니다.
ERROR_INVALID_SID
지정된 SID가 구조적으로 유효하지 않습니다.
ERROR_REVISION_MISMATCH
지정된 수정 버전을 알 수 없거나 ACL의 수정 버전과 호환되지 않습니다.
ERROR_SUCCESS
ACE가 성공적으로 추가되었습니다.

설명

ObjectTypeGuidInheritedObjectTypeGuid모두 NULL인 경우 AddAccessDeniedObjectAce 대신 AddAccessDeniedAceEx 함수를 사용합니다. 이는 ACCESS_DENIED_ACE ACCESS_DENIED_OBJECT_ACE 보다 작고 효율적이기 때문에 제안됩니다.

AddAccessDeniedObjectAce 함수는 ACL 끝에 새 ACE를 추가하지만 액세스 거부 API는 ACL의 시작 부분에 표시됩니다. 호출자는 API가 올바른 순서로 DACL에 추가되도록 해야 합니다. 자세한 내용은 DACL의 ACE 순서를 참조하세요.

요구 사항

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

추가 정보

ACCESS_DENIED_ACE

ACCESS_DENIED_OBJECT_ACE

ACCESS_MASK

ACE_HEADER

AddAccessAllowedObjectAce

AddAccessDeniedAceEx

AddAuditAccessObjectAce

GUID

하위 수준 Access Control

하위 수준 Access Control 함수