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