MiLockDownWorkingSet

VOID __stdcall MiLockDownWorkingSet(ULONG_PTR ProcessToInitialize, UINT64 Lock){
  int v2; 
  _MMSUPPORT_INSTANCE *v3; 
  _MMSUPPORT_SHARED *SharedVm; 
  UINT8 v5; 
  UINT8 v6; 
  _MMPTE *PxeSelfRef; 
  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;} v8; 
  _MMPFN *v9; 
  UINT64 SpinCount; 
  _KAPC_STATE ApcState; 

  v2 = Lock;
  v3 = (_MMSUPPORT_INSTANCE *)(*(_QWORD *)&ProcessToInitialize + 1664i64);
  memset(&ApcState, 0, sizeof(ApcState));
  KiStackAttachProcess(*(PVOID *)&ProcessToInitialize, 0i64, &ApcState);
  SharedVm = MiGetSharedVm(v3);
  v5 = ExAcquireSpinLockExclusive((INT64 *)&SharedVm->WorkingSetLock);
  SharedVm->GoodCitizenWaiting = 0;
  v6 = v5;
  PxeSelfRef = MmGetPxeSelfRef();
  v8.Long = (unsigned __int64)PxeSelfRef->u;
  MiPteInShadowRange((UINT64)PxeSelfRef);
  v9 = &MmGetPfnDb()[(v8.Long >> 12) & 0xFFFFFFFFFi64];
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)&v9->u2, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( v9->u2._bf_0 < 0 );
  }
  if( v2 == 1 )
    MiAddLockedPageCharge(v9, 1ui64);
  else
    MiRemoveLockedPageChargeAndDecRef(v9);
  _InterlockedAnd64(&v9->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  MiUnlockWorkingSetExclusive(v3, v6);
  KiUnstackDetachProcess(&ApcState, 0i64);
}

Referenced by:

MiCloneProcessAddressSpace