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