MiMarkKernelStack

__int64 __fastcall MiMarkKernelStack(unsigned __int64 *a1, unsigned __int64 a2){
  unsigned __int64 v2; 
  char *v4; 
  unsigned __int64 v5; 
  char v6; 
  __int64 result; 
  UINT64 SpinCount; 
  UINT64 v9; 
  v2 = *a1;
  MiPteInShadowRange((UINT64)a1);
  v9 = v2;
  MiPteInShadowRange((UINT64)&v9);
  v4 = (char *)MmGetPfnDb() + 48 * ((v2 >> 12) & 0xFFFFFFFFFi64);
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)v4 + 6, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *((__int64 *)v4 + 3) < 0 );
  }
  *((_QWORD *)v4 + 5) = *((_QWORD *)v4 + 5) & 0x8FFFFFFFFFFFFFFFui64 | 0x2000000000000000i64;
  v5 = *(_QWORD *)v4 ^ (*(_QWORD *)v4 ^ (a2 >> 3)) & 0xFFFFFFFFFFEi64;
  *(_QWORD *)v4 = v5;
  if( a2 && (v5 & 1) == 0 )
    *(_QWORD *)v4 = v5 | 1;
  v6 = v4[35];
  *((_QWORD *)v4 + 2) |= 0x3E0ui64;
  v4[35] = v6 & 0xF8 | 5;
  result = 0x7FFFFFFFFFFFFFFFi64;
  _InterlockedAnd64((volatile signed __int64 *)v4 + 3, 0x7FFFFFFFFFFFFFFFui64);
  return result;
}

Referenced by:

MiAllocateKernelStackPages
MiMarkBootKernelStack