PspUpdateSingleProcessAffinity

VOID __stdcall PspUpdateSingleProcessAffinity(_ETHREAD *CurrentThread, _EPROCESS *Process, _KAFFINITY_EX *Affinity){
  _EX_PUSH_LOCK *p_ProcessLock; 
  NTSTATUS v7; 
  UINT64 AffinitySet; 

  if( (Process->Flags2 & 0x80000) != 0 )
  {
    p_ProcessLock = &Process->ProcessLock;
    LODWORD(AffinitySet) = 0;
    v7 = 0;
    ExAcquirePushLockSharedEx(&Process->ProcessLock, 0i64);
    if( (Process->Flags2 & 0x80000) != 0 )
      v7 = PspSetProcessAffinitySafe(Process, 2ui64, Affinity, 0i64, &AffinitySet);
    if( _InterlockedCompareExchange64(&p_ProcessLock->_bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(p_ProcessLock);
    KeAbPostRelease(p_ProcessLock);
    if( v7 >= 0 )
    {
      if( (_DWORD)AffinitySet )
        PspWritePebAffinityInfo(CurrentThread, (_EX_RUNDOWN_REF *)Process);
    }
  }
}

Referenced by:

PsUpdateActiveProcessAffinity
PspSetProcessAffinityUpdateMode