HalEnumerateProcessors
INT64 __fastcall HalEnumerateProcessors(UINT64 MaximumPhysicalProcessors){
unsigned int v1;
unsigned int v2;
unsigned int v3;
int v4;
int v5;
_DWORD *v6;
INT64 v7;
unsigned int MaximumRegisteredProcessorCount;
v1 = MaximumPhysicalProcessors;
v2 = 1;
v3 = 1;
v4 = ~(*((_DWORD *)KeGetCurrentPrcb() + 39) * *((_DWORD *)KeGetCurrentPrcb() + 38) - 1);
v5 = v4 & *(_DWORD *)(HalpInterruptProcessorState + 8);
if( (unsigned int)HalpInterruptProcessorCount > 1 )
{
v6 = (_DWORD *)(HalpInterruptProcessorState + 72);
do
{
if( v5 != (v4 & *v6) )
{
++v3;
v5 = v4 & *v6;
if( v3 > v1 )
break;
}
++v2;
v6 += 16;
}
while( v2 < (unsigned int)HalpInterruptProcessorCount );
}
if( HalpInterruptProcessorCap && HalpInterruptProcessorCap < v2 )
v2 = HalpInterruptProcessorCap;
if( (unsigned int)HalpInterruptModel() - 1 > 3 )
v2 = 1;
MaximumRegisteredProcessorCount = HalpQueryMaximumRegisteredProcessorCount(v7);
if( v2 >= MaximumRegisteredProcessorCount )
return MaximumRegisteredProcessorCount;
return v2;
}Referenced by:
HvlpSelectLpSet
KeStartAllProcessors