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