HalpInitializeMce
__int64 __fastcall HalpInitializeMce(int a1, INT64 a2, INT64 a3, INT64 a4){
UINT8 v5;
_HHIVE *v6;
_CELL_DATA *v7;
UINT64 v8;
INT64 v9;
INT64 v10;
INT64 v11;
__int64 v13;
__int64 v14;
__int64 v15;
__int64 v16;
unsigned int v17;
unsigned int ActiveProcessorCount;
int *v19;
unsigned int v20;
_GROUP_AFFINITY *v21;
__int64 i;
int v23[8];
INT64 v24;
_GROUP_AFFINITY Affinity;
__int128 v26;
v24 = 0i64;
Affinity = 0i64;
v26 = 0i64;
if( a1 )
{
if( a1 == 1 )
{
dword_140C5056C = *(_DWORD *)(a2 + 28);
qword_140C50540 = a2;
HalpMceInit(a2, a2, a3, a4);
if( *(&stru_140CF2E80 + 7434) )
HalpMcaExtendedLogInitialize();
if( !PshedIsSystemWheaEnabled() )
HalpHandlePreviousMcaErrors(byte_140C50520 != 0);
_InterlockedOr(v23, 0);
if( (unsigned __int8)PshedInitAvailable(v14, v13, v15, v16, v24) )
{
PshedInitGlobal();
v17 = 0;
ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
if( ActiveProcessorCount )
{
v19 = KiProcessorIndexToNumberMappingTable;
do
{
v20 = *v19;
Affinity.Reserved[1] = 0;
Affinity.Reserved[2] = 0;
*(_DWORD *)&Affinity.Group = (unsigned __int16)(v20 >> 6);
Affinity.Mask = 1i64 << (v20 & 0x3F);
if( v17 )
v21 = 0i64;
else
v21 = (_GROUP_AFFINITY *)&v26;
KeSetSystemGroupAffinityThread(&Affinity, v21);
for( i = *(_QWORD *)&KeGetPcr()->HalReserved[6]; i; i = *(_QWORD *)(i + 176) )
PshedInitProc(*(unsigned int *)(i + 164));
++v17;
++v19;
}
while( v17 < ActiveProcessorCount );
}
}
byte_140C50550 = 1;
}
else
{
LODWORD(v24) = KeGetPcr()->Prcb.Number;
HalpMceInitProcessor(a2, v24);
HalpHandlePreviousMcaErrorsOnProcessor(0i64, 0i64, v24);
}
}
else
{
dword_140C5056C = *(_DWORD *)(a2 + 28);
qword_140C50540 = a2;
HalpMcaSetFeatureFlags();
HalpInitializeGhesRecovery(
v6,
v5,
v7,
v8,
v24,
(_RTL_BITMAP *)Affinity.Mask,
*(UINT64 **)&Affinity.Group,
(UINT64 *)v26);
HalpMceInitializeRecovery();
HalpMceInit(a2, v9, v10, v11);
}
return 0i64;
}Referenced by:
HalpInitializeErrSrc