MiRemoveLockedPageCharge

INT64 __fastcall MiRemoveLockedPageCharge(INT64 a1){
  UINT64 v1; 
  bool v2; 
  __int16 v3; 
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  __int64 v7; 
  unsigned int v8; 
  _MMPTE *PteBase; 
  UNICODE_STRING *v10; 
  char v11; 
  int v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  int v15; 
  __int64 v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  INT64 v19; 
  UINT64 v20; 
  struct _KPRCB *CurrentPrcb; 
  __int64 v22; 
  __int64 v23; 
  unsigned __int64 v24; 
  unsigned __int64 v25; 
  unsigned __int64 v26; 
  struct _KPRCB *v27; 
  __int64 v28; 
  signed __int32 v29; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  v1 = *(unsigned __int16 *)(a1 + 32);
  if( !(_WORD)v1 )
    MiBadRefCount((_MMPFN *)a1, v1);
  v2 = (_WORD)v1 == 1;
  v3 = v1 - 1;
  *(_WORD *)(a1 + 32) = v3;
  if( v2 && (*(_QWORD *)(a1 + 40) & 0x2000000000000i64) != 0 )
    return 1i64;
  v5 = *(_QWORD *)(a1 + 40);
  if( (v5 & 0x1000000000i64) != 0 || (v5 & 0x2000000000000i64) != 0 )
    return 0i64;
  v6 = 1i64;
  v7 = *(_QWORD *)(a1 + 24) & 0x3FFFFFFFFFFFFFFFi64;
  if( !v3 )
  {
    v8 = 1;
    goto LABEL_16;
  }
  if( v3 == 1 )
  {
    if( v7 )
    {
LABEL_14:
      v8 = 0;
LABEL_16:
      PteBase = MmGetPteBase();
      v10 = (UNICODE_STRING *)(*(_QWORD *)(a1 + 8) | 0x8000000000000000ui64);
      if( v10 > (UNICODE_STRING *)((char *)PteBase + 0x3FFFFFFF78i64) || v10 < (UNICODE_STRING *)PteBase )
      {
        v11 = *(_BYTE *)(a1 + 35);
        if( (v11 & 0x20) != 0 )
        {
          *(_BYTE *)(a1 + 35) = v11 & 0xDF;
          return v8;
        }
      }
      LOBYTE(v12) = MI_PFN_IS_PROTO((UNICODE_STRING *)a1, v10, 0, *(PWCHAR *)(a1 + 24));
      if( v12 && (*(_DWORD *)(v14 + 16) & 0x400i64) != 0 )
      {
        v15 = 1;
      }
      else if( v13 <= v17 && v13 >= v18 && (*(_BYTE *)(v14 + 35) & 0x20) != 0 )
      {
        v15 = 1;
      }
      else if( v8 == 1 && (v16 & 0x4000000000000000i64) != 0 )
      {
        v15 = 1;
      }
      v19 = *(_QWORD *)(qword_140C4E388 + 8 * ((v5 >> 39) & 0x3FF));
      if( v15 == 1 )
      {
        v20 = 1i64;
        memset(&LockHandle, 0, sizeof(LockHandle));
        if( !*(_QWORD *)(v19 + 6264)
          || (KeAcquireInStackQueuedSpinLock((UINT64 *)(v19 + 6248), &LockHandle),
              v20 = MiRestockOverCommit(v19, 1ui64),
              KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle),
              __writecr8(LockHandle.OldIrql),
              v20) )
        {
          if( (ULONG_PTR *)v19 == &MiSystemPartition
            && (CurrentPrcb = KeGetCurrentPrcb(),
                _m_prefetchw((char *)CurrentPrcb + 33560),
                v22 = *((unsigned int *)CurrentPrcb + 8390),
                v20 + v22 <= 0x100) )
          {
            while( 1 )
            {
              v23 = _InterlockedCompareExchange((volatile signed __int32 *)CurrentPrcb + 8390, v22 + v20, v22);
              if( v23 == v22 )
                break;
              v22 = v23;
              if( v23 + v20 > 0x100 )
                goto LABEL_37;
            }
          }
          else
          {
LABEL_37:
            v24 = _InterlockedExchangeAdd64((volatile signed __int64 *)(v19 + 7464), -(__int64)v20);
            v25 = *(_QWORD *)(v19 + 6240);
            if( v24 >= v25 && v24 - v20 < v25 || (v26 = *(_QWORD *)(v19 + 6232), v24 - v20 < v26) && v24 >= v26 )
              MiSyncCommitSignals((_MI_PARTITION *)v19, 0i64);
          }
        }
      }
      if( (ULONG_PTR *)v19 != &MiSystemPartition )
        goto LABEL_53;
      v27 = KeGetCurrentPrcb();
      v28 = *((int *)v27 + 8391);
      if( (_DWORD)v28 == -1 )
        goto LABEL_53;
      if( (unsigned __int64)(v28 + 1) <= 0x100 )
      {
        do
        {
          v29 = _InterlockedCompareExchange((volatile signed __int32 *)v27 + 8391, v28 + 1, v28);
          v2 = (_DWORD)v28 == v29;
          LODWORD(v28) = v29;
          if( v2 )
            return v8;
        }
        while( v29 != -1 && (unsigned __int64)(v29 + 1i64) <= 0x100 );
      }
      if( (int)v28 > 192
        && (_DWORD)v28 != -1
        && (_DWORD)v28 == _InterlockedCompareExchange((volatile signed __int32 *)v27 + 8391, 192, v28) )
      {
        v6 = (int)v28 - 192 + 1i64;
      }
      if( v6 )
LABEL_53:
        _InterlockedExchangeAdd64((volatile signed __int64 *)(v19 + 7168), v6);
      return v8;
    }
  }
  else if( v3 != 2 || !v7 )
  {
    return 0i64;
  }
  if( (*(_BYTE *)(a1 + 34) & 8) != 0 )
    goto LABEL_14;
  return 0i64;
}

Referenced by:

MiCopyDataPageToImagePage
MiDeleteDirectMapFixupPfn
MiFinishHardFault
MiIdealClusterPage
MiMigratePfn
MiPurgeBadFileOnlyPages
MiSwapHardFaultPage
MiUnlockProtoPoolPage
MiWalkEntireImage