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