Filtering data packets in a manner that promotes efficient flow of data
through a communication path. A filter stack includes one or more filter
instances that may filter data packets that pass through the filter
stack. The filter stack is associated with one or more protocol stacks
that function in communication paths between a computing device and a
network. When filtering instances are inserted to or removed from a
filter stack, associated protocol stacks may remain capable of
transferring data. An abstract interface facilitates inserting and
removing filter instances by passing data to filter drivers that create
filter instances. A filter driver may create multiple filter instances.
Filtering operations associated with filter instances may be bypassed
based on the direction of data flow, control flow, and characteristics of
packets.