MiMarkKernelStack

VOID __stdcall MiMarkKernelStack(_MMPTE *PointerPte, _MMPTE *EndPte, _ETHREAD *StackOwner){
  union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v3; 
  _MMPFN *v5; 
  unsigned __int64 v6; 
  char v7; 
  UINT64 SpinCount; 
  UINT64 Long; 

  v3.Long = (unsigned __int64)PointerPte->u;
  MiPteInShadowRange((UINT64)PointerPte);
  Long = v3.Long;
  MiPteInShadowRange((UINT64)&Long);
  v5 = &MmGetPfnDb()[(v3.Long >> 12) & 0xFFFFFFFFFi64];
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)&v5->u2, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( v5->u2._bf_0 < 0 );
  }
  v5->u4._bf_0 = v5->u4._bf_0 & 0x8FFFFFFFFFFFFFFFui64 | 0x2000000000000000i64;
  v6 = v5->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 ^ (v5->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 ^ ((unsigned __int64)EndPte >> 3)) & 0xFFFFFFFFFFEi64;
  v5->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = v6;
  if( EndPte && (v6 & 1) == 0 )
    v5->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = v6 | 1;
  v7 = *((_BYTE *)&v5->u3 + 3);
  v5->OriginalPte.u.Long |= 0x3E0ui64;
  *((_BYTE *)&v5->u3 + 3) = v7 & 0xF8 | 5;
  _InterlockedAnd64(&v5->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
}

Referenced by:

MiAllocateKernelStackPages
MiMarkBootKernelStack