KiAddProcessorToGroupDatabase
VOID __stdcall KiAddProcessorToGroupDatabase(_KPRCB *Prcb, UINT64 DynamicProcessor){
_KNODE *ParentNode;
int v3;
__int64 *v5;
unsigned __int64 v6;
__int64 v7;
unsigned __int8 v8;
__int64 Number;
__int64 v10;
unsigned __int64 *p_PreferredMask;
__int64 v12;
bool v13;
ParentNode = Prcb->ParentNode;
v3 = DynamicProcessor;
v5 = &KiGroupBlock[2 * ParentNode->Affinity.Group];
v6 = *v5 + 1;
_BitScanReverse64((unsigned __int64 *)&v7, v6);
Prcb->GroupSetMember = v6;
v8 = ParentNode->AffinityFill[8];
Prcb->GroupIndex = v7;
Prcb->Group = v8;
*v5 |= v6;
if( KeForceGroupAwareness )
{
v13 = Prcb->Number <= 0xFF;
Prcb->LegacyNumber = Prcb->Number;
if( !v13 )
Prcb->LegacyNumber = -1;
}
else if( Prcb->Group )
{
Prcb->LegacyNumber = (unsigned int)v7 % (unsigned int)KeQueryActiveProcessorCountEx(0);
}
else
{
Prcb->LegacyNumber = v7;
}
Number = Prcb->Number;
v10 = (unsigned int)v7 + (Prcb->Group << 6);
KiProcessorIndexToNumberMappingTable[Number] = v10;
KiProcessorNumberToIndexMappingTable[v10] = Number;
p_PreferredMask = &ParentNode->HeteroSets[0].PreferredMask;
v12 = 5i64;
do
{
if( !v3 )
{
*(p_PreferredMask - 1) |= v6;
*p_PreferredMask |= v6;
}
p_PreferredMask[1] |= v6;
p_PreferredMask += 3;
--v12;
}
while( v12 );
}Referenced by:
KiConfigureInitialNodes
KxInitializeProcessorState