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