MiUnlockWsle

VOID __fastcall MiUnlockWsle(INT64 a1, UINT64 a2, INT64 a3){
  WCHAR *v3; 
  int v7; 
  __int64 v8; 
  __int64 v9; 
  char v10; 
  INT64 v11; 
  UINT8 v12; 
  UINT8 v13; 
  unsigned int v14; 
  UNICODE_STRING *v15; 
  UINT8 v16; 
  WCHAR *v17; 
  int v18; 
  UINT64 v19; 
  _MMPFN *PfnDb; 
  unsigned __int64 v21; 
  UINT64 v22; 
  LOBYTE(v7) = MI_PFN_IS_PROTO((UNICODE_STRING *)a3, (UNICODE_STRING *)a2, a3, v3);
  if( v7 && (*(_DWORD *)(v8 + 16) & 0x400i64) != 0 && (*(_BYTE *)(a1 + 184) & 7) == 0 )
  {
    v9 = *(_QWORD *)(qword_140C4E388 + 8 * ((*(_QWORD *)(v8 + 40) >> 39) & 0x3FFi64));
    MiReturnCommit((_MI_PARTITION *)v9, 1ui64);
    _InterlockedDecrement64((volatile signed __int64 *)(v9 + 7616));
  }
  v10 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((a2 >> 9) & 0x7FFFFFFFF8i64));
  MiGetEffectivePagePriorityThread((_ETHREAD *)KeGetCurrentThread(), (v10 & 0x20) == 0, v11);
  v13 = v12;
  if( v14 < 5 )
    v13 = 7;
  MiSetVaAgeList(a1, a2, (UINT8 *)1, v13);
  if( a2 < 0xFFFF800000000000ui64 )
  {
    LOBYTE(v18) = MI_PFN_IS_PROTO((UNICODE_STRING *)a3, v15, v16, v17);
    PfnDb = MmGetPfnDb();
    if( v18 )
      MiUnlockPageTableCharges((_MMPFN *)((char *)PfnDb + 48 * (*(_QWORD *)(a3 + 40) & 0xFFFFFFFFFi64)), 1u, v19);
    v21 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPdeBase() + ((a2 >> 18) & 0x3FFFFFF8));
    MiUnlockPageTableCharges((_MMPFN *)((char *)PfnDb + 48 * ((v21 >> 12) & 0xFFFFFFFFFi64)), 2u, v22);
  }
}

Referenced by:

MiDeleteVa
MiTerminateWsle
MiTerminateWsleCluster
MiUnlockVa
MmUnmapViewInSystemCache