KeUpdateThreadCpuSets

unsigned __int8 __fastcall KeUpdateThreadCpuSets(__int64 a1){
  unsigned __int8 CurrentIrql; 
  struct _KPRCB *CurrentPrcb; 
  unsigned __int8 result; 
  ULONG_PTR v4; 
  bool v5; 
  __int64 v6; 
  __int64 v7; 
  UINT64 SpinCount; 
  __int64 v9; 
  v9 = 0i64;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  KiUpdateThreadCpuSetAffinitiesFromDpcLevel(a1, (__int64)&v9);
  CurrentPrcb = KeGetCurrentPrcb();
  result = (unsigned __int8)KiReadyDeferredReadyList(CurrentPrcb, &v9);
  if( CurrentIrql >= 2u )
  {
    if( *((_QWORD *)CurrentPrcb + 2) )
    {
      result = *((_BYTE *)CurrentPrcb + 12586);
      if( !result )
        return KiRequestSoftwareInterrupt(CurrentPrcb, 2);
    }
  }
  else
  {
    v4 = *((_QWORD *)CurrentPrcb + 1);
    if( *((_QWORD *)CurrentPrcb + 2) )
    {
      KiAbProcessContextSwitch(*((_KTHREAD **)CurrentPrcb + 1), 0i64);
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)CurrentPrcb + 12, 0i64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( *((_QWORD *)CurrentPrcb + 6) );
      }
      v6 = *((_QWORD *)CurrentPrcb + 2);
      *((_QWORD *)CurrentPrcb + 2) = 0i64;
      _disable();
      KiEndThreadCycleAccumulation(CurrentPrcb, (_KTHREAD *)v4, 0i64);
      _enable();
      *((_QWORD *)CurrentPrcb + 1) = v6;
      if( *(_BYTE *)(v6 + 388) == 1 )
        *(_DWORD *)(v6 + 132) = *(_DWORD *)(v6 + 132) - *(_DWORD *)(v6 + 436) + KUSER_SHARED_DATA.TickCount.LowPart;
      *(_BYTE *)(v6 + 388) = 2;
      *(_BYTE *)(v4 + 643) = 32;
      *(_BYTE *)(v4 + 390) = CurrentIrql;
      KiQueueReadyThread((__int64)CurrentPrcb, v4, v7);
      v5 = !KiSwapContext((PKTHREAD)v4, (PKTHREAD)v6);
    }
    else
    {
      v5 = (*(_DWORD *)(v4 + 116) & 0x40) == 0;
    }
    if( !v5 )
    {
      __writecr8(1ui64);
      *(_DWORD *)(v4 + 116) &= ~0x40u;
      KiDeliverApc(0, 0i64, 0i64);
    }
    result = CurrentIrql;
    __writecr8(CurrentIrql);
  }
  return result;
}

Referenced by:

NtSetInformationThread