Share via


개체의 ACL에서 컨트롤 액세스 권한 집합 읽기

ADSI를 사용하면 ACL의 다른 ACE와 마찬가지로 제어 액세스 권한 ACE를 읽습니다. Win32 보안 API를 사용하여 디렉터리 개체의 ACL을 읽을 수도 있습니다. 그러나 제어 액세스 권한은 제어 액세스 권한 부여 및 거부와 관련된 방식으로 IADsAccessControlEntry 인터페이스의 속성을 사용합니다.

  • AccessMask에는ADS_RIGHT_DS_CONTROL_ACCESS 포함되어야 합니다.
  • 플래그 값은 ADS_FLAG_OBJECT_TYPE_PRESENT.
  • ObjectType 은 제어 액세스 권한의 rightsGUID 특성의 문자열 형식입니다. GUID의 문자열 형식은 StringFromGUID2 COM 라이브러리 함수와 동일한 문자열 형식입니다.
  • AceType 은 트러스티에게 제어 액세스 권한을 부여할 ADS_ACETYPE_ACCESS_ALLOWED_OBJECT 또는 트러스티에게 제어 액세스 권한을 거부할 ADS_ACETYPE_ACCESS_DENIED_OBJECT 있습니다.
  • 트러스티는 보안 주체입니다. 는 ACE가 적용되는 사용자, 그룹, 컴퓨터 등입니다.

다음 절차에 따라 ADSI 개체에 대한 ACE를 읽습니다. 다음 절차는 C 및 C++ 애플리케이션에 적용됩니다.

ADSI 개체에 대한 ACE를 읽으려면

  1. 개체에 대한 IADs 인터페이스 포인터를 가져옵니다.
  2. IADs::Get 메서드를 사용하여 개체의 보안 설명자를 가져옵니다. 보안 설명자를 포함하는 속성의 이름은 "nTSecurityDescriptor"입니다. 속성은 IDispatch 포인터를 포함하는 VARIANT로 반환됩니다. vt 멤버가 VT_DISPATCH. 해당 IDispatch 포인터에서 QueryInterface를 호출하여 IADsSecurityDescriptor 인터페이스를 가져와 해당 인터페이스의 메서드를 사용하여 보안 설명자 ACL에 액세스합니다.
  3. IADsSecurityDescriptor::get_DiscretionaryAcl 메서드를 사용하여 ACL을 가져옵니다. 메서드는 IDispatch 포인터를 반환합니다. 해당 IDispatch 포인터에서 QueryInterface를 호출하여 IADsAccessControlList 인터페이스를 가져와 해당 인터페이스의 메서드를 사용하여 ACL의 개별 API에 액세스합니다.
  4. IADsAccessControlList::get__NewEnum 메서드를 사용하여 API를 열거합니다. 메서드는 IUnknown 포인터를 반환합니다. IUnknown 포인터에서 QueryInterface를 호출하여 IEnumVARIANT 인터페이스를 가져옵니다.
  5. IEnumVARIANT::Next 메서드를 사용하여 ACL에서 AES를 열거합니다. 속성은 IDispatch 포인터를 포함하는 VARIANT로 반환됩니다. vt 멤버가 VT_DISPATCH. 해당 IDispatch 포인터에서 QueryInterface를 호출하여 IADsAccessControlEntry 인터페이스를 가져와 ACE를 읽습니다.
  6. IADsAccessControlEntry::get_AccessMask 메서드를 호출하여 AccessMask를 가져와서 ADS_RIGHT_DS_CONTROL_ACCESS 플래그에 대한 AccessMask 값을 확인합니다. 이 플래그가 있는 경우 ACE에는 제어 액세스 권한이 포함됩니다.
  7. IADsAccessControlEntry::get_Flags 메서드를 호출하여 개체 형식에 대한 플래그를 가져옵니다.
  8. 플래그 값에서 ADS_FLAG_OBJECT_TYPE_PRESENT 플래그를 확인합니다. FlagsADS_FLAG_OBJECT_TYPE_PRESENT 설정된 경우 IADsAccessControlEntry::get_ObjectType 메서드를 호출하여 ACE가 적용되는 제어 액세스 권한의 rightsGUID가 포함된 문자열을 가져옵니다.
  9. IADsAccessControlEntry::get_AceType 메서드를 호출하여 ACE 형식을 가져옵니다. 형식은 트러스 티에게 제어 액세스 권한을 부여하거나 제어 액세스 권한을 거부할 수 있는 ADS_ACETYPE_ACCESS_DENIED_OBJECT 부여하는 ADS_ACETYPE_ACCESS_ALLOWED_OBJECT 됩니다.
  10. IADsAccessControlEntry::get_Trustee 메서드를 호출하여 보안 주체를 가져옵니다. ACE가 적용되는 사용자, 그룹, 컴퓨터 등입니다.
  11. ObjectTypeTrustee 문자열로 완료되면 SysFreeString을 사용하여 해당 문자열에 대한 메모리를 해제합니다.
  12. 인터페이스를 완료하면 Release 를 호출하여 모든 인터페이스 참조를 감소 또는 해제합니다.