RtlpComputeMergedAcl2

__int64 __fastcall RtlpComputeMergedAcl2(
        _BYTE *a1,
        __int16 a2,
        unsigned __int8 *a3,
        __int16 a4,
        __int64 a5,
        __int64 a6,
        __int64 a7,
        int a8,
        __int64 a9,
        PACL Acl,
        __int64 a11){
  _DWORD *v13; 
  PACL v14; 
  char v16; 
  char v17; 
  unsigned int v18; 
  _DWORD *v19; 
  __int64 result; 
  int v21; 
  bool v22; 
  unsigned int v23; 
  unsigned int v24; 
  int v25[18]; 
  unsigned int v27; 
  v27 = 0;
  v25[0] = 0;
  v13 = (_DWORD *)a9;
  v14 = Acl;
  v16 = 0;
  v17 = 1;
  v18 = 2;
  RtlCreateAcl(Acl, *(_DWORD *)a9, 2u);
  v19 = (_DWORD *)a11;
  *(_DWORD *)a11 = 1024;
  if( (a4 & 0x1000) != 0 )
  {
    *v19 = 5120;
    if( a3 )
    {
      if( *a3 >= 2u )
        LOBYTE(v18) = *a3;
      result = RtlpCopyAces(
                 (__int64)a3,
                 (struct _GENERIC_MAPPING *)a7,
                 2,
                 16,
                 1,
                 a5,
                 a6,
                 a5,
                 a6,
                 1,
                 0,
                 a8,
                 &v27,
                 (__int64)v14);
LABEL_6:
      if( (_DWORD)result == -1073741789 )
      {
        v16 = 1;
        result = 0i64;
      }
      if( (int)result < 0 )
        return result;
      v17 = 0;
      goto LABEL_30;
    }
    goto LABEL_30;
  }
  if( (a2 & 0x1000) == 0 )
  {
    v21 = a8;
    v22 = a8 != 1;
    if( a3 )
    {
      if( *a3 >= 2u )
        v18 = *a3;
      result = RtlpCopyAces(
                 (__int64)a3,
                 (struct _GENERIC_MAPPING *)a7,
                 1,
                 0,
                 1,
                 a5,
                 a6,
                 a5,
                 a6,
                 1,
                 0,
                 a8,
                 &v27,
                 (__int64)v14);
      if( (_DWORD)result == -1073741789 )
      {
        v16 = 1;
        result = 0i64;
      }
      if( (int)result < 0 )
        return result;
      v17 = *((_WORD *)a3 + 2) != 0 && v22;
    }
    else
    {
      v17 = a8 != 1;
      if( a8 == 1 )
        return 3221225591i64;
    }
    if( a1 )
    {
      if( v18 <= (unsigned __int8)*a1 )
        LOBYTE(v18) = *a1;
      result = RtlpCopyAces(
                 (__int64)a1,
                 (struct _GENERIC_MAPPING *)a7,
                 0,
                 0,
                 0,
                 0i64,
                 0i64,
                 0i64,
                 0i64,
                 1,
                 0,
                 v21,
                 (unsigned int *)v25,
                 (__int64)v14);
      if( (_DWORD)result == -1073741789 )
      {
        v16 = 1;
        result = 0i64;
      }
      if( (int)result < 0 )
        return result;
    }
    goto LABEL_30;
  }
  if( a3 )
  {
    if( *a3 >= 2u )
      LOBYTE(v18) = *a3;
    result = RtlpCopyAces(
               (__int64)a3,
               (struct _GENERIC_MAPPING *)a7,
               2,
               0,
               1,
               a5,
               a6,
               a5,
               a6,
               1,
               1,
               a8,
               &v27,
               (__int64)v14);
    goto LABEL_6;
  }
  if( a8 == 1 )
    return 3221225591i64;
LABEL_30:
  v23 = v27 + v25[0];
  if( v27 + v25[0] || !v17 )
  {
    if( (unsigned __int64)v23 + 8 > 0xFFFF )
      return 3221225597i64;
    v24 = v23 + 8;
    *v13 = v24;
    if( v16 )
      return 3221225507i64;
    v14->AclSize = v24;
    v14->AclRevision = v18;
  }
  else
  {
    *v13 = 0;
  }
  return 0i64;
}

Referenced by:

RtlpComputeMergedAcl