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