KiUpdateThreadCpuSets
_KPRCB *__stdcall KiUpdateThreadCpuSets(_ETHREAD *Thread, _SINGLE_LIST_ENTRY *ReadyList){
int v2;
_KPRCB *v3;
UINT8 v6;
UINT8 v7;
_KSHARED_READY_QUEUE *v8;
int v9;
__int64 v10;
_SINGLE_LIST_ENTRY *ReadyLista;
_KPRCB *Prcb;
_KSHARED_READY_QUEUE *SharedReadyQueue;
v2 = *((_DWORD *)Thread + 29);
v3 = 0i64;
SharedReadyQueue = 0i64;
Prcb = 0i64;
if( (v2 & 8) == 0 )
{
KiAcquireThreadStateLock(Thread, &Prcb, &SharedReadyQueue);
v7 = v6;
KiComputeThreadAffinity((_KTHREAD *)Thread);
ReadyLista = ReadyList;
v8 = SharedReadyQueue;
v9 = KiRescheduleThreadAfterAffinityChange(
(_KTHREAD *)Thread,
(_GROUP_AFFINITY *)Thread + 36,
v7,
Prcb,
SharedReadyQueue,
ReadyLista);
KiReleaseThreadStateLock(v10, (__int64)Prcb, (volatile signed __int64 *)v8);
return(_KPRCB *)((unsigned __int64)Prcb & -(__int64)(v9 != 0));
}
return v3;
}Referenced by:
KeSetSelectedCpuSetsThread
KiUpdateThreadCpuSetAffinitiesFromDpcLevel