MiUnlockWsle

VOID __stdcall MiUnlockWsle(_MMSUPPORT_INSTANCE *WsInfo, UINT64 a2, INT64 a3){
  wchar_t *v3; 
  int v7; 
  __int64 v8; 
  _MI_PARTITION *v9; 
  unsigned int EffectivePagePriorityThread; 
  UINT8 v11; 
  UINT8 v12; 
  _UNICODE_STRING *v13; 
  UINT8 v14; 
  wchar_t *v15; 
  int v16; 
  UINT64 v17; 
  unsigned int PfnDb; 
  unsigned __int64 v19; 
  UINT64 v20; 

  LOBYTE(v7) = MI_PFN_IS_PROTO((_UNICODE_STRING *)a3, (_UNICODE_STRING *)a2, a3, v3);
  if( v7 && (*(_DWORD *)(v8 + 16) & 0x400i64) != 0 && (WsInfo->Flags._bf_0 & 7) == 0 )
  {
    v9 = *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8 * ((*(_QWORD *)(v8 + 40) >> 39) & 0x3FFi64));
    MiReturnCommit(v9, 1ui64);
    _InterlockedDecrement64((volatile signed __int64 *)&v9->Vp.ProcessLockedFilePages);
  }
  MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((a2 >> 9) & 0x7FFFFFFFF8i64));
  EffectivePagePriorityThread = MiGetEffectivePagePriorityThread((_ETHREAD *)KeGetCurrentThread());
  v12 = v11;
  if( EffectivePagePriorityThread < 5 )
    v12 = 7;
  MiSetVaAgeList(WsInfo, a2, 1ui64, v12);
  if( a2 < 0xFFFF800000000000ui64 )
  {
    LOBYTE(v16) = MI_PFN_IS_PROTO((_UNICODE_STRING *)a3, v13, v14, v15);
    PfnDb = (unsigned int)MmGetPfnDb();
    if( v16 )
      MiUnlockPageTableCharges(PfnDb + 48 * *(_DWORD *)(a3 + 40), 1u, v17);
    LODWORD(v19) = MI_READ_PTE_LOCK_FREE((INT64)MmGetPdeBase() + ((a2 >> 18) & 0x3FFFFFF8));
    MiUnlockPageTableCharges(PfnDb + 48 * (v19 >> 12), 2u, v20);
  }
}

Referenced by:

MiDeleteVa
MiTerminateWsle
MiTerminateWsleCluster
MiUnlockVa
MmUnmapViewInSystemCache