HvlpComputeLpComparisonMetrics
NTSTATUS __stdcall HvlpComputeLpComparisonMetrics(UINT64 HalLpCount, UINT64 HalLpIndex){
unsigned int v2;
unsigned int v3;
unsigned int v4;
unsigned int v6;
__int64 v7;
unsigned int v8;
NTSTATUS result;
int v10;
int v11;
int v12;
int v13;
int v14;
unsigned int v15;
UINT64 v16;
unsigned int v17;
__int64 v18;
__int64 v19;
unsigned int v20;
unsigned int v21;
int v22;
int v23;
v20 = HalLpCount;
v3 = v2;
v21 = 0;
v4 = HalLpCount;
v6 = 0;
v7 = 5i64 * v2;
*(_DWORD *)(HalLpIndex + 8 * v7 + 20) = -1;
*(_DWORD *)(HalLpIndex + 8 * v7 + 16) = 0;
*(_QWORD *)(HalLpIndex + 8 * v7 + 24) = 0i64;
*(_QWORD *)(HalLpIndex + 8 * v7 + 32) = 0i64;
v8 = *(_DWORD *)(HalLpIndex + 40i64 * v2 + 4);
result = v8 >> 4;
v10 = ~(*((_DWORD *)KeGetCurrentPrcb() + 39) * *((_DWORD *)KeGetCurrentPrcb() + 38) - 1);
v11 = ~(*((_DWORD *)KeGetCurrentPrcb() + 39) - 1);
v12 = (unsigned __int16)(v8 >> 4);
v13 = v11 & v8;
v23 = v12;
v14 = v10 & v8;
v22 = v13;
if( (_DWORD)HalLpCount )
{
v15 = v21;
v16 = HalLpIndex + 4;
do
{
if( v6 != v3 )
{
result = *(unsigned __int16 *)(HalLpIndex + 8 * v7 + 8);
if( *(_WORD *)(v16 + 4) == (_WORD)result && v6 < v3 )
++*(_DWORD *)(HalLpIndex + 8 * v7 + 36);
if( *(_BYTE *)(v16 - 3) )
{
if( *(_WORD *)(v16 + 8) == *(_WORD *)(HalLpIndex + 8 * v7 + 12) )
++*(_DWORD *)(HalLpIndex + 8 * v7 + 16);
v17 = *(_DWORD *)v16;
if( (v10 & *(_DWORD *)v16) == v14 )
{
++*(_DWORD *)(HalLpIndex + 8 * v7 + 24);
v17 = *(_DWORD *)v16;
}
if( (v11 & v17) == v13 )
{
++*(_DWORD *)(HalLpIndex + 8 * v7 + 28);
v17 = *(_DWORD *)v16;
}
result = (unsigned __int16)(v17 >> 4);
if( result == v12 )
++*(_DWORD *)(HalLpIndex + 8 * v7 + 32);
v18 = *(unsigned __int16 *)(v16 + 6);
v19 = *(unsigned __int16 *)(HalLpIndex + 8 * v7 + 10);
if( (_WORD)v18 == (_WORD)v19
|| (!HvlpQueryNodeDistance ? (result = -1073741275) : (result = HvlpQueryNodeDistance(v19, v18, &v21),
v15 = v21,
v4 = v20,
v12 = v23),
result < 0) )
{
v13 = v22;
}
else
{
v13 = v22;
if( v15 < *(_DWORD *)(HalLpIndex + 8 * v7 + 20) )
*(_DWORD *)(HalLpIndex + 8 * v7 + 20) = v15;
}
}
}
++v6;
v16 += 40i64;
}
while( v6 < v4 );
}
return result;
}Referenced by:
HvlpSelectLpSet
HvlpSelectVpSet