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