MiSetIdealProcessorThread

NTSTATUS __stdcall MiSetIdealProcessorThread(PGROUP_AFFINITY Affinity){
  bool v1; 
  _ETHREAD *CurrentThread; 
  int v4; 
  KPRIORITY v5; 
  unsigned int FirstSetRightGroupAffinity; 
  int v7; 
  int v8; 
  UINT64 OldProcessor; 
  _GROUP_AFFINITY PreviousAffinity; 

  LODWORD(OldProcessor) = 0;
  v1 = Affinity->Mask == 0;
  PreviousAffinity = 0i64;
  if( v1 )
    return -1;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  KeQueryPriorityThread(CurrentThread);
  v5 = v4 >= 16 ? -1 : KeSetPriorityThread(&CurrentThread->Tcb, 16);
  KeSetSystemGroupAffinityThread(Affinity, &PreviousAffinity);
  KeRevertToUserGroupAffinityThread(&PreviousAffinity);
  FirstSetRightGroupAffinity = KeFindFirstSetRightGroupAffinity((INT64)Affinity);
  KeSetIdealProcessorThreadEx(CurrentThread, FirstSetRightGroupAffinity, &OldProcessor);
  v8 = v7;
  if( v5 != -1 )
    KeSetPriorityThread(&CurrentThread->Tcb, v5);
  if( v8 < 0 )
    return -1;
  else
    return OldProcessor;
}

Referenced by:

MiGetPagesToZero
MiZeroInParallelWorker
MiZeroLargePages