MiMakeUnusedSegmentDeleteOnClose
NTSTATUS __stdcall MiMakeUnusedSegmentDeleteOnClose(INT64 a1){
INT64 *v1;
unsigned __int8 v3;
_QWORD *v4;
unsigned __int8 v5;
_QWORD *v6;
_CONTROL_AREA *v7;
INT64 *v8;
UINT64 v9;
UINT64 v10;
NTSTATUS result;
v1 = (INT64 *)(a1 + 1344);
v3 = ExAcquireSpinLockExclusive((INT64 *)(a1 + 1344));
v4 = (_QWORD *)(a1 + 1704);
while( 1 )
{
v5 = v3;
v6 = (_QWORD *)*v4;
if( (_QWORD *)*v4 == v4 )
break;
v7 = (_CONTROL_AREA *)(v6 - 1);
v8 = v6 + 8;
if( (unsigned int)ExTryAcquireSpinLockExclusiveAtDpcLevel(v8) )
{
MiUnlinkUnusedControlArea((INT64)v7);
ExReleaseSpinLockExclusiveFromDpcLevel(v1);
MiInsertUnusedSegment(v7);
v10 = v9;
ExReleaseSpinLockExclusiveFromDpcLevel(v8);
__writecr8(v5);
if( v10 )
MiReturnCrossPartitionSectionCharges((_MI_CROSS_PARTITION_CHARGES *)a1, 1i64, v10);
}
else
{
ExReleaseSpinLockExclusiveFromDpcLevel(v1);
__writecr8(v5);
}
v3 = ExAcquireSpinLockExclusive(v1);
}
ExReleaseSpinLockExclusiveFromDpcLevel(v1);
result = v5;
__writecr8(v5);
return result;
}Referenced by:
MiDrainCrossPartitionUsage