How to drop NDIS_PACKETS as they leave

I have written an Intermediate NDIS driver using the Numega Driver Studio
product.

The driver basically has wrappers to the MS NDIS function calls.

My question is as follows:

  1. On the sending method I have in my driver, I notice that sometimes I
    have 1, 2, 3 or even 4 chained NDIS buffers. Here are the scenarios:

1 NDIS Buffer
Contains Ethernet Frame (14 bytes) + IP Header (20 bytes) + TCP Header

2 NDIS Buffers
Buffer1 = Ethernet Frame (14 bytes) + IP Header (20 bytes)
Buffer2 = TCP Header

3 NDIS Buffers
Buffer1 = Ethernet Frame (14 bytes)
Buffer2 = IP Header (20 Bytes)
Buffer3 = ICMP or UDP header.

My question is as follows:
How can I properly free up these NDIS buffers (if need be) and what return
code should I use? NDIS_STATUS_FAILURE???

Is there a method how and what protocols (IP, TCP, UDP, ICMP, ARP/RARP)
are stored in the NDIS buffers? For example, in my 2 Buffer example
above, Ethernet and IP are always in Buffer1 and TCP in Buffer2.

Thank you,
Angel