SepBuildCapeSecurityDescriptor

NTSTATUS __stdcall SepBuildCapeSecurityDescriptor(PVOID CapeSecurityDescriptor, PVOID CapPolicyEntrySD, _ACL *Sacl){
  NTSTATUS result; 
  __int16 v7; 
  _ACL *v8; 
  __int64 v9; 

  result = RtlCreateSecurityDescriptor(CapeSecurityDescriptor, *(unsigned __int8 *)CapPolicyEntrySD);
  if( result >= 0 )
  {
    *((_WORD *)CapeSecurityDescriptor + 1) |= 3u;
    v7 = *((_WORD *)CapPolicyEntrySD + 1);
    if( (v7 & 4) == 0 )
    {
LABEL_3:
      v8 = 0i64;
      goto LABEL_8;
    }
    if( v7 >= 0 )
    {
      v8 = (_ACL *)*((_QWORD *)CapPolicyEntrySD + 4);
    }
    else
    {
      v9 = *((unsigned int *)CapPolicyEntrySD + 4);
      if( !(_DWORD)v9 )
        goto LABEL_3;
      v8 = (_ACL *)((char *)CapPolicyEntrySD + v9);
    }
LABEL_8:
    result = RtlSetDaclSecurityDescriptor(
               CapeSecurityDescriptor,
               (*((_WORD *)CapPolicyEntrySD + 1) & 4) != 0,
               v8,
               (*((_WORD *)CapPolicyEntrySD + 1) & 8) != 0);
    if( result >= 0 )
      return RtlSetSaclSecurityDescriptor(CapeSecurityDescriptor, 1u, Sacl, 0);
  }
  return result;
}

Referenced by:

SeAccessCheckByTypeWithAdminlessChecks
SeAccessCheckWithHintWithAdminlessChecks
SepAccessCheckAndAuditAlarmWithAdminlessChecks
SepCommonAccessCheckExWithAdminlessChecks