Just as it sounds, a generic Stack type with fixed limit of items.

Usage example:
Code:
 Dim stack As New FixedStack(Of Integer)(maxCapacity:=5)
 
 For x As Integer = 0 To 10
     stack.Push(x)
 Next
 
 For Each value As Integer In stack
     Console.WriteLine(value)
 Next
Source-code:
Code:
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Represents a <see cref="Stack(Of T)"/> with a fixed capacity.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <example> This is a code example.
''' <code>
''' Dim stack As New FixedStack(Of Integer)(maxCapacity:=5)
''' 
''' For x As Integer = 0 To 10
'''     stack.Push(x)
''' Next
''' 
''' For Each value As Integer In stack
'''     Console.WriteLine(value)
''' Next
''' </code>
''' </example>
''' ----------------------------------------------------------------------------------------------------
''' <typeparam name="T">
''' The type of the stack items.
''' </typeparam>
''' ----------------------------------------------------------------------------------------------------
<Serializable>
Public NotInheritable Class FixedStack(Of T) : Inherits Stack(Of T)

#Region " Properties "

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Gets the maximum capacity of this <see cref="FixedStack(Of T)"/>, 
    ''' bottom items beyond the specified capacity are discarded when a new item is pushed.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <value>
    ''' The maximum capacity of this <see cref="FixedStack(Of T)"/>.
    ''' </value>
    ''' ----------------------------------------------------------------------------------------------------
    Public ReadOnly Property MaxCapacity As Integer
        <DebuggerStepThrough>
        Get
            Return Me.maxCapacityB
        End Get
    End Property
    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' ( Backing field )
    ''' The maximum capacity of this <see cref="FixedStack(Of T)"/>.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    Private ReadOnly maxCapacityB As Integer

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Gets the amount of free slots onto this <see cref="FixedStack(Of T)"/>.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <value>
    ''' The amount of free slots.
    ''' </value>
    ''' ----------------------------------------------------------------------------------------------------
    Public ReadOnly Property FreeSlots As Integer
        <DebuggerStepThrough>
        Get
            Return (Me.maxCapacityB - Me.Count)
        End Get
    End Property

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Gets a value indicating whether this <see cref="FixedStack(Of T)"/> is empty.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <value>
    ''' <see langword="True"/> if empty; otherwise, <see langword="False"/>.
    ''' </value>
    ''' ----------------------------------------------------------------------------------------------------
    Public ReadOnly Property IsEmpty As Boolean
        <DebuggerStepThrough>
        Get
            Return (Me.Count = 0)
        End Get
    End Property

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Gets a value indicating whether this <see cref="FixedStack(Of T)"/> is full.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <value>
    ''' <see langword="True"/> if full; otherwise, <see langword="False"/>.
    ''' </value>
    ''' ----------------------------------------------------------------------------------------------------
    Public ReadOnly Property IsFull As Boolean
        <DebuggerStepThrough>
        Get
            Return (Me.Count = Me.maxCapacityB)
        End Get
    End Property

#End Region

#Region " Constructors "

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Prevents a default instance of the <see cref="FixedStack(Of T)"/> class from being created.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    <DebuggerNonUserCode>
    Private Sub New()
    End Sub

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Initializes a new instance of the <see cref="FixedStack(Of T)"/> class.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <param name="maxCapacity">
    ''' The maximum stack capacity.
    ''' <para></para>
    ''' Bottom items beyond the specified capacity are discarded when a new item is pushed.
    ''' </param>
    ''' ----------------------------------------------------------------------------------------------------
    <DebuggerStepThrough>
    Public Sub New(ByVal maxCapacity As Integer)

        Me.maxCapacityB = maxCapacity

    End Sub

#End Region

#Region " Public Methods "

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Inserts an object at the top of this <see cref="FixedStack(Of T)"/>.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <param name="item">
    ''' The object to push onto the stack.
    ''' <para></para>
    ''' The value can be null for reference types.
    ''' </param>
    ''' 
    ''' <param name="throwIfFullSlots">
    ''' If <see langword="True"/>, a <see cref="OverflowException"/> is thrown if there isn't any free slot to add the item.
    ''' <para></para>
    ''' If <see langword="False"/> and there isn't any free slot to add the item, the bottom item on the stack is discarded.
    ''' </param>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <exception cref="OverflowException">
    ''' Any slot availiable.
    ''' </exception>
    ''' ----------------------------------------------------------------------------------------------------
    <DebuggerStepThrough>
    Public Shadows Sub Push(ByVal item As T, Optional ByVal throwIfFullSlots As Boolean = False)

        If Not (Me.IsFull) Then
            MyBase.Push(item)

        ElseIf (Me.IsFull) AndAlso (throwIfFullSlots) Then
            Throw New OverflowException("Any slot availiable.")

        Else ' (Me.IsFull)
            Dim clonedStack As New Stack(Of T)(Me)
            clonedStack.Pop()

            MyBase.Clear()
            For Each value As T In clonedStack
                MyBase.Push(value)
            Next
            MyBase.Push(item)

            clonedStack.Clear()

        End If

    End Sub

#End Region

End Class