RtlpHpAllocateHeapInternal

UINT64 __fastcall RtlpHpAllocateHeapInternal(INT64 a1, UINT64 a2, unsigned __int64 a3, UINT64 a4, __int64 a5){
  unsigned int v5; 
  unsigned __int64 v6; 
  size_t v7; 
  int v9; 
  UINT64 v10; 
  UINT64 v11; 
  UINT64 v13; 
  UINT64 v14; 

  v5 = a4;
  v6 = a3;
  v7 = a2;
  v9 = 3;
  if( a3 > (unsigned int)*(unsigned __int16 *)(a1 + 892) - 16
    || (LODWORD(v10) = RtlpHpLfhContextAllocate(a1 + 832, a2, a3, a4),
        v11 = v10,
        a3 = (unsigned int)v6,
        a2 = v7,
        v10 == -1i64) )
  {
    if( v6 > 0x20000 )
    {
      if( v6 > *(unsigned int *)(a1 + 464) )
      {
        LODWORD(v13) = RtlpHpLargeAlloc(a1, v7, v6, v5);
      }
      else
      {
        LODWORD(v14) = v5;
        v13 = RtlpHpSegAlloc((UINT16 *)(a1 + (*(unsigned int *)(a1 + 272) < v6 ? 448i64 : 256i64)), v7, v6, v6, v14);
      }
    }
    else
    {
      LODWORD(v13) = RtlpHpVsContextAllocate(a1 + 640, a2, a3, v5);
    }
    v11 = v13;
  }
  else
  {
    v9 = 2;
  }
  *(_DWORD *)a5 = v9;
  return v11;
}

Referenced by:

RtlpHpAllocateHeap