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