KeIntSteerPeriodic
VOID __fastcall KeIntSteerPeriodic(_KAFFINITY_EX *SteeringMask, UINT64 NumProcs){
unsigned int v2;
unsigned __int8 CurrentIrql;
int v5;
ULONG_PTR *i;
__int64 *j;
UINT64 ProcIndex;
_KAFFINITY_ENUMERATION_CONTEXT Context;
_EVENT_DATA_DESCRIPTOR v10;
unsigned int *p_DeviceInterrupts;
__int64 v12;
_EVENT_DATA_DESCRIPTOR UserData;
int *v14;
__int64 v15;
int *v16;
__int64 v17;
_KAFFINITY_EX *v18;
__int64 v19;
unsigned __int64 *Bitmap;
int v21;
int v22;
v2 = NumProcs;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
KxAcquireSpinLock(&KiIntTrackSpinlock);
KiIntSteerCalculateDistribution(SteeringMask, v2);
KeCopyAffinityEx(&KiIntSteerMask, SteeringMask);
KiIntSteerMaskCount = v2;
if( KiIntSteerEtwEventEnabled((__int64)&PPM_ETW_INTERRUPT_STEERING_MASK_CHANGE) )
{
*(_QWORD *)&UserData.Size = 4i64;
UserData.Ptr = (unsigned __int64)&KiIntSteerLoadPercent;
v15 = 4i64;
v14 = &KiIntTrackRootCount;
v17 = 4i64;
v16 = &KiIntSteerMaskCount;
v18 = &KiIntSteerMask;
v19 = 2i64;
v22 = 0;
Bitmap = KiIntSteerMask.Bitmap;
v21 = 160 * KiIntSteerMask.Count;
EtwWriteEx(qword_140CEC788[0], &PPM_ETW_INTERRUPT_STEERING_MASK_CHANGE, 0i64, 0, 0, 0, 5u, &UserData);
}
LODWORD(ProcIndex) = 0;
memset(&Context, 0, sizeof(Context));
if( KiIntSteerEtwEventEnabled((__int64)&PPM_ETW_INTERRUPT_STEERING_PROC_CHANGE) )
{
Context.CurrentMask = KeActiveProcessors.Bitmap[0];
Context.Affinity = &KeActiveProcessors;
while( 1 )
{
KeEnumerateNextProcessor(&ProcIndex, &Context);
if( v5 )
break;
v10.Ptr = (unsigned __int64)&ProcIndex;
*(_QWORD *)&v10.Size = 4i64;
v12 = 4i64;
p_DeviceInterrupts = &(*(&KiProcessorBlock + (unsigned int)ProcIndex))->DeviceInterrupts;
EtwWriteEx(qword_140CEC788[0], &PPM_ETW_INTERRUPT_STEERING_PROC_CHANGE, 0i64, 0, 0, 0, 2u, &v10);
}
}
if( KiIntSteerEtwEventEnabled((__int64)PPM_ETW_INTERRUPT_STEERING_STATE_RETARGET) )
{
for( i = *(ULONG_PTR **)&KiIntTrackRootList; i != &KiIntTrackRootList; i = *(ULONG_PTR **)i )
{
if( *((_QWORD *)i + 22) != *((_QWORD *)i + 20) )
{
for( j = (__int64 *)*((_QWORD *)i + 2); j != (__int64 *)(i + 4); j = (__int64 *)*j )
KiIntSteerLogState((__int64)j, (__int64)PPM_ETW_INTERRUPT_STEERING_STATE_RETARGET);
}
}
}
KiIntSteerDistributeInterrupts();
KxReleaseSpinLock(&KiIntTrackSpinlock);
__writecr8(CurrentIrql);
}Referenced by:
PpmParkSteerInterrupts