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