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