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