MiEliminateZeroPages
VOID __stdcall MiEliminateZeroPages(_MMSUPPORT_INSTANCE *Vm, VOID *Va, UINT64 a3){
_KTBFLUSH_TYPE v6;
_MMPTE *PteAddress;
UINT64 v8;
_MMPTE *v9;
_QWORD *v10;
_QWORD *v11;
_MMPTE *PdeAddress;
_BYTE TbFlushList[184];
memset(TbFlushList, 0i64, sizeof(TbFlushList));
v6 = MiTbFlushType(Vm);
MiInitializeTbFlushList((_MI_TB_FLUSH_LIST *)TbFlushList, v6, 0x14ui64);
TbFlushList[4] |= 4u;
PteAddress = MiGetPteAddress(Va);
v8 = a3 >> 12;
v9 = 0i64;
while( v8 )
{
v10 = Va;
v11 = (char *)Va + 4088;
do
{
if( *v10 | *v11 )
break;
++v10;
--v11;
}
while( v10 <= v11 );
if( v10 > v11 )
{
PdeAddress = MiGetPdeAddress(Va);
if( v9 != PdeAddress )
{
if( *(_DWORD *)&TbFlushList[12] )
MiConvertAndFlushWsleVas(Vm, (_MMWSLE_FLUSH_LIST *)TbFlushList);
v9 = PdeAddress;
}
MiInsertTbFlushEntry((_MI_TB_FLUSH_LIST *)TbFlushList, Va, 1ui64, 0i64);
if( *(_DWORD *)&TbFlushList[12] == *(_DWORD *)&TbFlushList[8] )
MiConvertAndFlushWsleVas(Vm, (_MMWSLE_FLUSH_LIST *)TbFlushList);
}
++PteAddress;
Va = (char *)Va + 4096;
--v8;
}
if( *(_DWORD *)&TbFlushList[12] )
MiConvertAndFlushWsleVas(Vm, (_MMWSLE_FLUSH_LIST *)TbFlushList);
}Referenced by:
MiCopyToCfgBitMap
MiUpdateCfgSystemWideBitmapWorker