MxMapVa
UINT64 __stdcall MxMapVa(_MX_MAP_PACKET *MapPacket){
int v1;
UINT64 v3;
_MX_MAP_PACKET i;
UINT64 v5;
INT64 NextPage;
__int64 v8;
__int64 v9;
int v10;
_MMPTE *PteBase;
_MX_MAP_PACKET v12;
void *v13;
__int64 v14;
__int64 v15;
int v16;
__int64 v17[2];
__int128 v18;
v1 = 0;
v3 = *(_QWORD *)MapPacket;
*(_OWORD *)v17 = 0i64;
if( *(&stru_140C50B28 + 853) > 0x20000ui64 )
v1 = 1;
v18 = 0i64;
MiFillPteHierarchy(v3, (UINT64 *)v17);
for( i = 3; ; --i )
{
v5 = v17[i];
if( (*(_QWORD *)v5 & 1) == 0 )
break;
if( !i )
return 1i64;
if( (*(_QWORD *)v5 & 0x80u) != 0i64 )
{
MapPacket[8] = i;
return 1i64;
}
LABEL_7:
if( !i )
return 1i64;
}
if( i == 1 && v1 == 1 )
{
NextPage = MxGetNextPage((unsigned int)MapPacket[2], 1ui64);
if( NextPage != -1 )
{
*(&stru_140C4DB30 + 573) += 512i64;
LODWORD(v8) = MiMakeValidPte((_XSTATE_CONFIGURATION *)v5, NextPage, 3019898884i64);
v9 = v8;
LOBYTE(v10) = MiPteInShadowRange(v5);
if( v10 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v9 & 1) != 0 )
v9 |= 0x8000000000000000ui64;
*(_QWORD *)v5 = v9;
PteBase = MmGetPteBase();
v12 = MapPacket[3];
if( !v12 )
{
if( (_MMPTE *)v5 != (_MMPTE *)((char *)PteBase + ((*((_QWORD *)MapPacket + 2) >> 9) & 0x7FFFFFFFF8i64))
&& (_MMPTE *)v5 != (_MMPTE *)((char *)PteBase + ((*((_QWORD *)MapPacket + 3) >> 9) & 0x7FFFFFFFF8i64)) )
{
goto LABEL_18;
}
v12 = 1;
}
if( v12 == 1 )
KeZeroPages(
(VOID *)((((__int64)((v5 << 25) - ((_QWORD)PteBase << 25)) >> 16 << 25) - ((_QWORD)PteBase << 25)) >> 16),
0x200000ui64);
LABEL_18:
MapPacket[8] = 1;
return 1i64;
}
}
v13 = (void *)MxGetNextPage((unsigned int)MapPacket[2], 0i64);
if( v13 != (void *)-1i64 )
{
++*(&stru_140C4DB30 + 573);
if( i || MapPacket[3] == 1 )
MiFillPhysicalPages(v13);
LODWORD(v14) = MiMakeValidPte((_XSTATE_CONFIGURATION *)v5, (INT64)v13, i != 0 ? -1744830460 : -1342177276);
v15 = v14;
LOBYTE(v16) = MiPteInShadowRange(v5);
if( v16 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v15 & 1) != 0 )
v15 |= 0x8000000000000000ui64;
*(_QWORD *)v5 = v15;
goto LABEL_7;
}
return 0i64;
}Referenced by:
MxMapPfnRange