RtlpComputeMergedAcl

__int64 __fastcall RtlpComputeMergedAcl(
        _BYTE *a1,
        __int16 a2,
        unsigned __int8 *a3,
        __int16 a4,
        __int64 a5,
        __int64 a6,
        __int64 a7,
        int a8,
        __int64 a9,
        __int64 a10){
  unsigned int v10; 
  int v15; 
  struct _ACL *Acl; 
  unsigned int v17; 
  __int64 v19; 
  v10 = 1024;
  LODWORD(v19) = 1024;
  v15 = 0;
  while( 1 )
  {
    Acl = (struct _ACL *)ExAllocatePoolWithTag(PagedPool, v10, 0x63416553ui64);
    *(_QWORD *)a9 = Acl;
    if( !Acl )
      break;
    v17 = RtlpComputeMergedAcl2(a1, a2, a3, a4, a5, a6, a7, a8, (__int64)&v19, Acl, a10);
    if( (v17 & 0x80000000) == 0 )
    {
      if( !(_DWORD)v19 )
      {
        ExFreePoolWithTag(*(PVOID *)a9, 0);
        *(_QWORD *)a9 = 0i64;
      }
      return v17;
    }
    ExFreePoolWithTag(*(PVOID *)a9, 0);
    *(_QWORD *)a9 = 0i64;
    if( v17 != -1073741789 )
      return v17;
    if( (unsigned int)++v15 >= 2 )
      return v17;
    v10 = v19;
  }
  return 3221225495i64;
}

Referenced by:

RtlpNewSecurityObject
RtlpSetSecurityObject