MiFindLargeMapping
UINT64 __stdcall MiFindLargeMapping(PVOID VirtualAddress, PVOID EndVirtualAddress){
_MMPTE *PdeBase;
unsigned __int64 v3;
_MMPTE *v4;
_MMPTE *PteBase;
unsigned int v6;
char *v7;
__int64 v8;
unsigned __int64 v9;
_QWORD *v10;
char *i;
_OWORD v13[2];
char v14;
PdeBase = MmGetPdeBase();
v3 = (unsigned __int64)PdeBase + (((unsigned __int64)VirtualAddress >> 18) & 0x3FFFFFF8);
v4 = PdeBase;
PteBase = MmGetPteBase();
v6 = 3;
v7 = &v14;
v8 = 3i64;
v9 = (unsigned __int64)v4 + (((unsigned __int64)EndVirtualAddress >> 18) & 0x3FFFFFF8);
do
{
v7 -= 16;
--v8;
*((_QWORD *)v7 - 1) = v3;
*(_QWORD *)v7 = v9;
v3 = (unsigned __int64)PteBase + ((v3 >> 9) & 0x7FFFFFFFF8i64);
v9 = (unsigned __int64)PteBase + ((v9 >> 9) & 0x7FFFFFFFF8i64);
--v6;
}
while( v6 );
v10 = &v13[v8];
while( 2 )
{
for( i = (char *)*(v10 - 1); (unsigned __int64)i <= *v10; i += 8 )
{
if( *i < 0 )
return 1i64;
}
++v6;
v10 += 2;
if( v6 < 3 )
continue;
break;
}
return 0i64;
}Referenced by:
MmProtectPool