MiDecrementSubsections

UINT64 __stdcall MiDecrementSubsections(_SUBSECTION *FirstSubsection, _SUBSECTION *LastSubsection, UINT64 Flags){
  unsigned int v3; 
  _SUBSECTION *v5; 
  UINT64 v6; 
  __int64 v7; 
  unsigned int v8; 
  UINT64 v10; 
  v3 = Flags;
  v5 = FirstSubsection;
  v6 = 0i64;
  v7 = *(_QWORD *)(*(_QWORD *)FirstSubsection + 64i64);
  do
  {
    if( *((_QWORD *)v5 + 1) )
    {
      v6 += MiDecrementSubsectionViewCount((INT64 *)v5, v3);
      if( v7 )
      {
        if( !*((_QWORD *)v5 + 12) && (*((_BYTE *)v5 + 34) & 1) == 0 )
          v6 += MiInsertUnusedSubsection((_MSUBSECTION *)v5, v10);
      }
    }
    if( v5 == LastSubsection )
      break;
    v5 = (_SUBSECTION *)*((_QWORD *)v5 + 2);
    v8 = v3 & 0xFFFFFFF7;
    if( v7 )
      v8 = v3;
    v3 = v8;
  }
  while( v5 );
  return v6;
}

Referenced by:

MiAddViewsForSection
MiDecrementSubsection
MiDeletePartialVad
MiDeleteVad
MiFlushRelease
MiReleaseFaultCharges
MiUpControlAreaRefs
MiUpdateActiveSubsection
MmPurgeSection