HalpMcaInitializePcrContext

VOID __stdcall HalpMcaInitializePcrContext(){
  unsigned int CurrentProcessorNumber; 
  __int64 v1; 
  KPCR *Pcr; 
  __int64 v3; 
  KPCR *v4; 
  __int64 v5; 
  UINT64 v6; 
  UINT8 *v7; 
  _PROCESSOR_NUMBER ProcNumber; 

  ProcNumber = 0;
  CurrentProcessorNumber = KeGetCurrentProcessorNumberEx(&ProcNumber.Group);
  v1 = CurrentProcessorNumber;
  if( !CurrentProcessorNumber && !qword_140C50560 )
  {
    v6 = 184 * (unsigned int)HalpQueryMaximumRegisteredProcessorCount();
    v7 = HalpMmAllocCtxAlloc((_HALP_ALLOC_CONTEXT *)v6, v6);
    qword_140C50560 = (__int64)v7;
    if( !v7 )
      KeBugCheckEx(0xACu, (PVOID)v6, 0i64, "minkernel\\hals\\lib\\whea\\mca.c", (PVOID)0x217);
    memset(v7, 0i64, v6);
  }
  Pcr = KeGetPcr();
  if( !byte_140C4A110 )
  {
    if( !*(_QWORD *)&Pcr->HalReserved[6] )
    {
      v3 = qword_140C50560 + 184 * v1;
      *(_QWORD *)&Pcr->HalReserved[6] = v3;
      *(_QWORD *)(v3 + 176) = 0i64;
      *(_DWORD *)(v3 + 164) = v1;
    }
    v4 = KeGetPcr();
    v5 = *(_QWORD *)&v4->HalReserved[6];
    if( !*(_BYTE *)(v5 + 152) )
    {
      KeInitializeDpc((PRKDPC)(v5 + 40), HalpCmciDeferredRoutine, *(PVOID *)&v4->HalReserved[6]);
      KeSetTargetProcessorDpcEx((_KDPC *)(v5 + 40), &ProcNumber);
      *(_BYTE *)(v5 + 152) = 1;
    }
  }
}

Referenced by:

HalpWheaInitSystem