내장 된 Users 그룹에 대한 쓰기 권한을 제거하기 위해 디렉토리 (및 해당 하위 디렉토리)에서 기존 ACL을 수정하려고합니다. 디렉토리는 상위 디렉토리에서이 특정 권한을 상속합니다. AtlSetDacl()을 사용하여 새 ACL을 설정하려고했지만 상속 된 쓰기 권한이 삭제되지 않습니다. 조각 :ACL에서 상속 된 ACE 제거/수정 (Windows)
ATL::CDacl dacl;
ATL::AtlGetDacl(directoryName.c_str(), SE_FILE_OBJECT, &dacl);
UINT aceCount = dacl.GetAceCount();
ATL::CDacl newDacl;
for (UINT i = 0; i < aceCount; ++i)
{
ATL::CSid sid;
ACCESS_MASK mask = 0;
BYTE flags = 0;
dacl.GetAclEntry(i,
&sid,
&mask,
(BYTE*) 0,
&flags);
if (sid != Sids::Users())
newDacl.AddAllowedAce(sid, mask, flags);
}
newDacl.AddAllowedAce(Sids::Users(),FILE_LIST_DIRECTORY | FILE_READ_EA | FILE_EXECUTE | FILE_READ_ATTRIBUTES, CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE);
AtlSetDacl(directoryName.c_str(), SE_FILE_OBJECT, newDacl);
는 또한 기존의 ACL을 지우고 새로 만들 SetNamedSecurityInfo가() 및 관련 API를 시도했지만 여기에 행운 중 하나를했습니다. 이렇게 열심히 노력해야하는 것 같지 않습니다. cacls.exe를 사용하면 이것은 케이크 조각입니다 (불행히도 나를위한 옵션은 아닙니다). 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?
실제 코드입니까? 생략 된 ACE를 사용하여 newDacl을 구성한 다음 디렉토리에 (이전) dacl을 다시 설정하기 때문입니다. – dave
그 점을 지적 해 주셔서 감사합니다, dave. 너무 많은 버전으로 작업하고 잘못된 버전을 붙여 넣었습니다. 코드 블록이 수정되었습니다. 이것은 내가 예상 한대로하지 않는 코드입니다. – mrnutz