MiReturnSystemVa
VOID __fastcall MiReturnSystemVa(UINT64 a1, UINT64 a2, INT64 a3){
unsigned int v3;
_MMPTE *PteBase;
UINT64 v7;
UINT64 v8;
__int64 v9;
__int64 v10;
int v11;
INT64 AnyMultiplexedVm;
unsigned int v13;
unsigned int a5;
unsigned int v15;
INT64 v16;
unsigned int v17;
int v18;
int v19;
int result;
__int16 result_4;
int v22;
__int64 v23;
__int64 v24;
v3 = a3;
memset((INT64)&result, 0i64);
PteBase = MmGetPteBase();
v7 = ((unsigned __int64)PteBase + ((a1 >> 9) & 0x7FFFFFFFF8i64) + 4095) & 0xFFFFFFFFFFFFF000ui64;
v8 = ((unsigned __int64)PteBase + ((a2 >> 9) & 0x7FFFFFFFF8i64)) & 0xFFFFFFFFFFFFF000ui64;
if( v7 < v8 )
{
v9 = (__int64)((v8 << 25) - ((_QWORD)PteBase << 25)) >> 16;
v10 = (__int64)((v7 << 25) - ((_QWORD)PteBase << 25)) >> 16;
v11 = 2;
result_4 = 0;
v23 = 0i64;
v24 = 0i64;
v22 = 20;
if( v3 != 1 )
v11 = 0;
result = v11;
AnyMultiplexedVm = (INT64)MiGetAnyMultiplexedVm(5i64);
if( v3 == a5 )
{
AnyMultiplexedVm = MiGetSessionVm();
goto LABEL_11;
}
if( v3 - a5 == 5 )
{
v16 = v13;
}
else
{
v15 = v3 - a5 - 5 - v13;
if( v15 )
{
v16 = v13 + 1;
v17 = v15 - a5;
if( v17 )
{
v18 = v17 - v16;
if( v18 )
{
v19 = v18 - a5;
if( v19 )
{
if( v19 != a5 )
goto LABEL_11;
v16 = 4i64;
}
}
else
{
v16 = a5;
}
}
}
else
{
v16 = 0i64;
}
}
AnyMultiplexedVm = (INT64)MiGetAnyMultiplexedVm(v16);
LABEL_11:
MiDeleteSystemPageTables(AnyMultiplexedVm, v3, v10, v9 - 1, a5, (INT64)&result);
MiMakeSystemRangeAvailable((PVOID)v10, (PVOID)(v9 - v10));
}
}Referenced by:
MiDeleteBootRange
MiExpandPtes
MiGetPageTablesForLargeMap
MiMapBBTMemory
MiObtainSystemCacheView
MiReleaseDriverPtes
MiReleaseLargePteMappings
MiReleaseSystemCacheView
MiReserveDriverPtes
MiReturnSystemPtes
MiUnmapLargePages
MmFreePoolMemory
MmFreeSecurePoolMemory