MiSetIdealProcessorThread

NTSTATUS __stdcall MiSetIdealProcessorThread(PGROUP_AFFINITY Affinity){
  bool v1; 
  _KTHREAD *CurrentThread; 
  KPRIORITY v4; 
  unsigned int FirstSetRightGroupAffinity; 
  NTSTATUS v6; 
  UINT64 OldProcessor; 
  struct _GROUP_AFFINITY PreviousAffinity; 
  LODWORD(OldProcessor) = 0;
  v1 = Affinity->Mask == 0;
  PreviousAffinity = 0i64;
  if( v1 )
    return -1;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = KeQueryPriorityThread((_KTHREAD *)CurrentThread) >= 16 ? -1 : KeSetPriorityThread((PKTHREAD)CurrentThread, 16);
  KeSetSystemGroupAffinityThread(Affinity, &PreviousAffinity);
  KeRevertToUserGroupAffinityThread(&PreviousAffinity);
  FirstSetRightGroupAffinity = KeFindFirstSetRightGroupAffinity(Affinity);
  v6 = KeSetIdealProcessorThreadEx((_KTHREAD *)CurrentThread, FirstSetRightGroupAffinity, &OldProcessor);
  if( v4 != -1 )
    KeSetPriorityThread((PKTHREAD)CurrentThread, v4);
  if( v6 < 0 )
    return -1;
  else
    return OldProcessor;
}

Referenced by:

MiGetPagesToZero
MiZeroInParallelWorker
MiZeroLargePages