MmSetPfnListInfo

INT64 __fastcall MmSetPfnListInfo(INT64 a1, _QWORD *a2, INT64 a3){
  int v3; 
  _QWORD *v7; 
  _ETHREAD *CurrentThread; 
  unsigned int v9; 
  int v10; 
  unsigned __int64 v11; 
  char *v12; 
  unsigned __int64 v13; 
  char v14; 
  int PfnPriority; 
  UINT64 v16; 
  _MMPFN *v17; 
  UINT16 v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  __int64 v21; 
  __int128 a2_8; 
  __int64 v23; 
  _ETHREAD *v24; 
  INT64 v25; 
  int v26; 
  INT64 result[16]; 
  v3 = a3;
  v23 = 0i64;
  a2_8 = 0i64;
  memset((INT64)result, 0i64);
  if( v3 && !(unsigned int)MiColdPageSizeSupported() )
    return 3221225659i64;
  v25 = 0i64;
  v26 = 16;
  v7 = &a2[3 * a1];
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v9 = 0;
  v24 = CurrentThread;
  --*((_WORD *)CurrentThread + 243);
  ExAcquirePushLockSharedEx((UINT64)&qword_140C50B80, 0i64);
  if( a2 >= v7 )
    goto LABEL_32;
  v10 = v3;
  do
  {
    v11 = a2[1];
    if( v11 <= 0xFFFFFFFFFi64 && (*((_QWORD *)MmGetPfnDb() + 6 * v11 + 5) & 0x4000000000000i64) != 0 )
    {
      *(_QWORD *)&a2_8 = 0i64;
      v12 = (char *)MmGetPfnDb() + 48 * v11;
      v23 = 0i64;
      *((_QWORD *)&a2_8 + 1) = v11;
      v13 = (unsigned __int8)MiLockPageInline((INT64)v12);
      MiIdentifyPfn((_MMPFN *)v12, (UINT64 *)&a2_8);
      if( v23 != a2[2] )
        goto LABEL_28;
      if( (((unsigned __int64)a2_8 ^ *a2) & 0x1FFFFFFFFFFFE00i64) != 0 )
        goto LABEL_28;
      v14 = v12[34] & 7;
      if( v14 != 6 && (unsigned __int8)(v14 - 2) > 2u )
        goto LABEL_28;
      if( v10 )
      {
        if( (*a2 & 0x80u) != 0i64
          && v14 == 2
          && !*((_WORD *)v12 + 16)
          && ((unsigned int)MiColdPageSizeSupported() || MiIsPfnFileOnly((INT64)v12)) )
        {
          v19 = *((_QWORD *)v12 + 2);
          v20 = (v19 & 0x400) != 0 ? v19 >> 11 : v19 >> 3;
          if( (v20 & 1) == 0 )
          {
            MiSetNonResidentPteHeat((UINT64 *)v12 + 2, 1i64);
            _InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
            __writecr8(v13);
            MiAddPageToHeatList(&v25, v11, 3i64);
            goto LABEL_30;
          }
        }
LABEL_28:
        _InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v13);
        v23 |= 2ui64;
        v9 = -1073741788;
        v21 = v23;
        *(_OWORD *)a2 = a2_8;
        a2[2] = v21;
        goto LABEL_30;
      }
      PfnPriority = MiGetPfnPriority((INT64)v12);
      if( (_DWORD)v16 != PfnPriority )
      {
        if( (_BYTE)v18 == 2 )
          MiRelinkStandbyPage(v17, v16, v18);
        else
          v12[35] = v16 | v12[35] & 0xF8;
      }
      _InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v13);
    }
    else
    {
      v9 = -1073741584;
    }
LABEL_30:
    a2 += 3;
  }
  while( a2 < v7 );
  CurrentThread = v24;
LABEL_32:
  if( HIDWORD(v25) )
    MiNotifyPageHeat(&v25);
  if( _InterlockedCompareExchange64((volatile signed __int64 *)&qword_140C50B80, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)&qword_140C50B80);
  KeAbPostRelease(&qword_140C50B80);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  return v9;
}

Referenced by:

PfpPfnPrioRequest