HalpInitializeMce
INT64 __fastcall HalpInitializeMce(INT64 a1, INT64 a2){
__int64 v3;
__int64 v4;
__int64 v5;
__int64 v6;
INT64 v8;
INT64 v9;
WCHAR v10;
__int64 v11;
__int64 v12;
__int64 v13;
__int64 v14;
unsigned int v15;
unsigned int ActiveProcessorCount;
int *v17;
unsigned int v18;
struct _GROUP_AFFINITY *v19;
__int64 i;
int v21[8];
INT64 v22;
struct _GROUP_AFFINITY Affinity;
__int128 v24;
v22 = 0i64;
Affinity = 0i64;
v24 = 0i64;
if( (_DWORD)a1 )
{
if( (_DWORD)a1 == 1 )
{
HalpMceErrorSourceId = *(_DWORD *)(a2 + 28);
HalpMceErrorSource = (PVOID)a2;
HalpMceInit(a2);
if( HalpMcaExtendedLoggingSupported )
HalpMcaExtendedLogInitialize(v9, v8, v10);
if( !PshedIsSystemWheaEnabled() )
HalpHandlePreviousMcaErrors(HalpMcaBanksValidOnBoot != 0);
_InterlockedOr(v21, 0);
if( (unsigned __int8)PshedInitAvailable(v12, v11, v13, v14, v22) )
{
PshedInitGlobal();
v15 = 0;
ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
if( ActiveProcessorCount )
{
v17 = KiProcessorIndexToNumberMappingTable;
do
{
v18 = *v17;
Affinity.Reserved[1] = 0;
Affinity.Reserved[2] = 0;
*(_DWORD *)&Affinity.Group = (unsigned __int16)(v18 >> 6);
Affinity.Mask = 1i64 << (v18 & 0x3F);
if( v15 )
v19 = 0i64;
else
v19 = (struct _GROUP_AFFINITY *)&v24;
KeSetSystemGroupAffinityThread(&Affinity, v19);
for( i = *((_QWORD *)KeGetPcr() + 27); i; i = *(_QWORD *)(i + 176) )
PshedInitProc(*(unsigned int *)(i + 164));
++v15;
++v17;
}
while( v15 < ActiveProcessorCount );
}
}
HalpMcaWheaReady = 1;
}
else
{
LODWORD(v22) = *((_DWORD *)KeGetPcr() + 105);
HalpMceInitProcessor(a2, v22);
HalpHandlePreviousMcaErrorsOnProcessor(0i64, 0i64, v22);
}
}
else
{
HalpMceErrorSourceId = *(_DWORD *)(a2 + 28);
HalpMceErrorSource = (PVOID)a2;
HalpMcaSetFeatureFlags();
HalpInitializeGhesRecovery(v4, v3, v5, v6, v22);
HalpMceInitializeRecovery();
HalpMceInit(a2);
}
return 0i64;
}Referenced by:
HalpInitializeErrSrc