HalpBlkInitializeProcessorState
UINT64 __fastcall HalpBlkInitializeProcessorState(INT64 result, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
int v5;
struct _KPRCB *CurrentPrcb;
int v9;
unsigned __int64 v10;
unsigned __int64 v11;
UINT64 v12;
v5 = HalpBlkNumberProcessors;
memset(a2, 0i64);
memset(result, 0i64);
CurrentPrcb = KeGetCurrentPrcb();
v9 = *((_DWORD *)CurrentPrcb + 38) * *((_DWORD *)CurrentPrcb + 39);
*(_DWORD *)(a2 + 12) = a5;
*(_DWORD *)(a2 + 8) = v5;
*(_QWORD *)a2 = a2;
*(_DWORD *)(a2 + 24) = a5 & -v9;
*(_QWORD *)(a2 + 32) = HalpLocalApic;
*(_BYTE *)(a2 + 40) = HalpApicUsingMsrs;
*(_BYTE *)(a2 + 41) = HalpApicX2Mode;
*(_BYTE *)(a2 + 42) = HalpApicClusterModeEnabled;
*(_BYTE *)(a2 + 43) = *((_BYTE *)CurrentPrcb + 141);
*(_WORD *)(result + 86) = *((_WORD *)CurrentPrcb + 171);
*(_QWORD *)(result + 88) = a2 + 49072;
memmove((UINT8 *)(a2 + 49072), *((UINT8 **)CurrentPrcb + 43), *((unsigned __int16 *)CurrentPrcb + 171) + 1i64);
HalpBlkInitializeIdt(result + 96, a2 + 36864);
*(_QWORD *)(a2 + 41072) = a2;
*(_WORD *)(a2 + 49138) = a2 - 24576;
*(_BYTE *)(a2 + 49140) = (unsigned int)(a2 + 40960) >> 16;
*(_BYTE *)(a2 + 49143) = (unsigned int)(a2 + 40960) >> 24;
*(_DWORD *)(a2 + 49144) = (unsigned __int64)(a2 + 40960) >> 32;
*(_QWORD *)(a2 + 41004) = a2 + 28672;
*(_QWORD *)(a2 + 40996) = a2 + 20480;
*(_QWORD *)(a2 + 41012) = a2 + 36864;
*(_QWORD *)(a2 + 40964) = a2 + 12288;
*(_QWORD *)(a2 + 96) = a2 + 28672;
*(_QWORD *)(a2 + 80) = a2 + 12288;
*(_QWORD *)(a2 + 88) = a2 + 20480;
*(_QWORD *)(a2 + 104) = a2 + 36864;
*(_QWORD *)(a2 + 48) = a2 + 36864;
*(_QWORD *)(a2 + 56) = a2 + 36864;
*(_QWORD *)(a2 + 72) = a2 + 49072;
*(_QWORD *)(a2 + 64) = a2 + 40960;
*(_DWORD *)(result + 308) = 0;
*(_QWORD *)(result + 488) = HalpBlkProcessorStartup;
*(_QWORD *)(result + 392) = a2 + 12280;
*(_QWORD *)(result + 368) = a2;
*(_DWORD *)(result + 296) = 2818064;
*(_DWORD *)(result + 300) = 5439531;
*(_DWORD *)(result + 304) = 1572907;
v10 = __readcr0();
*(_QWORD *)result = v10;
*(_QWORD *)(result + 16) = HalpBlkRootPageTablePa;
*(_WORD *)(result + 112) = 64;
*(_BYTE *)(a2 + 49141) = -119;
v11 = __readcr4();
v12 = v11 & 0xFFFFFFFFFF7FFFFFui64;
*(_QWORD *)(result + 24) = v12;
*(_QWORD *)(a2 + 2216) = 0i64;
return v12;
}Referenced by:
HalpBlkStartBlockedProcessor