MiIsProbeActive
VOID __stdcall MiIsProbeActive(_MMPTE *InputPte, UINT64 InputPages, INT64 Flags, CHAR a4){
int v5;
char v6;
KIRQL v8;
_QWORD *v9;
unsigned __int64 v10;
char *v11;
unsigned __int64 v12;
unsigned __int64 v13;
__int64 v14;
char *v15;
_WORD *v16;
unsigned __int64 v17;
_QWORD *v18;
_QWORD *v19;
unsigned __int64 v20;
unsigned __int64 v21;
unsigned __int64 v22;
_QWORD *v23;
_QWORD *j;
unsigned __int64 v25;
char v26;
_QWORD *v27;
__int64 v28;
_MMPTE *i;
v26 = Flags;
v5 = 0;
v6 = Flags;
v8 = ExAcquireSpinLockShared(&dword_140C4E980);
v9 = (_QWORD *)xmmword_140C4E988;
v10 = v8;
if( (_QWORD)xmmword_140C4E988 )
{
if( (v6 & 1) != 0 )
{
v27 = 0i64;
v28 = -1i64;
for( i = (_MMPTE *)((char *)InputPte + 8 * InputPages); InputPte < i; InputPte = (_MMPTE *)((char *)InputPte + 8) )
{
v20 = *(_QWORD *)InputPte;
MiPteInShadowRange((UINT64)InputPte);
v21 = (v20 >> 12) & 0xFFFFFFFFFi64;
if( (*((_QWORD *)MmGetPfnDb() + 6 * v21 + 5) & 0x4000000000000i64) != 0 )
{
if( (v26 & 2) != 0 && *((_WORD *)MmGetPfnDb() + 24 * v21 + 16) > 2u )
break;
}
else
{
v22 = v21 & 0xFFFFFFFFFFFFFE00ui64;
if( v28 == -1 || v28 != v22 )
{
v23 = v27;
if( !v27 || v27[5] != v22 )
{
for( j = (_QWORD *)xmmword_140C4E988; ; j = (_QWORD *)j[1] )
{
while( 1 )
{
if( !j )
{
v28 = v21 & 0xFFFFFFE00i64;
goto LABEL_48;
}
v25 = j[5];
if( v21 >= v25 )
break;
j = (_QWORD *)*j;
}
if( v21 < v25 + 512 )
break;
}
v23 = j;
v27 = j;
}
if( (*(_WORD *)(v23[6] + 2 * (v21 - v23[5])) & 0x3FFF) != 0 )
break;
}
}
LABEL_48:
;
}
}
else
{
v11 = (char *)InputPte + InputPages - 1;
while( v9 )
{
v12 = v9[5];
if( (unsigned __int64)v11 < v12 )
{
v9 = (_QWORD *)*v9;
}
else
{
if( (unsigned __int64)InputPte <= v12 + 512 )
break;
v9 = (_QWORD *)v9[1];
}
}
while( v9 )
{
v13 = v9[5];
if( (unsigned __int64)v11 < v13 )
break;
v14 = v9[6];
v15 = (char *)InputPte - v13;
if( (unsigned __int64)InputPte < v13 )
v15 = 0i64;
v16 = (_WORD *)(v14 + 2i64 * (_QWORD)v15);
if( (unsigned __int64)(v11 + 1) > v13 + 512 )
v17 = v14 + 1024;
else
v17 = v14 + 2i64 * (_QWORD)&v11[-v13 + 1];
if( (unsigned __int64)v16 < v17 )
{
while( (*v16 & 0x3FFF) == 0 )
{
if( (unsigned __int64)++v16 >= v17 )
goto LABEL_22;
}
v5 = 1;
LABEL_22:
v11 = (char *)InputPte + InputPages - 1;
}
if( v5 == 1 )
break;
v18 = (_QWORD *)v9[1];
v19 = v9;
if( v18 )
{
do
{
v9 = v18;
v18 = (_QWORD *)*v18;
}
while( v18 );
}
else
{
while( 1 )
{
v9 = (_QWORD *)(v9[2] & 0xFFFFFFFFFFFFFFFCui64);
if( !v9 || (_QWORD *)*v9 == v19 )
break;
v19 = v9;
}
}
}
}
}
ExReleaseSpinLockSharedFromDpcLevel(&dword_140C4E980);
__writecr8(v10);
}Referenced by:
MiReplaceRotateWithDemandZero
MiSwitchToTransition
MmIsIoSpaceActive