KiUpdateNodeAffinitizedFlag

VOID __stdcall KiUpdateNodeAffinitizedFlag(_ETHREAD *Thread){
  unsigned __int64 v1; 
  __int64 v3; 
  int v4; 
  unsigned __int64 v5; 
  __int64 v6; 
  v1 = *((_QWORD *)Thread + 72);
  v3 = *((unsigned __int16 *)Thread + 292);
  if( v1 == KeActiveProcessors.Bitmap[v3] )
  {
LABEL_2:
    v4 = 1;
  }
  else if( (unsigned __int16)KeNumberNodes <= 1u )
  {
    v4 = 0;
  }
  else
  {
    v4 = 0;
    while( 1 )
    {
      _BitScanReverse64(&v5, v1);
      v6 = *(_QWORD *)(*((_QWORD *)*(&KiProcessorBlock
                                   + (unsigned int)KiProcessorNumberToIndexMappingTable[(unsigned int)(((_DWORD)v3 << 6) + v5)])
                       + 24)
                     + 136i64);
      if( (v1 & v6) != v6 )
        break;
      v1 &= ~v6;
      if( !v1 )
        goto LABEL_2;
    }
  }
  if( v4 == ((*((unsigned __int8 *)Thread + 2) >> 3) & 1) )
    _InterlockedXor((volatile signed __int32 *)Thread, 0x80000u);
}

Referenced by:

KeStartThread
KiComputeThreadAffinity
KiSetAffinityThread
KiSetSystemAffinityThread