PsUpdateActiveProcessAffinity
VOID __stdcall PsUpdateActiveProcessAffinity(){
_ETHREAD *CurrentThread;
__int128 v1;
__int128 v2;
__int128 v3;
__int128 v4;
__int128 v5;
__int128 v6;
__int128 v7;
__int128 v8;
unsigned __int64 v9;
void *v10;
__int64 NextProcess;
void *v12;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)&PspAffinityUpdateLock, 0i64);
if( !(unsigned int)KeIsSubsetAffinityEx(&KeActiveProcessors, &PspLastUpdateAffinityMask) )
{
v1 = *(_OWORD *)&KeActiveProcessors.Bitmap[1];
*(_OWORD *)&PspLastUpdateAffinityMask.Count = *(_OWORD *)&KeActiveProcessors.Count;
v2 = *(_OWORD *)&KeActiveProcessors.Bitmap[3];
*(_OWORD *)&PspLastUpdateAffinityMask.Bitmap[1] = v1;
v3 = *(_OWORD *)&KeActiveProcessors.Bitmap[5];
*(_OWORD *)&PspLastUpdateAffinityMask.Bitmap[3] = v2;
v4 = *(_OWORD *)&KeActiveProcessors.Bitmap[7];
*(_OWORD *)&PspLastUpdateAffinityMask.Bitmap[5] = v3;
v5 = *(_OWORD *)&KeActiveProcessors.Bitmap[9];
*(_OWORD *)&PspLastUpdateAffinityMask.Bitmap[7] = v4;
v6 = *(_OWORD *)&KeActiveProcessors.Bitmap[11];
*(_OWORD *)&PspLastUpdateAffinityMask.Bitmap[9] = v5;
v7 = *(_OWORD *)&KeActiveProcessors.Bitmap[15];
*(_OWORD *)&PspLastUpdateAffinityMask.Bitmap[11] = v6;
*(_OWORD *)&PspLastUpdateAffinityMask.Bitmap[13] = *(_OWORD *)&KeActiveProcessors.Bitmap[13];
v8 = *(_OWORD *)&KeActiveProcessors.Bitmap[17];
v9 = KeActiveProcessors.Bitmap[19];
v10 = 0i64;
*(_OWORD *)&PspLastUpdateAffinityMask.Bitmap[15] = v7;
*(_OWORD *)&PspLastUpdateAffinityMask.Bitmap[17] = v8;
PspLastUpdateAffinityMask.Bitmap[19] = v9;
while( 1 )
{
NextProcess = PsGetNextProcess(v10);
v12 = (void *)NextProcess;
if( !NextProcess )
break;
PspUpdateSingleProcessAffinity((__int64)CurrentThread, NextProcess, &KeActiveProcessors.Count);
v10 = v12;
}
}
PspUnlockAffinityUpdateExclusive((__int64)CurrentThread);
}Referenced by:
KeStartDynamicProcessor