MiPreUnlockWorkingSetShared

VOID __stdcall MiPreUnlockWorkingSetShared(_MMSUPPORT_INSTANCE *Vm, UINT8 a2){
  _ETHREAD *CurrentThread; 
  __int8 bf_0; 
  _MMSUPPORT_SHARED *v6; 
  __int64 v7; 
  unsigned __int64 WorkingSetLeafSize; 
  unsigned __int64 MaximumWorkingSetSize; 
  _MMSUPPORT_SHARED *SharedVm; 
  _KLOCK_QUEUE_HANDLE LockQueue; 

  memset(&LockQueue, 0, sizeof(LockQueue));
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  if( (CurrentThread->CrossThreadFlags & 0x400000) == 0 )
  {
    if( (Vm->Flags._bf_0 & 8) != 0 )
    {
      LockQueue.LockQueue.Next = 0i64;
      LockQueue.LockQueue.Lock = &MiGetSharedVm(Vm)->WorkingSetCoreLock;
      KxAcquireQueuedSpinLock(&LockQueue.LockQueue, LockQueue.LockQueue.Lock);
      Vm->Flags._bf_0 &= ~8u;
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
      _interlockedbittestandset((volatile signed __int32 *)&CurrentThread->1296, 0x16u);
      LODWORD(v7) = MiForcedTrim(Vm);
      if( !v7 && (Vm->Flags._bf_0 & 0x40) != 0 )
      {
        WorkingSetLeafSize = Vm->WorkingSetLeafSize;
        if( WorkingSetLeafSize > Vm->MaximumWorkingSetSize )
        {
          if( (Vm->PageFaultCount & 0xF) != 0 )
            MaximumWorkingSetSize = WorkingSetLeafSize - 1;
          else
            MaximumWorkingSetSize = Vm->MaximumWorkingSetSize;
          MiReduceWs(Vm, a2, MaximumWorkingSetSize);
        }
      }
    }
    bf_0 = Vm->Flags._bf_0;
    if( (bf_0 & 4) != 0 )
    {
      SharedVm = MiGetSharedVm(Vm);
      LockQueue.LockQueue.Next = 0i64;
      LockQueue.LockQueue.Lock = &SharedVm->WorkingSetCoreLock;
      KxAcquireQueuedSpinLock(&LockQueue.LockQueue, &SharedVm->WorkingSetCoreLock);
      Vm->Flags._bf_0 &= ~4u;
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
      _interlockedbittestandset((volatile signed __int32 *)&CurrentThread->1296, 0x16u);
      MiForceAgeWorkingSet(Vm, a2);
      bf_0 = Vm->Flags._bf_0;
    }
    if( (bf_0 & 0x10) != 0 )
    {
      v6 = MiGetSharedVm(Vm);
      LockQueue.LockQueue.Next = 0i64;
      LockQueue.LockQueue.Lock = &v6->WorkingSetCoreLock;
      KxAcquireQueuedSpinLock(&LockQueue.LockQueue, &v6->WorkingSetCoreLock);
      Vm->Flags._bf_0 &= ~0x10u;
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
      _interlockedbittestandset((volatile signed __int32 *)&CurrentThread->1296, 0x16u);
      MiReduceWs(Vm, a2, Vm->MaximumWorkingSetSize);
    }
    if( (CurrentThread->CrossThreadFlags & 0x400000) != 0 )
      _interlockedbittestandreset((volatile signed __int32 *)&CurrentThread->1296, 0x16u);
  }
}

Referenced by:

MiDeletePagablePteRange
MiMoveDirtyBitsToPfns
MiTrimOrAgeWorkingSet
MiUnlockWorkingSetShared