ExPoolCleanupExpansionTable
NTSTATUS __stdcall ExPoolCleanupExpansionTable(PVOID BugCheckParameter3){
UINT64 v1;
UINT64 v2;
__int64 v4;
int v5;
PVOID v6;
__int64 v8;
int v9;
unsigned int v10;
UINT8 *v11;
int v12;
int v13;
v2 = v1;
if( PoolHitTag == 1819242320 )
__debugbreak();
v8 = HIDWORD(PerfGlobalGroupMask);
LODWORD(v8) = *((_DWORD *)KeGetPcr() + 105);
v9 = PoolTrackTableMask;
v10 = PoolTrackTableMask & 0x40DEDA5;
v11 = (&ExPoolTagTables)[v8];
v12 = PoolTrackTableMask & 0x40DEDA5;
do
{
while( 1 )
{
v4 = 56i64 * v10;
v5 = *(_DWORD *)&v11[v4];
if( v5 == 1819242320 )
{
_InterlockedIncrement64((volatile signed __int64 *)&v11[v4 + 24]);
_InterlockedExchangeAdd64((volatile signed __int64 *)&v11[v4 + 8], -(__int64)v2);
goto LABEL_5;
}
if( v5 )
break;
v13 = *(_DWORD *)((char *)PoolTrackTable + v4);
if( !v13 )
break;
*(_DWORD *)&v11[v4] = 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