KeSetIdealProcessorThreadEx

NTSTATUS __stdcall KeSetIdealProcessorThreadEx(_ETHREAD *Thread, UINT64 Processor, UINT64 *OldProcessor){
  int v4; 
  NTSTATUS v5; 
  unsigned __int8 CurrentIrql; 
  unsigned int v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned int v10; 
  int v11; 
  __int64 v12; 
  unsigned int v13; 
  void *ControlPrcb[11]; 
  _KPRCB *IdealPrcb; 
  UINT64 SpinCount; 
  UINT64 *v19; 
  _KSHARED_READY_QUEUE *ControlReadyQueue; 
  v19 = OldProcessor;
  ControlPrcb[0] = 0i64;
  ControlReadyQueue = 0i64;
  v4 = Processor;
  v5 = -1073741823;
  IdealPrcb = *(&KiProcessorBlock + (unsigned int)Processor);
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)Thread + 16, 0i64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *((_QWORD *)Thread + 8) );
  }
  v7 = *((_DWORD *)Thread + 147);
  v8 = *((_DWORD *)Thread + 49);
  if( Thread == (_ETHREAD *)KeGetCurrentThread() || (*((_DWORD *)Thread + 29) & 8) == 0 )
  {
    v9 = *((_DWORD *)Thread + 147);
    v10 = v9;
    if( KiPrcbInGroupAffinity((__int64)IdealPrcb, (__int64)Thread + 576) )
    {
      KiAcquireThreadStateLock(Thread, (_KPRCB **)ControlPrcb, &ControlReadyQueue);
      v11 = *((_DWORD *)Thread + 29);
      *((_DWORD *)Thread + 147) = v4;
      if( (v11 & 8) == 0 )
        *((_DWORD *)Thread + 49) = v4;
      KiUpdateSharedReadyQueueAffinityThread(IdealPrcb, (_KTHREAD *)Thread);
      KiReleaseThreadStateLock(v12, (__int64)ControlPrcb[0], (volatile signed __int64 *)ControlReadyQueue);
      v10 = *((_DWORD *)Thread + 147);
      v5 = 0;
    }
  }
  else
  {
    v9 = *((_DWORD *)Thread + 49);
    if( KiPrcbInGroupAffinity((__int64)IdealPrcb, (__int64)Thread + 552) )
    {
      v5 = 0;
      *((_DWORD *)Thread + 49) = v4;
    }
    v10 = v7;
  }
  v13 = *((_DWORD *)Thread + 49);
  KiReleaseThreadLockSafe((INT64)Thread);
  if( (xmmword_140CFB490 & 0x8000000) != 0 )
  {
    EtwTraceIdealProcessor((INT64)Thread, 0x546u, v7, v10);
    if( (xmmword_140CFB490 & 0x8000000) != 0 )
      EtwTraceIdealProcessor((INT64)Thread, 0x547u, v8, v13);
  }
  __writecr8(CurrentIrql);
  if( v19 )
    *(_DWORD *)v19 = v9;
  return v5;
}

Referenced by:

KeSetIdealProcessorThreadByNumber
MiSetIdealProcessorThread
MiZeroInParallelWorker