MiLockOwnedProtoPage
INT64 __fastcall MiLockOwnedProtoPage(INT64 a1, UINT8 a2){
MMPTE *v2;
char v3;
unsigned __int64 i;
INT64 result;
int v7;
v2 = (MMPTE *)(*(_QWORD *)(a1 + 8) | 0x8000000000000000ui64);
v3 = *(_BYTE *)(a1 + 34);
for( i = a2; (v3 & 0x20) != 0; v3 = *(_BYTE *)(a1 + 34) )
{
_InterlockedAnd64((volatile signed __int64 *)(a1 + 24), 0x7FFFFFFFFFFFFFFFui64);
if( (_BYTE)i != 17 )
__writecr8(i);
v7 = 0;
while( (*(_BYTE *)(a1 + 34) & 0x20) != 0 )
{
++v7;
_mm_pause();
}
MiLockPageInline(a1);
}
*(_BYTE *)(a1 + 34) = v3 | 0x20;
result = *(_QWORD *)(a1 + 24) >> 62;
if( (*(_QWORD *)(a1 + 24) & 0x4000000000000000i64) == 0 && (*(_BYTE *)v2 & 0x20) == 0 )
MiWriteValidPteVolatile(v2, 1ui64);
_InterlockedAnd64((volatile signed __int64 *)(a1 + 24), 0x7FFFFFFFFFFFFFFFui64);
return result;
}Referenced by:
MiLockProtoPoolPage
MiMakePageAvoidRead
MiRelockProtoPoolPage
MmCheckCachedPageStates