MiPerformFinalZeroing
VOID __stdcall MiPerformFinalZeroing(
INT64 *PostZeroPages,
UINT64 PostZeroCount,
_MI_PFN_CACHE_ATTRIBUTE CacheAttribute){
_MMPFN *v3;
__int64 v4;
_MMPFN *PfnDb;
UINT64 *v7;
INT64 *v8;
__int64 v9;
_MMPFN *v10;
__int64 v11;
UINT64 v12;
int v13[10];
v3 = 0i64;
v4 = (unsigned int)PostZeroCount;
PfnDb = MmGetPfnDb();
v7 = (UINT64 *)PostZeroPages;
if( (_DWORD)PostZeroCount )
{
v8 = PostZeroPages;
v9 = (unsigned int)v4;
do
{
v10 = &PfnDb[*v8++];
v10->OriginalPte.u.Long = (unsigned __int64)v3;
v3 = v10;
--v9;
}
while( v9 );
}
MiChangePageAttributeBatch(v3, CacheAttribute, ZeroPte);
if( (_DWORD)v4 )
{
v11 = v4;
do
{
v12 = *v7;
MiZeroPhysicalPage(*v7, 1ui64, CacheAttribute);
_InterlockedOr(v13, 0);
MiSetPfnTbFlushStamp(&PfnDb[v12], (unsigned int)KiTbFlushTimeStamp, 0i64);
++v7;
--v11;
}
while( v11 );
}
}Referenced by:
MiGetPageChain