MiReleaseWalkLocks
VOID __stdcall MiReleaseWalkLocks(INT64 a1){
UINT64 v1;
_MMSUPPORT_INSTANCE *v3;
v1 = *(_QWORD *)(a1 + 48);
v3 = *(_MMSUPPORT_INSTANCE **)(a1 + 24);
if( v1 )
{
MiUnlockPageTableInternal(*(_QWORD *)(a1 + 24), v1);
*(_QWORD *)(a1 + 48) = 0i64;
}
if( (*(_WORD *)a1 & 4) != 0 )
{
LOBYTE(v1) = *(_BYTE *)(a1 + 6);
MiUnlockWorkingSetShared(v3, v1);
}
else
{
if( (*(_WORD *)a1 & 0x400) != 0 )
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)((char *)&stru_140C4DB30 + 1324));
MiUnlockWorkingSetExclusive(v3, *(_BYTE *)(a1 + 6));
}
*(_BYTE *)(a1 + 2) |= 1u;
}Referenced by:
MiCombineWorkingSetTail
MiDeleteEmptyPageTableTail
MiGetNextPageTablePte
MiQueryEPTAccessedState
MiYieldPageTableWalk