RtlpHpVaMgrRangeFind
unsigned __int64 __fastcall RtlpHpVaMgrRangeFind(__int64 a1, unsigned __int16 a2, unsigned __int16 a3, _QWORD *a4){
unsigned __int64 i;
__int64 v7;
__int64 v9;
int v10;
unsigned __int64 v11;
unsigned __int64 v12;
__int64 v14;
__int64 v15;
__int64 v16;
unsigned __int64 v17;
_QWORD **v18;
unsigned __int64 v19;
_QWORD *v20;
__int64 v21;
i = *(_QWORD *)(a1 + 8);
v7 = a3;
v9 = a2;
if( (*(_BYTE *)(a1 + 16) & 1) != 0 && i )
i ^= a1 + 8;
v10 = *(_BYTE *)(a1 + 16) & 1;
v11 = 0i64;
while( i )
{
if( a2 < *(_WORD *)(i + 24) )
{
v12 = *(_QWORD *)i;
v11 = i;
}
else
{
if( a2 <= *(_WORD *)(i + 24) )
goto LABEL_15;
v12 = *(_QWORD *)(i + 8);
}
if( v10 && v12 )
i ^= v12;
else
i = v12;
}
i = v11;
LABEL_15:
if( i )
{
if( (unsigned __int16)v7 > 1u )
{
v14 = *(_QWORD *)(a1 + 24);
v15 = v7;
v16 = v7 - 1;
while( 1 )
{
v17 = (i - *(_QWORD *)(v14 + 40)) >> *(_DWORD *)(v14 + 24);
if( v9 + v17 + v15 - (v16 & (v17 + v15 - 1)) - 1 <= v17 + *(unsigned __int16 *)(i + 24) )
break;
v18 = *(_QWORD ***)(i + 8);
v19 = i;
if( v18 )
{
v20 = *v18;
for( i = *(_QWORD *)(i + 8); v20; v20 = (_QWORD *)*v20 )
i = (unsigned __int64)v20;
}
else
{
while( 1 )
{
i = *(_QWORD *)(i + 16) & 0xFFFFFFFFFFFFFFFCui64;
if( !i || *(_QWORD *)i == v19 )
break;
v19 = i;
}
}
if( !i )
return i;
}
LODWORD(v21) = RtlSparseArrayElementAllocated(v14 + 16, v17 + v15 - (v16 & (v17 + v15 - 1)) - 1);
*a4 = v21;
}
else
{
*a4 = i;
}
}
return i;
}Referenced by:
RtlpHpVaMgrAlloc