ACL 만들기 또는 수정

Windows는 ACL( 액세스 제어 목록 )을 만들거나 기존 ACL에서 ACL( 액세스 제어 항목)을 수정하는 함수 집합을 지원합니다.

SetEntriesInAcl 함수는 새 ACL을 만듭니다. SetEntriesInAcl 은 ACL에 대해 완전히 새로운 ACL 집합을 지정하거나 하나 이상의 새 ACL을 기존 ACL의 ACE와 병합할 수 있습니다. SetEntriesInAcl 함수는 EXPLICIT_ACCESS 구조체 배열을 사용하여 새 ACE에 대한 정보를 지정합니다. 각 EXPLICIT_ACCESS 구조에는 단일 ACE를 설명하는 정보가 포함되어 있습니다. 이 정보에는 액세스 권한, ACE 유형, ACE 상속을 제어하는 플래그 및 트러스티를 식별하는 TRUSTEE 구조가 포함됩니다.

기존 ACL에 새 ACE를 추가하려면

  1. GetSecurityInfo 또는 GetNamedSecurityInfo 함수를 사용하여 개체의 보안 설명자에서 기존 DACL 또는 SACL을 가져옵니다.
  2. 각각의 새 ACE에 대해 BuildExplicitAccessWithName 함수를 호출하여 ACE를 설명하는 정보로 EXPLICIT_ACCESS 구조를 채웁니다.
  3. SetEntriesInAcl을 호출하여 기존 ACL 및 새 ACE에 대한 EXPLICIT_ACCESS 구조의 배열을 지정합니다. SetEntriesInAcl 함수는 ACL 및 해당 ACL을 할당하고 초기화합니다.
  4. SetSecurityInfo 또는 SetNamedSecurityInfo 함수를 호출하여 개체의 보안 설명자에 새 ACL을 연결합니다.

호출자가 기존 ACL을 지정하는 경우 SetEntriesInAcl 은 새 ACE 정보를 ACL의 기존 ACE와 병합합니다. 예를 들어 기존 ACL이 지정된 트러스티에 대한 액세스 권한을 부여하고 EXPLICIT_ACCESS 구조가 동일한 트러스티에 대한 액세스를 거부하는 경우를 고려합니다. 이 경우 SetEntriesInAcl 은 트러스티에 대해 액세스 거부된 새 ACE를 추가하고 트러스티에 대해 기존 액세스 허용 ACE를 삭제하거나 수정합니다.

새 ACE를 기존 ACL에 병합하는 샘플 코드는 C++에서 개체의 ACL 수정을 참조하세요.