Protocol Driver Buffer Management
A protocol driver must manage NET_BUFFER_LIST structure pools and NET_BUFFER structure pools for send operations. To create these pools, drivers call the following functions:
Protocol drivers can use the following functions to allocate structures from the pools:
NdisAllocateNetBufferAndNetBufferList
Calling NdisAllocateNetBufferAndNetBufferList is more efficient than calling NdisAllocateNetBufferList followed by NdisAllocateNetBuffer. However, NdisAllocateNetBufferAndNetBufferList only creates one NET_BUFFER structure on the NET_BUFFER_LIST structure. To use NdisAllocateNetBufferAndNetBufferList, the driver must set the AllocateNetBuffer parameter to TRUE when it calls NdisAllocateNetBufferListPool.
Protocol drivers can use OID requests to query the back-fill and context space requirements of the underlying drivers. A protocol driver should determine the back-fill and context requirements for a binding in the Opening or Restarting states. The driver should allocate sufficient back-fill and context space for the entire stack. If necessary, a protocol driver can free the pools and reallocate them in the Restarting state.
Protocol drivers use the following functions to free the pools:
Protocol drivers use the following functions to free the structures allocated from the pools:
Drivers should free NET_BUFFER structures allocated with NdisAllocateNetBuffer before freeing the associated NET_BUFFER_LIST structure. NET_BUFFER structures allocated with NdisAllocateNetBufferAndNetBufferList are freed when the driver calls NdisFreeNetBufferList for the associated NET_BUFFER_LIST structure.