NDIS 6.0 中重新设计了数据打包。 基于 NDIS_PACKET 结构的发送和接收体系结构已替换为基于 NET_BUFFER 和 NET_BUFFER_LIST 结构的体系结构。 NET_BUFFER结构与NDIS_PACKET结构的功能等效。 NET_BUFFER结构为网络数据指定缓冲区(MDL 链),并为 NDIS、协议驱动程序和微型端口驱动程序指定空间。 NET_BUFFER结构可以在NET_BUFFER_LIST结构描述的列表中链接在一起。 NET_BUFFER_LIST结构还提供适用于列表中所有NET_BUFFER结构的带外数据(OOB)数据的存储。
Microsoft下一代网络驱动程序堆栈(包括 TCP/IP 传输和 Winsock)中的所有组件都使用NET_BUFFER数据打包。 在整个驱动程序堆栈中统一的数据打包无需重新打包数据、简化数据处理并减少函数调用数。
为了适应使用NDIS_PACKET结构的较旧驱动程序,NDIS 6.0 会将NDIS_PACKET结构转换为NET_BUFFER结构,反之亦然。 此翻译对 NDIS 驱动程序是透明的。
NDIS 将驱动程序的数据回填要求传播到更高级别的驱动程序。 分配用于发送数据的NET_BUFFER和NET_BUFFER_LIST结构时,较高级别的驱动程序分配足够的数据空间来容纳堆栈中的所有较低级别的驱动程序。 因此,较低级别的驱动程序不必分配额外的缓冲区空间来容纳特定于层的标头。 相反,他们可以使用预先分配的回填空间实现此目的。
有关NET_BUFFER体系结构的详细信息,请参阅 NET_BUFFER 体系结构。