MmInitializeProcessor
NTSTATUS __stdcall MmInitializeProcessor(_KPRCB *Prcb){
_MMPTE *v2;
char *Pool;
void *v4;
__int64 v5;
__int64 v6;
unsigned __int64 v7;
if( Prcb->Number )
Prcb->PteBitCache = -1i64;
v2 = MiReservePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), 0x40ui64);
if( v2 )
{
Prcb->HyperPte = (void *)((__int64)(((_QWORD)v2 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16);
Prcb->SecondaryColorMask = *(&stru_140C4DB30 + 66);
Pool = (char *)MiAllocatePool(64i64, 0x30C8ui64, 0x20206D4Dui64);
v4 = Pool;
if( Pool )
{
*((_DWORD *)Pool + 3120) = 0;
*(_QWORD *)Pool = Pool + 32;
*((_QWORD *)Pool + 1) = Pool + 4152;
*((_QWORD *)Pool + 2) = Pool + 8248;
*((_DWORD *)Pool + 6) = 512;
v5 = Prcb->ParentNode->Affinity.Reserved[0];
v6 = qword_140C50AD0 + 4544 * v5;
Prcb->NodeColor = *(unsigned __int8 *)(v6 + 4212);
Prcb->NodeShiftedColor = *(_DWORD *)(v6 + 4208);
v7 = __rdtsc();
if( MiCreateUltraThreadContext(
(INT64)v4 + 12352,
((_DWORD)v5 << *(&stru_140C4DB30 + 156)) | (unsigned int)(v7 & (unsigned __int16)((1 << *(&stru_140C4DB30 + 157))
- 1)),
8i64) )
{
Prcb->MmInternal = v4;
return 1;
}
ExFreePoolWithTag(v4, 0);
}
MmDeleteProcessor(Prcb);
}
return 0;
}Referenced by:
KeStartAllProcessors
KiStartDynamicProcessor
MiInitNucleus