RtlpHpSegMgrReserve

INT64 __fastcall RtlpHpSegMgrReserve(INT64 a1, CHAR a2, INT64 *a3, UINT64 *a4, INT64 a5){
  unsigned int v6; 
  INT64 v9; 
  size_t v10; 
  bool v11; 
  int v12; 
  int v13; 
  _DWORD *v14; 
  INT64 v15; 
  UINT64 v17; 
  INT64 a1a[2]; 
  INT64 a6[2]; 
  size_t a2a; 
  v6 = -*(_DWORD *)a1;
  a2a = v6;
  a1a[0] = RtlpHpSegMgrVaCtxAlloc(a1, v6, a2);
  v9 = a1a[0];
  if( a1a[0] )
    goto LABEL_10;
  v10 = a2a;
  if( (*(_BYTE *)(a1 + 13) & 7) != 0 )
  {
    if( v6 < 0x200000 )
      v10 = 0x200000i64;
    a2a = v10;
  }
  v11 = (*(_DWORD *)(*(_QWORD *)(a1 + 56) + 20i64) & 0x40000000) != 0;
  *(_OWORD *)a6 = *(_OWORD *)(a1 + 40);
  LODWORD(v17) = v11 ? 64 : 4;
  v12 = RtlpHpAllocVA(a1a, &a2a, v10, 0x2000i64, v17, (INT64)a6);
  if( v12 >= 0 )
  {
    v13 = a2a;
    v9 = a1a[0];
    if( v6 >= a2a )
    {
LABEL_5:
      v14 = (_DWORD *)a5;
      *(_DWORD *)a4 = v6;
      *a3 = v9;
      *v14 = v13;
      v15 = 0i64;
      a1a[0] = 0i64;
      v12 = 0;
      goto LABEL_6;
    }
    RtlpHpSegMgrVaCtxInitialize(a1, a1a[0], v6, (unsigned int)a2a);
    v9 = a1a[0];
LABEL_10:
    v13 = a2a;
    goto LABEL_5;
  }
  v15 = a1a[0];
LABEL_6:
  if( v15 )
  {
    *(_OWORD *)a6 = *(_OWORD *)(a1 + 40);
    RtlpHpFreeVA((UINT64 *)a1a, &a2a, 0x8000i64, (__int128 *)a6);
  }
  return(unsigned int)v12;
}

Referenced by:

RtlpHpSegMgrAllocate