MiTrimSharedPage

_MI_STEAL_TYPE __stdcall MiTrimSharedPage(_MMPFN *Pfn1, UINT8 PageIrql, UINT64 Flags){
  _LIST_ENTRY *Blink; 
  unsigned __int64 v4; 
  _MMPTE *v6; 
  unsigned int v7; 
  int v8; 
  int v9; 
  int v10; 
  int v11; 
  unsigned int v12; 
  _CONTROL_AREA *v13; 
  _CONTROL_AREA *ControlArea; 
  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;} v15; 
  __int64 v16; 
  _MI_CONTROL_AREA_WAIT_BLOCK *v17; 
  _SUBSECTION *v19; 
  _MI_CONTROL_AREA_WAIT_BLOCK *v20; 
  _MI_FLUSH_RANGE FlushRange[2]; 
  _MMPTE *v22; 
  _MMPTE *v23; 
  __int64 v24; 
  __int64 v25; 
  int v26; 
  int v27; 
  _MI_CONTROL_AREA_WAIT_BLOCK *Gate; 
  INT64 v29; 

  Blink = Pfn1->ListEntry.Blink;
  v4 = PageIrql;
  v27 = 0;
  v6 = (_MMPTE *)((unsigned __int64)Blink | 0x8000000000000000ui64);
  Gate = 0i64;
  v29 = 0i64;
  v7 = ((unsigned int)Flags >> 18) & 1 | 2;
  if( (Flags & 0x80000) == 0 )
    v7 = ((unsigned int)Flags >> 18) & 1;
  v8 = v7 | 4;
  if( (Flags & 0x20000) == 0 )
    v8 = v7;
  v9 = v8 | 8;
  if( (Flags & 0x10000000) == 0 )
    v9 = v8;
  v10 = v9 | 0x10;
  v11 = Flags & 0x800000;
  if( (Flags & 0x800000) == 0 )
    v10 = v9;
  v12 = v10 | 0x40;
  if( (Flags & 0x3000000) == 0 )
    v12 = v10;
  if( (*(_DWORD *)(&Pfn1->3 + 1) & 0x400i64) == 0 )
  {
    _InterlockedAnd64(&Pfn1->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    __writecr8(v4);
    v19 = MiReferencePfBackedSection(v6);
    v16 = (__int64)v19;
    if( v19 )
    {
      ControlArea = v19->ControlArea;
      if( !v11 || ControlArea->u.Flags._bf_0 >= 0 || MiClusterVadFull(Pfn1, v19) != 1 )
        goto LABEL_17;
      v20 = MiDecrementModifiedWriteCount(ControlArea, 0i64);
      if( v20 )
        MiReleaseControlAreaWaiters(v20);
    }
    MiLockPageInline(Pfn1);
    return 0;
  }
  LODWORD(v13) = MiPreventControlAreaDeletion((INT64)Pfn1, 0i64, &v29, (INT64 **)&Gate);
  ControlArea = v13;
  if( !v13 )
    return 0;
  v15.Long = (unsigned __int64)Pfn1->OriginalPte.u;
  if( *(&stru_140C4DB30 + 42) && (v15.Long & 0x10) == 0 )
    v15.Long &= ~*(&stru_140C4DB30 + 42);
  v16 = v15.Hard._bf_0 >> 16;
  _InterlockedAnd64(&Pfn1->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  __writecr8(v4);
  MiReleaseControlAreaWaiters(Gate);
LABEL_17:
  v26 = 0;
  *(_QWORD *)FlushRange = ControlArea;
  v22 = v6;
  v23 = v6;
  v24 = v16;
  v25 = v16;
  if( MiTrimSection(FlushRange, 1ui64, v12) || (*(_BYTE *)(&Pfn1->u3 + 1) & 7) == 6 )
    MiTrimSection(FlushRange, 1ui64, v12);
  if( v29 )
    MiDecrementSubsection((PVOID)v29);
  v17 = MiDecrementModifiedWriteCount(ControlArea, 0i64);
  if( v17 )
    MiReleaseControlAreaWaiters(v17);
  MiLockPageInline(Pfn1);
  if( (*(_BYTE *)(&Pfn1->u3 + 1) & 7) != 6 )
    return 2;
  return 0;
}

Referenced by:

MiMarkFileOnlyPfnBad
MiTradePage
MiWalkEntireImage