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