MiInitializeKernelStacks
VOID __stdcall MiInitializeKernelStacks(){
_ETHREAD *CurrentThread;
unsigned __int64 v1;
_MMPTE *PteBase;
_MMPTE *v3;
_MMPTE *v4;
VOID *PagesPerBit;
_RTL_BITMAP *v6;
int v7;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v1 = (unsigned __int64)KeGetPcr()->Prcb.DpcStack + 80;
PteBase = MmGetPteBase();
v3 = (_MMPTE *)((char *)PteBase + (((v1 - (unsigned int)KeKernelStackSize) >> 9) & 0x7FFFFFFFF8i64));
MiMarkBootKernelStack(v3, (_MMPTE *)((char *)PteBase + ((v1 >> 9) & 0x7FFFFFFFF8i64)));
v4 = (_MMPTE *)((char *)PteBase + (((unsigned __int64)CurrentThread->Tcb.StackLimit >> 9) & 0x7FFFFFFFF8i64));
MiMarkBootKernelStack(
v4,
(_MMPTE *)((char *)PteBase + (((unsigned __int64)CurrentThread->Tcb.StackBase >> 9) & 0x7FFFFFFFF8i64)));
MiMarkBootGuardPage((UINT64)&v4[-1]);
MiMarkBootGuardPage((UINT64)&v3[-1]);
PagesPerBit = (VOID *)*(&stru_140C4DB30 + 939);
*(&stru_140C4DB30 + 3532) = (unsigned int)KeKernelStackSize >> 12;
v6 = (_RTL_BITMAP *)MiSystemVaToDynamicBitmap(14i64);
if( MiBuildDynamicRegion(v6, PagesPerBit, 0x10000000000ui64) )
{
MiInitializePteInfo(
(_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 3432),
(VOID *)0xE,
0i64,
0xBui64,
(UINT64)PagesPerBit);
if( v7 )
{
*(&stru_140C4DB30 + 864) |= 1u;
*(&stru_140C4DB30 + 439) = *(&stru_140C4DB30 + 416);
}
}
}Referenced by:
MiInitNucleus