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