MiRemoveViewsFromSection

NTSTATUS __stdcall MiRemoveViewsFromSection(_SUBSECTION *Subsection, UINT64 LastPteOffset){
  unsigned int v2; 
  unsigned int v3; 
  _SUBSECTION *v5; 
  __int64 v6; 
  void *Object; 
  __int64 v8; 
  UINT64 v9; 
  UINT64 PtesInSubsection; 
  __int64 v12; 
  unsigned int v13; 

  v3 = v2;
  v5 = Subsection;
  v6 = 0i64;
  Object = Subsection->ControlArea->FilePointer.Object;
  do
  {
    LODWORD(v8) = MiDecrementSubsectionViewCount((_MSUBSECTION *)v5);
    v6 += v8;
    if( Object && !*(_QWORD *)&v5[1].NumberOfFullSectors && (v5->u.SubsectionFlags._bf_2 & 1) == 0 )
    {
      LODWORD(v12) = MiInsertUnusedSubsection((_MSUBSECTION *)v5, v9);
      v6 += v12;
    }
    if( LastPteOffset )
    {
      PtesInSubsection = v5->PtesInSubsection;
      if( LastPteOffset <= PtesInSubsection )
        return v6;
      LastPteOffset -= PtesInSubsection;
    }
    v5 = v5->NextSubsection;
    v13 = v3 & 0xFFFFFFF7;
    if( Object )
      v13 = v3;
    v3 = v13;
  }
  while( v5 );
  return v6;
}

Referenced by:

MiConvertStaticSubsections
MiRemoveMappedPtes
MiRemoveSystemCacheReferences
MiRemoveViewsFromSectionWithPfn
MmUnmapViewInSystemCache