MiPurgeFileOnlyPfn

INT64 __fastcall MiPurgeFileOnlyPfn(INT64 a1){
  __int64 v1; 
  unsigned int v2; 
  __int64 v3; 
  __int64 v4; 
  _MMPTE *v5; 
  UINT64 v6; 
  _MMPFN *v7; 
  _MMPFN *v8; 
  unsigned __int64 v9; 
  ULONG_PTR BugCheckParameter4; 
  INT64 result; 
  UINT8 *PfnDb; 
  char v13; 
  INT64 a2[2]; 
  __int128 v15; 
  __int64 v16; 
  UINT8 PageIrql; 
  v1 = *(_QWORD *)(a1 + 16);
  v2 = 0;
  *(_OWORD *)a2 = 0i64;
  v15 = 0i64;
  v16 = 0i64;
  if( qword_140C4DC80 && (v1 & 0x10) == 0 )
    v1 &= ~qword_140C4DC80;
  v3 = *(_QWORD *)(a1 + 8);
  v4 = v1 >> 16;
  PageIrql = 17;
  v5 = (_MMPTE *)(v3 | 0x8000000000000000ui64);
  MiChangingSubsectionProtos((PVOID)v4);
  v7 = MiCheckProtoPtePageState(v5, &PageIrql);
  if( v7 )
  {
    v8 = MiLockLeafPage(v5, 0i64);
    if( v8 )
    {
      v9 = MI_READ_PTE_LOCK_FREE((INT64)v5);
      BugCheckParameter4 = v9;
      if( (v9 & 1) != 0 )
        goto LABEL_7;
      if( qword_140C4DC80 )
      {
        if( (v9 & 0x10) != 0 )
          v9 &= ~0x10ui64;
        else
          v9 &= ~qword_140C4DC80;
      }
      PfnDb = (UINT8 *)MmGetPfnDb();
      v6 = (UINT64)&PfnDb[48 * ((v9 >> 12) & 0xFFFFFFFFFi64)];
      if( v8 != (_MMPFN *)v6 )
        goto LABEL_7;
      if( (*((_DWORD *)v8 + 4) & 0x401) != 1024i64 || (_MMPTE *)(*((_QWORD *)v8 + 1) | 0x8000000000000000ui64) != v5 )
        KeBugCheckEx(0xDEu, 2ui64, (ULONG_PTR)v5, *((_QWORD *)v8 + 1), BugCheckParameter4);
      v13 = *((_BYTE *)v8 + 34);
      if( (v13 & 8) != 0 )
      {
LABEL_7:
        _InterlockedAnd64((volatile signed __int64 *)v8 + 3, 0x7FFFFFFFFFFFFFFFui64);
      }
      else
      {
        if( (v13 & 0x10) != 0 )
        {
          if( *((char *)v8 + 35) >= 0 )
          {
            MiPersistPage((v8 - (_MMPFN *)PfnDb) / 48);
            v13 = *((_BYTE *)v8 + 34);
          }
          *((_BYTE *)v8 + 34) = v13 & 0xEF;
        }
        LOBYTE(PfnDb) = 2;
        MiDeleteTransitionPte(v5, v8, PfnDb, 1ui64);
        v2 = 1;
      }
    }
  }
  LOBYTE(v6) = PageIrql;
  if( PageIrql != 17 )
    MiUnlockProtoPoolPage(v7, v6);
  MiSubsectionProtosCreated((INT64 *)v4, (INT64)a2, 0i64, v2);
  return result;
}

Referenced by:

MiPurgeBadFileOnlyPages