MiUnlinkUnusedControlArea
_QWORD *__fastcall MiUnlinkUnusedControlArea(INT64 a1){
__int64 v2;
INT64 v3;
_QWORD *result;
_QWORD *v5;
_QWORD **v6;
v2 = *(_QWORD *)(qword_140C4E388 + 8i64 * (*(_WORD *)(a1 + 60) & 0x3FF));
v3 = MiComputePagedPoolSegmentBytes(a1);
if( (*(_DWORD *)(a1 + 56) & 0x40000) != 0 && (*(_DWORD *)(v2 + 1348))-- == 1 )
{
KeCancelTimer((PKTIMER)(v2 + 1616));
*(_BYTE *)(v2 + 1680) = 0;
}
result = (_QWORD *)(a1 + 8);
v5 = *(_QWORD **)(a1 + 8);
if( v5[1] != a1 + 8 || (v6 = *(_QWORD ***)(a1 + 16), *v6 != result) )
__fastfail(3u);
*v6 = v5;
v5[1] = v6;
*(_DWORD *)(a1 + 56) &= ~0x8000000u;
*(_QWORD *)(a1 + 16) = a1 + 8;
*result = result;
*(_QWORD *)(v2 + 1696) -= v3;
_InterlockedExchangeAdd64(&qword_140C4C6D8, -v3);
return result;
}Referenced by:
MiDeleteCachedSegment
MiMakeUnusedSegmentDeleteOnClose
MiProcessDeleteOnClose
MiRemoveUnusedSegment