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