PpmParkSteerInterrupts
INT64 __fastcall PpmParkSteerInterrupts(){
INT64 PoolWithTag;
unsigned int v1;
unsigned int v2;
unsigned int v3;
unsigned __int64 v4;
__int64 v5;
unsigned __int64 v6;
unsigned int v7;
unsigned int v8;
__int64 v9;
__int64 v10;
unsigned __int64 v11;
int v12;
unsigned int v13;
unsigned __int64 *Bitmap;
__int64 Count;
unsigned __int64 v16;
bool v17;
unsigned __int64 v18;
int MaximumProcessorCount;
int FirstSetRightAffinity;
unsigned __int64 v21;
unsigned int v22;
int v23;
__int128 v24;
__int64 v25;
__int64 v26;
_KAFFINITY_EX result;
_KAFFINITY_EX Affinity1;
_KAFFINITY_EX v29;
_KAFFINITY_EX v30;
_KAFFINITY_EX v31;
v26 = 0i64;
v25 = 0i64;
v24 = 0i64;
memset((INT64)&result, 0i64);
memset((INT64)Affinity1.Bitmap, 0i64);
memset((INT64)&v29, 0i64);
memset((INT64)&v30, 0i64);
PoolWithTag = memset((INT64)&v31, 0i64);
v23 = 0;
v22 = 0;
if( PpmIntSteerDisabled )
goto LABEL_32;
PoolWithTag = (unsigned int)KiIntTrackRootEnabled;
if( !KiIntTrackRootEnabled )
goto LABEL_32;
if( !PpmIntSteerTrigger )
{
MaximumProcessorCount = HalQueryMaximumProcessorCount();
PoolWithTag = (INT64)ExAllocatePoolWithTag(
NonPagedPoolNx,
(unsigned int)(8 * MaximumProcessorCount),
0x6B725449ui64);
PpmIntSteerTrigger = PoolWithTag;
if( !PoolWithTag )
goto LABEL_32;
memset(PoolWithTag, 0i64);
}
KeIntSteerSnapPerf(&v23, &v26);
KeComplementAffinityEx((__int64)&v29, &PpmPerfCoreParkingMask);
KeQuerySystemAllowedCpuSetAffinity(&PpmCachedSystemAllowedCpuSet, &PpmCachedSystemAllowedCpuSetVersion);
KeAndAffinityEx(&v29, &PpmCachedSystemAllowedCpuSet, &v29);
*(_DWORD *)&Affinity1.Count = 1310721;
v1 = 0;
v2 = 0;
v3 = 0;
memset((INT64)&Affinity1.Reserved, 0i64);
v4 = KeActiveProcessors.Bitmap[0];
v5 = v26;
*(_QWORD *)&v24 = &KeActiveProcessors;
while( v4 )
{
LABEL_6:
++v1;
_BitScanForward64(&v6, v4);
v4 &= ~(1i64 << v6);
v22 = KiProcessorNumberToIndexMappingTable[64 * (unsigned __int16)v25 + (unsigned __int8)v6];
v7 = KiProcessorIndexToNumberMappingTable[v22];
v8 = v7 & 0x3F;
if( ((v29.Bitmap[(unsigned __int64)v7 >> 6] >> (KiProcessorIndexToNumberMappingTable[v22] & 0x3F)) & 1) != 0 )
{
++v3;
v9 = *(_QWORD *)(PpmIntSteerTrigger + 8i64 * v22);
if( !v9 )
{
v9 = v5;
*(_QWORD *)(PpmIntSteerTrigger + 8i64 * v22) = v5;
}
if( v5 - v9 >= (unsigned __int64)(10000 * PpmIntSteerTriggerMax) )
{
v10 = v7 >> 6;
if( Affinity1.Count <= (unsigned int)v10 )
Affinity1.Count = v10 + 1;
v11 = Affinity1.Bitmap[v10];
_bittestandset64((__int64 *)&v11, v8);
Affinity1.Bitmap[v10] = v11;
++v2;
}
}
else
{
*(_QWORD *)(8i64 * v22 + PpmIntSteerTrigger) = 0i64;
}
}
while( 1 )
{
LOWORD(v25) = v25 + 1;
if( (unsigned __int16)v25 >= (unsigned int)KeActiveProcessors.Count )
break;
*((_QWORD *)&v24 + 1) = KeActiveProcessors.Bitmap[(unsigned __int16)v25];
v4 = *((_QWORD *)&v24 + 1);
if( *((_QWORD *)&v24 + 1) )
{
v5 = v26;
goto LABEL_6;
}
}
if( !v2 )
{
if( v3 )
{
KeCopyAffinityEx((__int64)&Affinity1, &v29.Count);
v2 = v3;
}
else
{
FirstSetRightAffinity = KeFindFirstSetRightAffinityEx(&PpmCachedSystemAllowedCpuSet);
if( FirstSetRightAffinity == -1 )
FirstSetRightAffinity = 0;
v22 = FirstSetRightAffinity;
KeAddProcessorAffinityEx(&Affinity1, FirstSetRightAffinity);
v2 = 1;
}
}
v12 = PpmIntSteerMode;
if( PpmIntSteerMode < 1 )
goto LABEL_16;
switch( PpmIntSteerMode )
{
case 1:
KeCopyAffinityEx((__int64)&result, &KeActiveProcessors.Count);
v3 = v1;
break;
case 2:
KeCopyAffinityEx((__int64)&result, &Affinity1.Count);
v3 = v2;
break;
case 3:
KeCopyAffinityEx((__int64)&result, &v29.Count);
break;
default:
if( (unsigned int)(PpmIntSteerMode - 5) > 1 )
{
LABEL_16:
v3 = (PpmIntSteerLoadMax + v23) / (unsigned int)PpmIntSteerLoadMax;
if( v3 >= v2 )
{
v3 = v2;
KeCopyAffinityEx((__int64)&result, &Affinity1.Count);
}
else
{
*(_DWORD *)&result.Count = 1310721;
memset((INT64)&result.Reserved, 0i64);
*(_DWORD *)&v30.Count = 1310721;
memset((INT64)&v30.Reserved, 0i64);
if( PpmParkPreferenceHandler )
PpmParkPreferenceHandler(1i64, PpmCheckTime, v3, &Affinity1, 0i64, 0i64, &v30, &result);
v13 = 0;
if( result.Count )
{
Bitmap = result.Bitmap;
Count = result.Count;
do
{
v16 = *Bitmap++;
v13 += (unsigned int)((0x101010101010101i64
* ((((v16 - ((v16 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((v16 - ((v16 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
+ ((((v16 - ((v16 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((v16 - ((v16 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 32) >> 24;
--Count;
}
while( Count );
}
v17 = v13 < v3;
if( v13 > v3 )
{
*(_DWORD *)&result.Count = 1310721;
memset((INT64)&result.Reserved, 0i64);
v17 = v3 != 0;
v13 = 0;
}
if( v17 )
{
KeSubtractAffinityEx(&Affinity1, &v30, &v31);
*((_QWORD *)&v24 + 1) = v31.Bitmap[0];
*(_QWORD *)&v24 = &v31;
LOWORD(v25) = 0;
while( !(unsigned int)KeEnumerateNextProcessor(&v22, (unsigned __int16 **)&v24) )
{
v18 = (unsigned int)KiProcessorIndexToNumberMappingTable[v22];
if( ((result.Bitmap[v18 >> 6] >> (v18 & 0x3F)) & 1) == 0 )
{
KeAddProcessorAffinityEx(&result, v22);
if( ++v13 >= v3 )
goto LABEL_29;
}
}
if( v13 < v3 )
{
*((_QWORD *)&v24 + 1) = Affinity1.Bitmap[0];
*(_QWORD *)&v24 = &Affinity1;
LOWORD(v25) = 0;
while( !(unsigned int)KeEnumerateNextProcessor(&v22, (unsigned __int16 **)&v24) )
{
v21 = (unsigned int)KiProcessorIndexToNumberMappingTable[v22];
if( ((result.Bitmap[v21 >> 6] >> (v21 & 0x3F)) & 1) == 0 )
{
KeAddProcessorAffinityEx(&result, v22);
if( ++v13 >= v3 )
break;
}
}
}
}
}
break;
}
*(_DWORD *)&result.Count = 1310721;
memset((INT64)&result.Reserved, 0i64);
KeAddProcessorAffinityEx(&result, v12 - 5);
v3 = 1;
break;
}
LABEL_29:
if( (unsigned int)KeIsEmptyAffinityEx(&result) )
KeAddProcessorAffinityEx(&result, 0);
LODWORD(PoolWithTag) = KeIntSteerPeriodic(&result, v3);
LABEL_32:
LOBYTE(PoolWithTag) = 1;
return PoolWithTag;
}Referenced by:
No references.