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