MiReacquireWalkLocks
NTSTATUS __stdcall MiReacquireWalkLocks(INT64 a1, _MMPTE *a2, INT64 a3){
INT64 v3;
int v4;
_MMPTE *v7;
UINT64 v8;
NTSTATUS result;
INT64 *v10;
v3 = *(_QWORD *)(a1 + 24);
v4 = a3;
if( !(_DWORD)a3 )
MiLockWorkingSetShared();
v7 = MiLockLowestValidPageTable(
v3,
(INT64 *)((__int64)(((_QWORD)a2 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16),
&v10);
if( v7 == a2 )
{
*(_BYTE *)(a1 + 2) &= ~1u;
result = 1;
*(_QWORD *)(a1 + 48) = a2;
}
else
{
MiUnlockPageTableInternal(v3, (UINT64)v7);
if( !v4 )
{
LOBYTE(v8) = *(_BYTE *)(a1 + 6);
MiUnlockWorkingSetShared(*(_MMSUPPORT_INSTANCE **)(a1 + 24), v8);
}
return 0;
}
return result;
}Referenced by:
MiQueryEPTAccessedState