RtlpHpSegFreeRangeInsert
UINT64 __fastcall RtlpHpSegFreeRangeInsert(INT64 a1, UINT64 a2, INT64 a3){
UINT64 v3;
char v6;
unsigned __int64 v7;
bool v8;
unsigned __int64 v9;
UINT64 result;
UINT64 *v11;
if( !(_DWORD)a3
&& (*(_BYTE *)(a1 + 13) & 0x10) != 0
&& *(unsigned __int8 *)(a2 + 31) == 256 - *(unsigned __int8 *)(a1 + 10) )
{
result = a2 & *(_QWORD *)a1;
*(_DWORD *)a2 = -857879297;
}
else
{
if( (*(_BYTE *)(a1 + 13) & 7) != 0 )
v6 = RtlpHpSegPageRangeComputeLargePageCost(
(PVOID)a1,
(THREADINFOCLASS)((a2 & *(_QWORD *)a1) + ((__int64)(a2 - (a2 & *(_QWORD *)a1)) >> 5 << *(_BYTE *)(a1 + 8))),
(PVOID)(*(unsigned __int8 *)(a2 + 31) << *(_BYTE *)(a1 + 8)),
v3,
v11);
else
v6 = 4;
*(_BYTE *)(a2 + 30) = v6;
v7 = *(_QWORD *)(a1 + 96);
if( (*(_QWORD *)(a1 + 104) & 1) != 0 )
{
if( v7 )
v7 ^= a1 + 96;
}
v8 = 0;
if( v7 )
{
while( 1 )
{
if( *(_DWORD *)(a2 + 28) < *(_DWORD *)(v7 + 28) )
{
v9 = *(_QWORD *)v7;
if( (*(_QWORD *)(a1 + 104) & 1) != 0 )
{
if( !v9 )
goto LABEL_19;
v9 ^= v7;
}
if( !v9 )
{
LABEL_19:
v8 = 0;
break;
}
}
else
{
v9 = *(_QWORD *)(v7 + 8);
if( (*(_QWORD *)(a1 + 104) & 1) != 0 )
{
if( !v9 )
goto LABEL_20;
v9 ^= v7;
}
if( !v9 )
{
LABEL_20:
v8 = 1;
break;
}
}
v7 = v9;
}
}
RtlRbInsertNodeEx((unsigned __int64 *)(a1 + 96), v7, v8, a2);
_InterlockedExchangeAdd64(
(volatile signed __int64 *)(*(__int16 *)(a1 + 22) + a1 + 16),
(unsigned __int16)~*(_WORD *)(a2 + 28));
return 0i64;
}
return result;
}Referenced by:
RtlpHpSegContextCompact
RtlpHpSegContextReserve
RtlpHpSegLargeRangeAllocate
RtlpHpSegPageRangeAllocate