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