HalpMceInit
VOID __stdcall HalpMceInit(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
unsigned int v5;
unsigned int ActiveProcessorCount;
int *v7;
unsigned int v8;
_GROUP_AFFINITY *p_PreviousAffinity;
__int64 i;
_GROUP_AFFINITY Affinity;
_GROUP_AFFINITY PreviousAffinity;
Affinity = 0i64;
PreviousAffinity = 0i64;
if( (dword_140C4A10C & 4) == 0 || !*(_BYTE *)(a1 + 42) )
HalpMcaEnabled = 0;
if( !HalpMcaEnabled && (dword_140C4A10C & 8) == 0 )
HalpMceEnabled = 0;
v5 = 0;
ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
if( ActiveProcessorCount )
{
v7 = KiProcessorIndexToNumberMappingTable;
do
{
v8 = *v7;
Affinity.Reserved[1] = 0;
Affinity.Reserved[2] = 0;
*(_DWORD *)&Affinity.Group = (unsigned __int16)(v8 >> 6);
Affinity.Mask = 1i64 << (v8 & 0x3F);
if( v5 )
p_PreviousAffinity = 0i64;
else
p_PreviousAffinity = &PreviousAffinity;
KeSetSystemGroupAffinityThread(&Affinity, p_PreviousAffinity);
HalpHvInitMcaPcrContext();
for( i = *(_QWORD *)&KeGetPcr()->HalReserved[6]; i; i = *(_QWORD *)(i + 176) )
HalpMceInitProcessor(a1, *(_QWORD *)(i + 164));
++v5;
++v7;
}
while( v5 < ActiveProcessorCount );
}
KeRevertToUserGroupAffinityThread(&PreviousAffinity);
if( byte_140C4A110 )
{
if( HalpMceEnabled )
{
HalpHvInitMcaStatusMsrCache();
HalpHvSetMachineCheckHandlerState();
}
}
}Referenced by:
HalpInitializeMce