RtlpHpSegPageRangeComputeLargePageCost
NTSTATUS __stdcall RtlpHpSegPageRangeComputeLargePageCost(
PVOID ThreadHandle,
_THREADINFOCLASS ThreadInformationClass,
PVOID ThreadInformation,
UINT64 ThreadInformationLength,
UINT64 *ReturnLength){
__int64 v5;
unsigned int v6;
__int64 v7;
unsigned __int64 v8;
__int16 *v9;
NTSTATUS v10;
int v11;
int v12;
unsigned int i;
NTSTATUS result;
v5 = *(_QWORD *)&ThreadInformationClass & *(_QWORD *)ThreadHandle;
v6 = ThreadInformationClass - v5;
v7 = *(_QWORD *)(v5 + 24);
v8 = v7 + 2 * ((unsigned __int64)(v6 + (_DWORD)ThreadInformation - 1) >> 21);
v9 = (__int16 *)(v7 + 2 * ((unsigned __int64)v6 >> 21));
v10 = 0;
v11 = 0;
v12 = 0;
for( i = ((__int64)(v8 - (_QWORD)v9) >> 1) + 1; (unsigned __int64)v9 <= v8; ++v9 )
{
if( (*v9 & 0x7FF) != 0 )
{
if( *v9 < 0 )
++v11;
}
else
{
++v12;
}
}
if( v11 == i )
{
LOBYTE(v10) = i > (unsigned int)((_DWORD)ThreadInformation + 0x1FFFFF) >> 21;
return v10;
}
else if( v11 )
{
return 2;
}
else
{
result = 4;
if( v12 )
return 3;
}
return result;
}Referenced by:
RtlpHpSegAlloc
RtlpHpSegFreeRangeInsert
RtlpHpSegPageRangeShrink
RtlpHpSegSubAllocate