ExInsertPoolTag

UINT64 __stdcall ExInsertPoolTag(UINT64 Tag, VOID *Va, UINT64 NumberOfBytes, POOL_TYPE PoolType, UINT64 Flags){
  UINT8 Pattern; 
  __int64 v9; 
  UINT64 v10; 
  __int64 v11; 
  int v12; 
  __int64 v13; 
  UINT8 *v14; 
  unsigned int v15; 
  int v16; 
  __int64 v17; 
  volatile signed __int32 *v18; 
  int v19; 
  __int64 v20; 
  volatile signed __int32 v22; 
  INT64 v23; 
  INT64 v24; 
  __int64 v25; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  UINT8 *v27; 
  Pattern = 0;
  LOWORD(v9) = 0;
  if( (Flags & 1) != 0 )
  {
    v23 = (INT64)Va + NumberOfBytes;
    if( (((_DWORD)Va + (_DWORD)NumberOfBytes) & 0xFFF) != 0 )
    {
      v9 = (unsigned __int16)(4096 - (v23 & 0xFFF));
      Pattern = LOBYTE(KUSER_SHARED_DATA.TickCount.LowPart) | 1;
      memset(v23, LOBYTE(KUSER_SHARED_DATA.TickCount.LowPart) | 1u);
    }
  }
  if( NumberOfBytes >= NumberOfBytes + 4095 )
    return 0i64;
  v10 = (NumberOfBytes + 4095) & 0xFFFFFFFFFFFFF000ui64;
  LOWORD(v24) = v9;
  if( !(unsigned int)ExpAddTagForBigPages(Va, 0x546E6F43ui64, v10, PoolType, v24, Pattern) )
    return 0i64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  if( PoolHitTag == 1416523587 )
    __debugbreak();
  v11 = 8i64;
  if( (PoolType & 0x20) != 0 )
  {
    v14 = (UINT8 *)ExpSessionPoolTrackTable;
    v12 = ExpSessionPoolTrackTableMask;
    v13 = ExpSessionPoolTrackTableSize;
  }
  else
  {
    v12 = PoolTrackTableMask;
    v13 = PoolTrackTableSize;
    v14 = (&ExPoolTagTables)[*((unsigned int *)KeGetPcr() + 105)];
  }
  v25 = v13;
  v15 = v12 & 0x7DA697E6;
  v27 = v14;
  v16 = v12 & 0x7DA697E6;
  while( 1 )
  {
    v17 = 56i64 * v15;
    v18 = (volatile signed __int32 *)&v14[v17];
    v19 = *(_DWORD *)&v14[v17];
    if( v19 == 1416523587 )
      break;
    if( v19 )
    {
LABEL_16:
      v14 = v27;
      v15 = v12 & (v15 + 1);
      if( v15 == v16 )
      {
        ExpInsertPoolTrackerExpansion(0x546E6F43ui64, v10, PoolType);
        return 1i64;
      }
    }
    else
    {
      if( (PoolType & 0x20) != 0 )
        goto LABEL_22;
      v22 = *(_DWORD *)((char *)PoolTrackTable + v17);
      if( v22 )
      {
        v14 = v27;
        *v18 = v22;
        v16 = v12 & 0x7DA697E6;
      }
      else
      {
        v16 = v12 & 0x7DA697E6;
LABEL_22:
        if( v15 == v13 - 1 )
          goto LABEL_16;
        if( (PoolType & 0x20) != 0 )
        {
          _InterlockedCompareExchange(v18, 1416523587, 0);
          v14 = v27;
        }
        else
        {
          KeAcquireInStackQueuedSpinLock(&ExpTaggedPoolLock, &LockHandle);
          if( !*(_DWORD *)((char *)PoolTrackTable + v17) )
          {
            *(_DWORD *)((char *)PoolTrackTable + v17) = 1416523587;
            *v18 = 1416523587;
          }
          KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
          __writecr8(LockHandle.OldIrql);
          v13 = v25;
          v14 = v27;
          v16 = v12 & 0x7DA697E6;
        }
      }
    }
  }
  if( (PoolType & 1) != 0 )
  {
    v20 = 10i64;
  }
  else
  {
    v11 = 2i64;
    v20 = 4i64;
  }
  _InterlockedIncrement64((volatile signed __int64 *)&v18[v20]);
  _InterlockedExchangeAdd64((volatile signed __int64 *)&v18[v11], v10);
  return 1i64;
}

Referenced by:

MiAllocateContiguousMemory