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