RtlpHpMetadataAlloc

VOID *__stdcall RtlpHpMetadataAlloc(VOID *Param2, UINT64 a2, INT64 a3){
  __int128 *v3; 
  int v5; 
  _RTL_RUN_ONCE *v7; 
  VOID *v8; 
  VOID **p_Ptr; 
  _QWORD *v10; 
  char v11; 
  UINT64 v14; 
  __int128 v15; 

  v5 = a3;
  v15 = *v3;
  LODWORD(v7) = RtlpHpMetadataHeapCtxGet((INT128 *)&v15);
  v8 = 0i64;
  p_Ptr = &v7->Ptr;
  *(_QWORD *)&v15 = *v10;
  v11 = BYTE1(v15);
  BYTE3(v15) = 0;
  *((_QWORD *)&v15 + 1) = 0i64;
  if( BYTE1(v15) >= 2u )
    v11 = 2;
  BYTE1(v15) = v11;
  if( RtlpHpMetadataHeapStart(v7, &v15) >= 0 )
  {
    if( !v5 )
      return RtlpHpAllocateHeap(*p_Ptr, Param2, 0x1000000i64, 0);
    LODWORD(v14) = a2 < (unsigned __int64)Param2 ? 83886080 : 0x1000000;
    return(VOID *)RtlpHpSegAlloc(
                     (UINT16 *)((char *)*p_Ptr
                              + (*((unsigned int *)*p_Ptr + 68) < (unsigned __int64)Param2 ? 0xC0 : 0)
                              + 256),
                     (size_t)Param2,
                     (__int64)Param2,
                     a2,
                     v14);
  }
  return v8;
}

Referenced by:

RtlpHpHeapAllocate
RtlpHpLargeAlloc