MiConvertContiguousPages
VOID __stdcall MiConvertContiguousPages(_MMPFN *Pfn1, UINT64 SizeInPages, _MI_PFN_CACHE_ATTRIBUTE CacheAttribute){
int v5;
_MMPFN *v6;
__int64 v7;
_MMPFN *v8;
int v9;
int v10;
_MI_PFN_CACHE_ATTRIBUTE v11;
NTSTATUS v12;
int v13;
__int64 v14;
UINT64 v15;
union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v16;
__int64 bf_0;
_MMPFN *Long;
INT64 v19;
union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v20;
UINT64 v21;
v21 = 0i64;
v5 = 1;
MiSetOriginalPtePfnFromFreeList(&v21);
v6 = 0i64;
v8 = &Pfn1[v7];
if( Pfn1 != v8 )
{
do
{
LOBYTE(v9) = MiIsFreeZeroPfnCold((INT64)Pfn1);
v10 = v9;
v12 = MiPfnZeroingNeeded(Pfn1, CacheAttribute);
v13 = 0;
if( !v12 )
v13 = v5;
v5 = v13;
if( MiPageAttributeBatchChangeNeeded(Pfn1, v11) )
{
v14 = Pfn1->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 & 0xFFFFFFF000000000ui64;
Pfn1->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = v14;
if( v10 )
{
v14 |= 2ui64;
Pfn1->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = v14;
}
Pfn1->OriginalPte.u.Long = (unsigned __int64)v6;
v6 = Pfn1;
if( v12 )
Pfn1->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = v14 | 1;
}
else
{
v15 = v21 & -(__int64)(v12 != 0);
Pfn1->OriginalPte.u.Long = v15;
if( v10 )
{
LODWORD(v16.Long) = MiUpdatePageFileHighInPte(v15, 4294967293i64);
Pfn1->OriginalPte.u = (union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;})v16.Long;
}
}
++Pfn1;
}
while( Pfn1 != v8 );
if( v6 )
{
MiChangePageAttributeBatch(v6, CacheAttribute, (_MMPTE)-1i64);
do
{
bf_0 = v6->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0;
Long = (_MMPFN *)v6->OriginalPte.u.Long;
v19 = v21 & -(__int64)((v6->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 & 1) != 0);
v6->OriginalPte.u.Long = v19;
if( (bf_0 & 2) != 0 )
{
LODWORD(v20.Long) = MiUpdatePageFileHighInPte(v19, 4294967293i64);
v6->OriginalPte.u = (union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;})v20.Long;
}
v6->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = bf_0 & 0xFFFFFFF000000000ui64;
v6 = Long;
}
while( Long );
}
}
}Referenced by:
MiFindContiguousPages