ExPoolCleanupExpansionTable
NTSTATUS __stdcall ExPoolCleanupExpansionTable(PVOID BugCheckParameter3){
UINT64 v1;
UINT64 v2;
__int64 v4;
int v5;
VOID *v6;
__int64 v8;
int v9;
unsigned int v10;
__int64 v11;
int v12;
int v13;
v2 = v1;
if( PoolHitTag == 1819242320 )
__debugbreak();
v8 = (unsigned int)*(&PerfGlobalGroupMask + 1);
LODWORD(v8) = KeGetPcr()->Prcb.Number;
v9 = PoolTrackTableMask;
v10 = PoolTrackTableMask & 0x40DEDA5;
v11 = *((_QWORD *)&WheapDeferredInternalLogsEventLock + v8 + 372);
v12 = PoolTrackTableMask & 0x40DEDA5;
do
{
while( 1 )
{
v4 = 56i64 * v10;
v5 = *(_DWORD *)(v4 + v11);
if( v5 == 1819242320 )
{
_InterlockedIncrement64((volatile signed __int64 *)(v4 + v11 + 24));
_InterlockedExchangeAdd64((volatile signed __int64 *)(v4 + v11 + 8), -(__int64)v2);
goto LABEL_5;
}
if( v5 )
break;
v13 = *(_DWORD *)(v4 + *(&WheapDeferredInternalLogsEventLock + 371));
if( !v13 )
break;
*(_DWORD *)(v4 + v11) = v13;
}
v10 = v9 & (v10 + 1);
}
while( v10 != v12 );
ExpRemovePoolTrackerExpansion(0x6C6F6F50ui64, v2, NonPagedPoolNx);
LABEL_5:
LODWORD(v6) = ExGetHeapFromVA(BugCheckParameter3);
return RtlpHpFreeHeap(v6, BugCheckParameter3, 0i64);
}Referenced by:
ExpInsertPoolTrackerExpansion
MiCheckSessionPoolAllocations