KeSetIdealProcessorThreadByNumber

VOID __fastcall KeSetIdealProcessorThreadByNumber(
        _ETHREAD *Thread,
        _PROCESSOR_NUMBER *ProcessorNumber,
        _PROCESSOR_NUMBER *OldNumber){
  unsigned int ProcessorIndexFromNumber; 
  UINT64 IdealProcessor; 
  UINT64 OldProcessor; 

  LODWORD(OldProcessor) = 0;
  ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber(&ProcessorNumber->Group);
  if( ProcessorIndexFromNumber == -1 )
  {
    if( Thread == (_ETHREAD *)KeGetCurrentThread() )
      IdealProcessor = Thread->Tcb.IdealProcessor;
    else
      IdealProcessor = Thread->Tcb.UserIdealProcessor;
  }
  else
  {
    KeSetIdealProcessorThreadEx(Thread, ProcessorIndexFromNumber, &OldProcessor);
    IdealProcessor = (unsigned int)OldProcessor;
  }
  KeGetProcessorNumberFromIndex(IdealProcessor, OldNumber);
}

Referenced by:

KeSetIdealProcessorThread
NtQueryInformationThread
NtSetInformationThread