RtlpHpAllocVA

NTSTATUS __fastcall RtlpHpAllocVA(INT64 *a1, __int64 *a2, __int64 a3, int a4, UINT64 a5, __int64 a6){
  unsigned int v8; 
  __int64 v9; 
  __int64 v10; 
  INT64 v11; 
  NTSTATUS result; 
  _RTL_RUN_ONCE *HeapManager; 
  INT64 v14; 
  __int64 v15; 
  INT64 v16; 
  __int64 v17; 
  UINT64 v18; 
  INT64 v19; 
  INT64 v20; 
  INT64 v21; 
  INT64 v22; 
  __int128 v23; 
  UINT64 v24; 
  int v25; 
  int v26; 
  __int64 v27; 
  INT64 v28[2]; 

  v28[0] = 0x100000001000i64;
  v28[1] = 0x4000000000200000i64;
  v8 = a4 & 0xFEFFFFFF;
  v23 = *(_OWORD *)a6;
  if( (a4 & 0xFEFFFFFF) == 0x2000 && (a4 & 0x1000000) == 0 )
  {
    *(_OWORD *)v28 = *(_OWORD *)a6;
    HeapManager = RtlpHpEnvGetHeapManager(v28);
    v26 = 0;
    if( BYTE3(v23) )
      LODWORD(v24) = BYTE3(v23) - 1;
    else
      LODWORD(v24) = -1;
    HIDWORD(v24) = BYTE1(v23);
    v25 = BYTE2(v23);
    if( (v23 & 8) != 0 )
      v26 = 1;
    v15 = *a2;
    v27 = *((_QWORD *)&v23 + 1);
    v28[0] = v15 - ((v15 - 1) & 0xFFFFF) + 0xFFFFF;
    LODWORD(v16) = RtlpHpVaMgrCtxAlloc((INT64)&HeapManager[11], (INT64)v28, v14, &v24);
    if( !v16 )
      return -1073741670;
    *a2 = v28[0];
    *a1 = v16;
    return 0;
  }
  v9 = *a2;
  if( (a4 & 0x2000) != 0 )
  {
    v17 = *((unsigned int *)v28 + BYTE1(v23));
    v10 = v17 - ((v9 + v17 - 1) & (unsigned int)(v17 - 1)) + v9 - 1;
  }
  else
  {
    v10 = v9 - ((v9 - 1) & 0xFFF) + 4095;
  }
  v28[0] = v10;
  if( (a4 & 0x1000) != 0 && BYTE1(v23) >= 2u )
  {
    *a2 = v10;
    if( (a4 & 0x40000000) != 0 )
      memset((VOID *)*a1, 0i64, v10);
    return 0;
  }
  v11 = v8;
  LODWORD(v22) = BYTE2(v23);
  LODWORD(v20) = BYTE1(v23);
  LODWORD(v11) = v8 | 0x40000;
  LODWORD(v18) = a5;
  if( (((unsigned __int8)v23 >> 3) & ((v8 & 0x2000) != 0)) == 0 )
    v11 = v8;
  LODWORD(v19) = ((unsigned __int8)v23 >> 1) & 3;
  result = RtlpHpEnvAllocVA(a1, v28, 0i64, v11, v18, v19, v20, v21, v22);
  if( result >= 0 )
  {
    *a2 = v28[0];
    return 0;
  }
  return result;
}

Referenced by:

RtlpHpHeapAllocate
RtlpHpHeapExtendContext
RtlpHpLargeAlloc
RtlpHpSegMgrCommit
RtlpHpSegMgrReserve