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