MiTrimSection

NTSTATUS __stdcall MiTrimSection(_MI_FLUSH_RANGE *FlushRange, UINT64 ReplaceOk, UINT64 Flags){
  _MI_FLUSH_RANGE *v3; 
  _MMPTE *v4; 
  unsigned int v5; 
  _SUBSECTION *v6; 
  _CONTROL_AREA *ControlArea; 
  UINT64 v8; 
  _ETHREAD *CurrentThread; 
  _MI_VIEW_INFO *v10; 
  unsigned __int8 v11; 
  volatile int *p_ControlAreaLock; 
  unsigned __int64 v13; 
  _SUBSECTION *v14; 
  int v15; 
  _RTL_BALANCED_NODE *Root; 
  _QWORD *i; 
  _MI_VIEW_INFO *v19; 
  _MI_VIEW_INFO *v20; 
  _MI_VIEW_INFO *v21; 
  unsigned __int64 v22; 
  _SUBSECTION *v23; 
  UINT64 EndingOffset; 
  _MMPTE *ProtoPte; 
  UINT64 StartingOffset; 
  unsigned int ReplaceOka; 
  int v29; 
  _MI_VIEW_INFO *v30; 

  ReplaceOka = ReplaceOk;
  v3 = FlushRange;
  v4 = (_MMPTE *)*((_QWORD *)FlushRange + 1);
  ProtoPte = v4;
  v5 = Flags;
  v29 = Flags & 1;
  v6 = (_SUBSECTION *)*((_QWORD *)v3 + 3);
  v23 = v6;
  ControlArea = v6->ControlArea;
  if( (Flags & 1) != 0 && (!ControlArea->FilePointer.Value || (ControlArea->u.LongFlags & 0x20) != 0) )
    return -1073741688;
  LODWORD(v8) = MiStartingOffset(v6, v4, 0xFFFFFFFFui64);
  EndingOffset = v8;
  MiStartingOffset(*((_SUBSECTION **)v3 + 4), *((_MMPTE **)v3 + 2), 0xFFFFFFFFui64);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v10 = 0i64;
  v30 = 0i64;
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquirePushLockSharedEx(&ControlArea->FileObjectLock, 0i64);
  v11 = ExAcquireSpinLockShared((INT64 *)&ControlArea->ControlAreaLock);
  p_ControlAreaLock = &ControlArea->ControlAreaLock;
  v13 = v11;
  if( ControlArea->NumberOfMappedViews )
  {
    StartingOffset = *(_QWORD *)ControlArea->gap8;
    ExReleaseSpinLockSharedFromDpcLevel(p_ControlAreaLock);
    __writecr8(v13);
    if( (ControlArea->u.LongFlags & 0x20) == 0 && ControlArea->FilePointer.Value )
    {
      v14 = (_SUBSECTION *)*((_QWORD *)v3 + 4);
      while( 1 )
      {
        v15 = 1;
        if( v6 == *((_SUBSECTION **)v3 + 3)
          || v6 == v14
          || ((v22 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)&ControlArea->ControlAreaLock),
               !v6[1].u1.e1._bf_0)
           || MiReferenceSubsection(v6, 0i64) <= 1 ? (v15 = 0) : (v15 = 2),
              ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&ControlArea->ControlAreaLock),
              __writecr8(v22),
              v15) )
        {
          if( v29 || (v5 & 0x20) != 0 )
            v15 = (unsigned int)MiAnyProtosAreMapped((__int64)v6, v3) != 0 ? v15 : 0;
          if( v15 )
          {
            Root = v6[1].GlobalPerSessionHead.Root;
            if( Root != (_RTL_BALANCED_NODE *)&v6[1].24 )
            {
              v20 = v30;
              do
              {
                v21 = MiViewMayContainPage(ControlArea, (_LIST_ENTRY *)v5, (UINT64)Root, EndingOffset);
                if( v21 )
                {
                  *(_QWORD *)v21 = v20;
                  v20 = v21;
                }
                Root = Root->Children[0];
              }
              while( Root != (_RTL_BALANCED_NODE *)&v6[1].24 );
              v6 = v23;
              v3 = FlushRange;
              v30 = v20;
            }
            if( v15 == 2 )
              MiDecrementSubsection(v6);
          }
        }
        v14 = (_SUBSECTION *)*((_QWORD *)v3 + 4);
        if( v6 == v14 )
          break;
        v6 = v6->NextSubsection;
        v23 = v6;
      }
      v10 = v30;
    }
    for( i = (_QWORD *)StartingOffset; i != (_QWORD *)ControlArea->gap8; i = (_QWORD *)*i )
    {
      v19 = MiViewMayContainPage(ControlArea, (_LIST_ENTRY *)v5, (UINT64)i, EndingOffset);
      if( v19 )
      {
        *(_QWORD *)v19 = v10;
        v10 = v19;
      }
    }
    MiUnlockControlAreaFileObjectShared(ControlArea);
    return MiTrimSharedPageFromViews(v10, ReplaceOka, v5, ControlArea, ProtoPte);
  }
  else
  {
    ExReleaseSpinLockSharedFromDpcLevel(p_ControlAreaLock);
    __writecr8(v13);
    MiUnlockControlAreaFileObjectShared(ControlArea);
    return 0;
  }
}

Referenced by:

MiTrimSharedPage
MmTrimSection