HalpMcaInitializePcrContext

INT64 __stdcall HalpMcaInitializePcrContext(){
  INT64 result; 
  INT64 v1; 
  __int64 v2; 
  KPCR *Pcr; 
  __int64 v4; 
  __int64 v5; 
  ULONG_PTR v6; 
  __int64 v7; 
  struct _PROCESSOR_NUMBER ProcNumber; 
  ProcNumber = 0;
  KeGetCurrentProcessorNumberEx(&ProcNumber);
  v2 = (unsigned int)result;
  if( !(_DWORD)result && !HalpMcaPcrContextData )
  {
    v6 = (unsigned int)(184 * HalpQueryMaximumRegisteredProcessorCount(v1));
    v7 = HalpMmAllocCtxAlloc(v6, v6);
    HalpMcaPcrContextData = v7;
    if( !v7 )
      KeBugCheckEx(0xACu, v6, 0i64, (ULONG_PTR)"minkernel\\hals\\lib\\whea\\mca.c", 0x217ui64);
    result = memset(v7, 0i64);
  }
  Pcr = KeGetPcr();
  if( !HalpHvWheaEnlightenedCpuManager )
  {
    if( !*((_QWORD *)Pcr + 27) )
    {
      v4 = HalpMcaPcrContextData + 184 * v2;
      *((_QWORD *)Pcr + 27) = v4;
      *(_QWORD *)(v4 + 176) = 0i64;
      *(_DWORD *)(v4 + 164) = v2;
    }
    result = (INT64)KeGetPcr();
    v5 = *(_QWORD *)(result + 216);
    if( !*(_BYTE *)(v5 + 152) )
    {
      KeInitializeDpc((PRKDPC)(v5 + 40), HalpCmciDeferredRoutine, *(PVOID *)(result + 216));
      LODWORD(result) = KeSetTargetProcessorDpcEx((_KDPC *)(v5 + 40), &ProcNumber);
      *(_BYTE *)(v5 + 152) = 1;
    }
  }
  return result;
}

Referenced by:

HalpWheaInitSystem