MiAnyProtosAreMapped
INT64 __fastcall MiAnyProtosAreMapped(INT64 a1, _QWORD *a2){
unsigned int v2;
unsigned __int64 v3;
unsigned __int64 v4;
UINT64 v5;
_MMPFN *v6;
unsigned __int64 v7;
UINT8 PageIrql;
v2 = 0;
PageIrql = 17;
if( a1 == a2[3] )
v3 = a2[1];
else
v3 = *(_QWORD *)(a1 + 8);
if( a1 == a2[4] )
v4 = a2[2] + 8i64;
else
v4 = v3 + 8i64 * *(unsigned int *)(a1 + 44);
if( v3 < v4 )
{
do
{
v6 = MiCheckProtoPtePageState((_MMPTE *)v3, &PageIrql);
if( v6 )
{
v7 = v4;
if( v4 > (v3 & 0xFFFFFFFFFFFFF000ui64) + 4096 )
v7 = (v3 & 0xFFFFFFFFFFFFF000ui64) + 4096;
while( v3 < v7 )
{
if( (*(_BYTE *)v3 & 1) != 0 )
{
v2 = 1;
v3 = v4;
break;
}
v3 += 8i64;
}
LOBYTE(v5) = PageIrql;
if( PageIrql != 17 )
{
MiUnlockProtoPoolPage(v6, v5);
LOBYTE(v5) = 17;
PageIrql = 17;
}
}
else
{
LOBYTE(v5) = PageIrql;
v3 = (v3 & 0xFFFFFFFFFFFFF000ui64) + 4096;
}
}
while( v3 < v4 );
if( (_BYTE)v5 != 17 )
MiUnlockProtoPoolPage(v6, v5);
}
return v2;
}Referenced by:
MiTrimSection