MiDecrementSubsections

NTSTATUS __stdcall MiDecrementSubsections(_SUBSECTION *FirstSubsection, _SUBSECTION *LastSubsection, UINT64 Flags){
  unsigned int v3; 
  _SUBSECTION *v5; 
  __int64 v6; 
  void *Object; 
  unsigned int v8; 
  __int64 v10; 
  UINT64 v11; 
  __int64 v12; 

  v3 = Flags;
  v5 = FirstSubsection;
  v6 = 0i64;
  Object = FirstSubsection->ControlArea->FilePointer.Object;
  do
  {
    if( v5->SubsectionBase )
    {
      LODWORD(v10) = MiDecrementSubsectionViewCount((_MSUBSECTION *)v5);
      v6 += v10;
      if( Object )
      {
        if( !*(_QWORD *)&v5[1].NumberOfFullSectors && (v5->u.SubsectionFlags._bf_2 & 1) == 0 )
        {
          LODWORD(v12) = MiInsertUnusedSubsection((_MSUBSECTION *)v5, v11);
          v6 += v12;
        }
      }
    }
    if( v5 == LastSubsection )
      break;
    v5 = v5->NextSubsection;
    v8 = v3 & 0xFFFFFFF7;
    if( Object )
      v8 = v3;
    v3 = v8;
  }
  while( v5 );
  return v6;
}

Referenced by:

MiAddViewsForSection
MiDecrementSubsection
MiDeletePartialVad
MiDeleteVad
MiFlushRelease
MiReleaseFaultCharges
MiUpControlAreaRefs
MiUpdateActiveSubsection
MmPurgeSection