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