微型端口驱动程序通常从 MiniportInitializeEx 调用 NdisAllocateNetBufferListPool,以创建NET_BUFFER_LIST结构的池。 微型端口驱动程序使用这些结构来指示收到的数据。
通常,分配NET_BUFFER_LIST结构的微型端口驱动程序将在该NET_BUFFER_LIST结构上分配并排队一 个NET_BUFFER 结构。 在分配NET_BUFFER_LIST结构池时预先分配NET_BUFFER结构,比同时单独分配NET_BUFFER_LIST结构和NET_BUFFER结构更为高效。
微型端口驱动程序可以调用 NdisAllocateNetBufferListPool ,并将 AllocateNetBuffer 参数设置为 TRUE ,以指示已预先分配 NET_BUFFER 结构。 在这种情况下,驱动程序从池中分配的每个NET_BUFFER_LIST结构都预先分配了一个NET_BUFFER结构。 此类驱动程序必须调用 NdisAllocateNetBufferAndNetBufferList,以便从该池中分配结构体。
通常,微型端口驱动程序会从 MiniportInitializeEx 调用 NdisAllocateNetBufferAndNetBufferList 来分配在随后的接收操作中将需要的尽可能多的缓冲区。 在这种情况下,驱动程序管理可用缓冲区的内部列表。
MiniportReturnNetBufferLists 函数可以准备返回的NET_BUFFER_LIST结构,以便在后续接收指示中重复使用。 尽管 MiniportReturnNetBufferLists 可以将NET_BUFFER_LIST结构返回到池(例如,它可以调用 NdisFreeNetBufferList),但重复使用这些结构可以更高效,而无需将其返回到池。
微型端口驱动程序应在 NDIS 停止适配器时释放所有NET_BUFFER_LIST结构和关联数据。 驱动程序可以调用 NdisFreeNetBufferList 来释放结构和 NdisFreeNetBufferListPool 函数以释放NET_BUFFER_LIST池。