MiTryLockLeafPage
_MMPFN *__stdcall MiTryLockLeafPage(_MMPTE *ProtoPte, UINT64 PageLockHeld){
volatile signed __int32 **v2;
_MMPTE *v3;
INT64 v4;
unsigned __int64 v5;
__int64 v6;
volatile signed __int32 *v7;
*v2 = 0i64;
v3 = ProtoPte;
while( 1 )
{
while( 1 )
{
v4 = *(_QWORD *)v3;
v5 = *(_QWORD *)v3;
if( (*(_QWORD *)v3 & 1) != 0 )
goto LABEL_8;
if( (*(_QWORD *)v3 & 0xC00i64) != 2048 )
return(_MMPFN *)3221226548i64;
if( MiInvalidPteConforms(v4) )
{
v5 = v4;
if( qword_140C4DC80 )
{
if( (v4 & 0x10) == 0 )
v5 = v4 & ~qword_140C4DC80;
}
LABEL_8:
v6 = 48 * ((v5 >> 12) & 0xFFFFFFFFFi64);
if( ((*(_QWORD *)((char *)MmGetPfnDb() + v6 + 40) >> 50) & 1) != 0 )
break;
}
}
v7 = (volatile signed __int32 *)((char *)MmGetPfnDb() + v6);
if( _interlockedbittestandset64(v7 + 6, 0x3Fui64) )
return(_MMPFN *)3221225557i64;
if( *(_QWORD *)v3 == v4 )
{
*v2 = v7;
return 0i64;
}
_InterlockedAnd64((volatile signed __int64 *)v7 + 3, 0x7FFFFFFFFFFFFFFFui64);
}
}Referenced by:
MiConvertStandbyToProto
MiCopyDataPageToImagePage
MiCopyFileOnlyGlobalSubsectionPage
MiDeleteClusterSection
MiTryLockProtoPoolPageAtDpc