RtlpHpSegMgrReserve

__int64 __fastcall RtlpHpSegMgrReserve(INT64 a1, CHAR a2, INT64 *a3, unsigned int *a4, __int64 a5){
  unsigned int v6; 
  INT64 v9; 
  UINT64 v10; 
  bool v11; 
  NTSTATUS v12; 
  int v13; 
  _DWORD *v14; 
  INT64 v15; 
  UINT64 v17; 
  INT64 v18[2]; 
  __int64 v19[2]; 
  UINT64 v20; 

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

Referenced by:

RtlpHpSegMgrAllocate