MiReturnSystemVa
VOID __stdcall MiReturnSystemVa(VOID *BaseVa, VOID *LastVa, _MI_SYSTEM_VA_TYPE VaType, _MI_TB_FLUSH_LIST *TbFlushList){
_MMPTE *PteBase;
unsigned __int64 v8;
unsigned __int64 v9;
__int64 v10;
__int64 v11;
int v12;
_MMSUPPORT_INSTANCE *AnyMultiplexedVm;
INT64 v14;
__int32 v15;
__int32 a5;
INT64 v17;
unsigned __int64 v18;
_MI_WORKING_SET_TYPE v19;
INT64 a6[24];
memset(a6, 0i64, 0xB8u);
PteBase = MmGetPteBase();
v8 = ((unsigned __int64)&PteBase[511].u.Trans._bf_0 + (((unsigned __int64)BaseVa >> 9) & 0x7FFFFFFFF8i64) + 7) & 0xFFFFFFFFFFFFF000ui64;
v9 = ((unsigned __int64)PteBase + (((unsigned __int64)LastVa >> 9) & 0x7FFFFFFFF8i64)) & 0xFFFFFFFFFFFFF000ui64;
if( v8 < v9 )
{
v10 = (__int64)((v9 << 25) - ((_QWORD)PteBase << 25)) >> 16;
v11 = (__int64)((v8 << 25) - ((_QWORD)PteBase << 25)) >> 16;
v12 = 2;
WORD2(a6[0]) = 0;
a6[2] = 0i64;
a6[3] = 0i64;
LODWORD(a6[1]) = 20;
if( VaType != MiVaSessionSpace )
v12 = 0;
LODWORD(a6[0]) = v12;
AnyMultiplexedVm = MiGetAnyMultiplexedVm(MiWorkingSetTypeNonPagedPool, PteBase);
v17 = (unsigned int)(VaType - a5);
if( VaType == a5 )
{
AnyMultiplexedVm = MiGetSessionVm(v14, v17, v15);
goto LABEL_11;
}
v18 = (unsigned int)(v17 - 5);
if( (_DWORD)v18 )
{
v18 = (unsigned int)(v18 - v15);
if( (_DWORD)v18 )
{
v19 = v15 + 1;
v18 = (unsigned int)(v18 - a5);
if( (_DWORD)v18 )
{
v18 = (unsigned int)(v18 - v19);
if( (_DWORD)v18 )
{
v18 = (unsigned int)(v18 - a5);
if( (_DWORD)v18 )
{
if( (_DWORD)v18 != a5 )
goto LABEL_11;
v19 = MiWorkingSetTypeKernelStacks;
}
}
else
{
v19 = a5;
}
}
}
else
{
v19 = MiWorkingSetTypeSystemCache;
}
}
else
{
v19 = v15;
}
AnyMultiplexedVm = MiGetAnyMultiplexedVm(v19, (VOID *)v18);
LABEL_11:
MiDeleteSystemPageTables(AnyMultiplexedVm, (unsigned int)VaType, v11, v10 - 1, a5, (INT64)a6);
MiMakeSystemRangeAvailable((PVOID)v11, (PVOID)(v10 - v11));
}
}Referenced by:
MiDeleteBootRange
MiExpandPtes
MiGetPageTablesForLargeMap
MiMapBBTMemory
MiObtainSystemCacheView
MiReleaseDriverPtes
MiReleaseLargePteMappings
MiReleaseSystemCacheView
MiReserveDriverPtes
MiReturnSystemPtes
MiUnmapLargePages
MmFreePoolMemory
MmFreeSecurePoolMemory