MiCheckKernelShadow
NTSTATUS __stdcall MiCheckKernelShadow(CHAR a1, UINT64 a2, INT64 a3){
_MMPTE *PteBase;
char *v5;
unsigned __int64 v6;
NTSTATUS v7;
__int64 v8;
UINT64 v9;
UINT64 BugCheckParameter4;
__int64 v11;
UINT64 v14;
__int64 v15;
PteBase = MmGetPteBase();
v5 = (char *)PteBase + ((a2 >> 9) & 0x7FFFFFFFF8i64);
v6 = (unsigned __int64)PteBase + (((a2 + a3 - 1) >> 9) & 0x7FFFFFFFF8i64);
v7 = -1;
v8 = 0i64;
while( (unsigned __int64)v5 <= v6 )
{
v9 = MiReadWriteAnyLevelShadowPte((unsigned __int64)v5, 0, 0, ZeroPte.u.Long);
v14 = v9;
BugCheckParameter4 = v9;
if( (v9 & 1) == 0 )
{
if( (a1 & 8) == 0 )
KeBugCheckEx(0x1Au, (PVOID)0x3602, v5, (PVOID)v9, (PVOID)v9);
return v8 + a2;
}
LODWORD(v11) = MiVaToPfn((VOID *)(v8 + a2));
v15 = v11;
MiPteInShadowRange((UINT64)&v14);
if( v15 != ((BugCheckParameter4 >> 12) & 0xFFFFFFFFFi64) )
{
if( (a1 & 8) == 0 )
KeBugCheckEx(0x1Au, (PVOID)0x3603, v5, (PVOID)BugCheckParameter4, (PVOID)BugCheckParameter4);
return v8 + a2;
}
v5 += 8;
v8 += 4096i64;
}
return v7;
}Referenced by:
MiCheckRelevantKernelShadows