MiPreUnlockWorkingSetShared

CHAR __fastcall MiPreUnlockWorkingSetShared(INT64 a1, CHAR a2){
  CHAR result; 
  _ETHREAD *CurrentThread; 
  INT64 *v6; 
  WORK_QUEUE_TYPE v7; 
  PVOID v8; 
  INT64 v9; 
  INT64 *v10; 
  WORK_QUEUE_TYPE v11; 
  PVOID v12; 
  INT64 v13; 
  INT64 *v14; 
  unsigned __int64 v15; 
  INT64 v16; 
  INT64 *SharedVm; 
  WORK_QUEUE_TYPE v18; 
  PVOID v19; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  result = 0;
  memset(&LockHandle, 0, sizeof(LockHandle));
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  if( (*((_DWORD *)CurrentThread + 324) & 0x400000) == 0 )
  {
    if( (*(_BYTE *)(a1 + 187) & 8) != 0 )
    {
      LockHandle.LockQueue.Next = 0i64;
      LockHandle.LockQueue.Lock = (unsigned __int64 *volatile)(MiGetSharedVm(a1) + 8);
      KxAcquireQueuedSpinLock((PIO_WORKITEM)&LockHandle, (PIO_WORKITEM_ROUTINE)LockHandle.LockQueue.Lock, v11, v12);
      *(_BYTE *)(a1 + 187) &= ~8u;
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      _interlockedbittestandset((volatile signed __int32 *)CurrentThread + 324, 0x16u);
      if( !MiForcedTrim((_MMSUPPORT_INSTANCE *)a1) && (*(_BYTE *)(a1 + 184) & 0x40) != 0 )
      {
        v15 = *(_QWORD *)(a1 + 120);
        if( v15 > *(_QWORD *)(a1 + 152) )
        {
          LOBYTE(v13) = a2;
          if( (*(_DWORD *)(a1 + 4) & 0xF) != 0 )
            v16 = v15 - 1;
          else
            v16 = *(_QWORD *)(a1 + 152);
          MiReduceWs(a1, v13, v16, v14);
        }
      }
    }
    result = *(_BYTE *)(a1 + 187);
    if( (result & 4) != 0 )
    {
      SharedVm = MiGetSharedVm(a1);
      LockHandle.LockQueue.Next = 0i64;
      LockHandle.LockQueue.Lock = (unsigned __int64 *volatile)(SharedVm + 8);
      KxAcquireQueuedSpinLock((PIO_WORKITEM)&LockHandle, (PIO_WORKITEM_ROUTINE)(SharedVm + 8), v18, v19);
      *(_BYTE *)(a1 + 187) &= ~4u;
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      _interlockedbittestandset((volatile signed __int32 *)CurrentThread + 324, 0x16u);
      MiForceAgeWorkingSet(a1, a2);
      result = *(_BYTE *)(a1 + 187);
    }
    if( (result & 0x10) != 0 )
    {
      v6 = MiGetSharedVm(a1);
      LockHandle.LockQueue.Next = 0i64;
      LockHandle.LockQueue.Lock = (unsigned __int64 *volatile)(v6 + 8);
      KxAcquireQueuedSpinLock((PIO_WORKITEM)&LockHandle, (PIO_WORKITEM_ROUTINE)(v6 + 8), v7, v8);
      *(_BYTE *)(a1 + 187) &= ~0x10u;
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      _interlockedbittestandset((volatile signed __int32 *)CurrentThread + 324, 0x16u);
      LOBYTE(v9) = a2;
      result = MiReduceWs(a1, v9, *(_QWORD *)(a1 + 152), v10);
    }
    if( (*((_DWORD *)CurrentThread + 324) & 0x400000) != 0 )
      _interlockedbittestandreset((volatile signed __int32 *)CurrentThread + 324, 0x16u);
  }
  return result;
}

Referenced by:

MiDeletePagablePteRange
MiMoveDirtyBitsToPfns
MiTrimOrAgeWorkingSet
MiUnlockWorkingSetShared