MiPreventControlAreaDeletion
INT64 __fastcall MiPreventControlAreaDeletion(INT64 a1, INT64 a2, INT64 *a3, INT64 **a4){
int v6;
__int64 v7;
__int64 v8;
INT64 v9;
INT64 *v10;
int v11;
INT64 *v12;
*a4 = 0i64;
*a3 = 0i64;
v6 = a2;
v7 = *(_QWORD *)(a1 + 16);
if( qword_140C4DC80 && (v7 & 0x10) == 0 )
v7 &= ~qword_140C4DC80;
v8 = v7 >> 16;
if( (*(_BYTE *)(v8 + 34) & 2) == 0 )
{
v9 = *(_QWORD *)v8;
v10 = (INT64 *)(*(_QWORD *)v8 + 72i64);
ExAcquireSpinLockExclusiveAtDpcLevel(v10);
v11 = *(_DWORD *)(v9 + 56);
if( !(v11 & 1 | ((v11 & 2) != 0)) )
{
if( (v11 & 0x20) != 0 )
goto LABEL_7;
if( (*(_BYTE *)(v8 + 34) & 1) == 0 && (v6 != 1 || !*(_DWORD *)(v8 + 108)) )
{
MiReferenceSubsection((_SUBSECTION *)v8, 0i64);
*a3 = v8;
LABEL_7:
MiBuildWakeList((_CONTROL_AREA *)v9, 4ui64);
++*(_DWORD *)(v9 + 76);
*a4 = v12;
MiRemoveUnusedSegment((_CONTROL_AREA *)v9);
if( v6 == 1 )
*(_DWORD *)(v9 + 56) |= 4u;
goto LABEL_9;
}
}
v9 = 0i64;
LABEL_9:
ExReleaseSpinLockExclusiveFromDpcLevel(v10);
return v9;
}
return 0i64;
}Referenced by:
MiPurgeBadFileOnlyPages
MiTrimSharedPage