MiUnmapLargePages
VOID __fastcall MiUnmapLargePages(VOID *BaseAddress, UINT64 NumberOfBytes, _MI_SYSTEM_VA_TYPE VaType){
_MI_SYSTEM_VA_TYPE v3;
UINT64 v4;
char *v6;
char *v7;
char *i;
v3 = MiVaSystemPtesLarge;
v4 = NumberOfBytes;
if( VaType != MiVaSystemPtes )
v3 = VaType;
if( (NumberOfBytes & 0x1FFFFF) != 0 )
{
v6 = (char *)MmGetPteBase() + (((unsigned __int64)BaseAddress >> 9) & 0x7FFFFFFFF8i64);
v7 = &v6[4096 * (NumberOfBytes >> 21)];
for( i = &v6[8 * ((((unsigned __int16)BaseAddress & 0xFFF) + NumberOfBytes + 4095) >> 12)]; v7 < i; v7 += 8 )
{
if( !MI_READ_PTE_LOCK_FREE((INT64)v7) )
break;
*(_QWORD *)v7 = ZeroPte;
}
v4 = (v4 + 0x1FFFFF) & 0xFFFFFFFFFFE00000ui64;
}
MiReturnSystemVa((UINT64)BaseAddress, (UINT64)BaseAddress + v4, (unsigned int)v3);
}Referenced by:
MiInsertInSystemSpace
MiRemoveFromSystemSpace
MiUnmapLargeDriver
MmUnmapIoSpace