MiPurgeFileOnlyPfn

NTSTATUS __stdcall MiPurgeFileOnlyPfn(INT64 a1){
  __int64 v1; 
  __int64 v2; 
  __int64 v3; 
  _MMPTE *v4; 
  _MMPFN *v5; 
  ULONG_PTR v6; 
  _MMPFN *v7; 
  unsigned __int64 v8; 
  void *BugCheckParameter4; 
  NTSTATUS result; 
  _MMPFN *PfnDb; 
  char v12; 
  __int128 v13[2]; 
  __int64 v14; 
  UINT8 PageIrql; 

  v1 = *(_QWORD *)(a1 + 16);
  memset(v13, 0, sizeof(v13));
  v14 = 0i64;
  if( *(&stru_140C4DB30 + 42) && (v1 & 0x10) == 0 )
    v1 &= ~*(&stru_140C4DB30 + 42);
  v2 = *(_QWORD *)(a1 + 8);
  v3 = v1 >> 16;
  PageIrql = 17;
  v4 = (_MMPTE *)(v2 | 0x8000000000000000ui64);
  MiChangingSubsectionProtos(v3);
  v5 = MiCheckProtoPtePageState(v4, &PageIrql);
  v6 = (unsigned int)v5;
  if( v5 )
  {
    v7 = MiLockLeafPage(v4, 0i64);
    if( v7 )
    {
      LODWORD(v8) = MI_READ_PTE_LOCK_FREE((INT64)v4);
      BugCheckParameter4 = (void *)v8;
      if( (v8 & 1) != 0 )
        goto LABEL_7;
      if( *(&stru_140C4DB30 + 42) )
      {
        if( (v8 & 0x10) != 0 )
          v8 &= ~0x10ui64;
        else
          v8 &= ~*(&stru_140C4DB30 + 42);
      }
      PfnDb = MmGetPfnDb();
      if( v7 != &PfnDb[(v8 >> 12) & 0xFFFFFFFFFi64] )
        goto LABEL_7;
      if( (*(_DWORD *)(&v7->3 + 1) & 0x401) != 1024i64 || (_MMPTE *)(v7->PteLong | 0x8000000000000000ui64) != v4 )
        KeBugCheckEx(0xDEu, (PVOID)2, v4, v7->ListEntry.Blink, BugCheckParameter4);
      v12 = *((_BYTE *)&v7->u3 + 2);
      if( (v12 & 8) != 0 )
      {
LABEL_7:
        _InterlockedAnd64(&v7->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      }
      else
      {
        if( (v12 & 0x10) != 0 )
        {
          if( *((char *)&v7->u3 + 3) >= 0 )
          {
            MiPersistPage(v7 - PfnDb);
            v12 = *((_BYTE *)&v7->u3 + 2);
          }
          *((_BYTE *)&v7->u3 + 2) = v12 & 0xEF;
        }
        MiDeleteTransitionPte(v4, v7, 2u, 1ui64);
      }
    }
  }
  if( PageIrql != 17 )
    MiUnlockProtoPoolPage(v6, PageIrql);
  MiSubsectionProtosCreated((_SUBSECTION *)v3, (_MI_CONTROL_AREA_WAIT_BLOCK *)v13);
  return result;
}

Referenced by:

MiPurgeBadFileOnlyPages