MiAttachSession

VOID __stdcall MiAttachSession(_MM_SESSION_SPACE *SessionGlobal){
  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;} v2; 
  _MMPTE *v3; 
  int v4; 
  INT64 v5; 
  INT64 v6; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C4DB30 + 522, &LockHandle);
  KeGetCurrentThread()->ApcState.Process->Session = SessionGlobal;
  v2.Long = *(_QWORD *)((unsigned __int64)SessionGlobal + 816);
  v3 = &MmGetPml4eBase()[(qword_140C4DB20 >> 39) & 0x1FF];
  LOBYTE(v4) = MiPteInShadowRange((UINT64)v3);
  if( v4 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v2.Long & 1) != 0 )
    v2.Long |= 0x8000000000000000ui64;
  v3->u.Long = v2.Long;
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  if( MiCompareTbFlushTimeStamp(
         *(unsigned int *)(*(_QWORD *)(*(&stru_140C4DB30 + 267) + 8i64 * *((unsigned __int16 *)SessionGlobal + 215))
                         + 6872i64),
         0xFFFFFFFFui64,
         v5,
         v6,
         (UINT64)LockHandle.LockQueue.Next) )
  {
    KeFlushTb(FlushUser, FlushSubsetProcessors);
  }
}

Referenced by:

MiTrimOrAgeWorkingSet