MmInitializeProcessor
__int64 __fastcall MmInitializeProcessor(__int64 a1){
INT64 v2;
_QWORD *v3;
void *v4;
__int64 v5;
__int64 v6;
unsigned __int64 v7;
if( *(_DWORD *)(a1 + 36) )
*(_QWORD *)(a1 + 34224) = -1i64;
v2 = MiReservePtes((INT64)&qword_140C4EC80, 0x40ui64);
if( v2 )
{
*(_QWORD *)(a1 + 33280) = ((v2 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
*(_DWORD *)(a1 + 32540) = dword_140C4DC38;
LODWORD(v3) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
v4 = v3;
if( v3 )
{
*((_DWORD *)v3 + 3120) = 0;
*v3 = v3 + 4;
v3[1] = v3 + 519;
v3[2] = v3 + 1031;
*((_DWORD *)v3 + 6) = 512;
v5 = *(unsigned __int16 *)(*(_QWORD *)(a1 + 192) + 146i64);
v6 = qword_140C50AD0 + 4544 * v5;
*(_DWORD *)(a1 + 32532) = *(unsigned __int8 *)(v6 + 4212);
*(_DWORD *)(a1 + 32536) = *(_DWORD *)(v6 + 4208);
v7 = __rdtsc();
if( (unsigned int)MiCreateUltraThreadContext(
(INT64)v4 + 12352,
((_DWORD)v5 << byte_140C4DBCC) | (unsigned int)(v7 & (unsigned __int16)((1 << byte_140C4DBCD)
- 1)),
8i64) )
{
*(_QWORD *)(a1 + 32760) = v4;
return 1i64;
}
ExFreePoolWithTag(v4, 0);
}
MmDeleteProcessor(a1);
}
return 0i64;
}Referenced by:
KeStartAllProcessors
KiStartDynamicProcessor
MiInitNucleus