HalpBlkInitializeProcessorState

UINT64 __stdcall 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 = *(&CmpDummyThreadEvent + 1023);
  memset((VOID *)a2, 0i64, 0xE000u);
  memset((VOID *)result, 0i64, 0x5C0u);
  CurrentPrcb = KeGetCurrentPrcb();
  v9 = CurrentPrcb->CoresPerPhysicalProcessor * CurrentPrcb->LogicalProcessorsPerCore;
  *(_DWORD *)(a2 + 12) = a5;
  *(_DWORD *)(a2 + 8) = v5;
  *(_QWORD *)a2 = a2;
  *(_DWORD *)(a2 + 24) = a5 & -v9;
  *(_QWORD *)(a2 + 32) = qword_140C50770;
  *(_BYTE *)(a2 + 40) = byte_140C50778;
  *(_BYTE *)(a2 + 41) = *(&stru_140CF2E80 + 6617);
  *(_BYTE *)(a2 + 42) = byte_140C507D0;
  *(_BYTE *)(a2 + 43) = CurrentPrcb->CpuVendor;
  *(_WORD *)(result + 86) = CurrentPrcb->ProcessorState.SpecialRegisters.Gdtr.Limit;
  *(_QWORD *)(result + 88) = a2 + 49072;
  memmove(
    (VOID *)(a2 + 49072),
    CurrentPrcb->ProcessorState.SpecialRegisters.Gdtr.Base,
    CurrentPrcb->ProcessorState.SpecialRegisters.Gdtr.Limit + 1);
  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) = *(&CmpDummyThreadEvent + 488);
  *(_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