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