SepConstrainByMandatory

VOID __fastcall SepConstrainByMandatory(INT64 a1, INT64 a2, CHAR *a3, CHAR *a4, BOOL *a5, UINT64 a6){
  int v6; 
  int v7; 
  signed __int64 v8; 
  BOOL *v9; 
  __int64 v10; 
  int v11; 
  v6 = a2;
  if( *(_DWORD *)(a1 + 8) && (!*(_BYTE *)(a1 + 5) || !*(_BYTE *)(a1 + 4) || !*(_BYTE *)(a1 + 6)) )
  {
    if( (_DWORD)a6 )
    {
      v8 = a4 - a3;
      v9 = a5;
      v10 = (unsigned int)a6;
      do
      {
        v11 = *(_DWORD *)a3 & *(_DWORD *)a1;
        if( v11 != *(_DWORD *)a3 )
        {
          *(_DWORD *)a3 = v11;
          if( (v6 & 0x2000000) != 0 )
          {
            if( v11 )
            {
              *(_DWORD *)&a3[v8] = 0;
              if( a5 )
                *(_BYTE *)v9 = 1;
            }
            else
            {
              *(_DWORD *)&a3[v8] = -1073741790;
              if( a5 )
                *(_BYTE *)v9 = 0;
            }
          }
          else
          {
            *(_DWORD *)&a3[v8] = -1073741790;
            if( a5 )
              *(_BYTE *)v9 = *(_DWORD *)a3 != 0;
          }
        }
        a3 += 4;
        v9 = (BOOL *)((char *)v9 + 1);
        --v10;
      }
      while( v10 );
    }
    else
    {
      v7 = *(_DWORD *)a3 & *(_DWORD *)a1;
      if( v7 != *(_DWORD *)a3 )
      {
        *(_DWORD *)a3 = v7;
        if( (a2 & 0x2000000) != 0 )
        {
          if( v7 )
          {
            *(_DWORD *)a4 = 0;
            if( a5 )
              *(_BYTE *)a5 = 1;
          }
          else
          {
            *(_DWORD *)a4 = -1073741790;
            if( a5 )
              *(_BYTE *)a5 = 0;
          }
        }
        else
        {
          *(_DWORD *)a4 = -1073741790;
          if( a5 )
            *(_BYTE *)a5 = *(_DWORD *)a3 != 0;
        }
      }
    }
  }
}

Referenced by:

SeAccessCheckByTypeWithAdminlessChecks
SepAccessCheckAndAuditAlarmWithAdminlessChecks
SepCommonAccessCheckExWithAdminlessChecks