MmSetPfnListInfo

__int64 __fastcall MmSetPfnListInfo(__int64 a1, _QWORD *a2, int a3){
  _QWORD *v7; 
  _ETHREAD *CurrentThread; 
  unsigned int v9; 
  int v10; 
  unsigned __int64 v11; 
  _MMPFN *v12; 
  unsigned __int64 v13; 
  char v14; 
  NTSTATUS PfnPriority; 
  UINT64 v16; 
  ULONG_PTR v17; 
  UINT8 *v18; 
  int 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; 
  unsigned __int64 v21; 
  __int64 v22; 
  __int128 PfnIdentity_8; 
  __int64 v24; 
  _ETHREAD *v25; 
  INT64 v26; 
  int v27; 
  char v28[132]; 

  v24 = 0i64;
  PfnIdentity_8 = 0i64;
  memset(v28, 0i64, sizeof(v28));
  if( a3 && !MiColdPageSizeSupported() )
    return 3221225659i64;
  v26 = 0i64;
  v27 = 16;
  v7 = &a2[3 * a1];
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v9 = 0;
  v25 = CurrentThread;
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&stru_140C50B28 + 11, 0i64);
  if( a2 >= v7 )
    goto LABEL_32;
  v10 = a3;
  do
  {
    v11 = a2[1];
    if( v11 <= 0xFFFFFFFFFi64 && (MmGetPfnDb()[v11].u4._bf_0 & 0x4000000000000i64) != 0 )
    {
      *(_QWORD *)&PfnIdentity_8 = 0i64;
      v12 = &MmGetPfnDb()[v11];
      v24 = 0i64;
      *((_QWORD *)&PfnIdentity_8 + 1) = v11;
      v13 = MiLockPageInline(v12);
      MiIdentifyPfn(v12, (_MMPFN_IDENTITY *)&PfnIdentity_8);
      if( v24 != a2[2] )
        goto LABEL_28;
      if( (((unsigned __int64)PfnIdentity_8 ^ *a2) & 0x1FFFFFFFFFFFE00i64) != 0 )
        goto LABEL_28;
      v14 = *(_BYTE *)(&v12->u3 + 1) & 7;
      if( v14 != 6 && (unsigned __int8)(v14 - 2) > 2u )
        goto LABEL_28;
      if( v10 )
      {
        if( (*a2 & 0x80u) != 0i64 && v14 == 2 && !v12->u3.ReferenceCount )
        {
          if( MiColdPageSizeSupported() || (LOBYTE(v19) = MiIsPfnFileOnly((INT64)v12), v19) )
          {
            v20.Long = (unsigned __int64)v12->OriginalPte.u;
            v21 = (v20.Long & 0x400) != 0 ? v20.Long >> 11 : v20.Long >> 3;
            if( (v21 & 1) == 0 )
            {
              MiSetNonResidentPteHeat(&v12->OriginalPte.u.Long, 1i64);
              _InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
              __writecr8(v13);
              MiAddPageToHeatList(&v26, v11, 3i64);
              goto LABEL_30;
            }
          }
        }
LABEL_28:
        _InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v13);
        v24 |= 2ui64;
        v9 = -1073741788;
        v22 = v24;
        *(_OWORD *)a2 = PfnIdentity_8;
        a2[2] = v22;
        goto LABEL_30;
      }
      PfnPriority = MiGetPfnPriority(v12);
      if( (_DWORD)v16 != PfnPriority )
      {
        if( (_BYTE)v18 == 2 )
          MiRelinkStandbyPage(v17, v16, v18);
        else
          *((_BYTE *)&v12->u3 + 3) = v16 | *((_BYTE *)&v12->u3 + 3) & 0xF8;
      }
      _InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v13);
    }
    else
    {
      v9 = -1073741584;
    }
LABEL_30:
    a2 += 3;
  }
  while( a2 < v7 );
  CurrentThread = v25;
LABEL_32:
  if( HIDWORD(v26) )
    MiNotifyPageHeat(&v26);
  if( _InterlockedCompareExchange64((_QWORD *)&stru_140C50B28 + 11, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((_EX_PUSH_LOCK *)&stru_140C50B28 + 11);
  KeAbPostRelease((char *)&stru_140C50B28 + 88);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  return v9;
}

Referenced by:

PfpPfnPrioRequest