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