指示已接收以太网帧

Windows TCP/IP 协议驱动程序对接收以太网帧施加了一组要求。 任何源自接收以太网帧指示或修改的驱动程序接收基础驱动程序的指示都必须支持 TCP/IP 施加的一般要求。 这些驱动程序包括以太网微型端口驱动程序、MUX 中间驱动程序和筛选器驱动程序。

注意 如果驱动程序不符合这些要求,则过度配置驱动程序 (,例如 TCP/IP 传输、MUX 中间驱动程序和筛选器驱动程序) 的行为可能会不可预知。

源自以太网接收指示的驱动程序必须支持以下要求:

  • 驱动程序必须为接收的以太网帧分配 NET_BUFFER_LIST 结构。 每个NET_BUFFER_LIST结构都必须包括带外 (OOB) 特定用途所需的NET_BUFFER_LISTNetBufferListInfo 成员中定义的数据。

  • 驱动程序必须为帧分配 NET_BUFFER 结构,并将其链接到 NET_BUFFER_LIST 结构。 在指示接收的数据时,以太网微型端口必须将 一个 NET_BUFFER结构分配给 NET_BUFFER_LIST 结构。 此限制仅适用于以太网接收路径。 它不适用于其他媒体类型,例如本机 802.11 无线 LAN 接口。 或 NDIS 一般。

  • 从 NDIS 6.1 开始,在某些情况下, NET_BUFFER 结构可以与接收的以太网帧的多个内存描述符列表相关联, (MDL) 。 尽管 NET_BUFFER_LIST 结构必须包含单个 NET_BUFFER 结构,但使用多个 MDL 允许驱动程序将接收的数据包数据拆分为单独的缓冲区。

    例如,支持标头数据拆分接口的以太网驱动程序使用 与单个NET_BUFFER 结构关联的多个 MDL 的链接列表拆分收到的以太网帧。 有关详细信息,请参阅 标头-数据拆分

    出于简单性和性能原因,我们强烈建议不支持标头数据拆分的驱动程序为每个 NET_BUFFER 结构只使用一个 MDL。

    注意 在 NDIS 6.0 for Windows Vista 中,每个 NET_BUFFER 结构必须仅包含一个 MDL。

  • 驱动程序不得在 IP 标头、IPv4 选项、IPsec 标头、IPv6 扩展标头或上层协议标头的中间拆分收到的以太网帧,除非第一个 MDL 包含的字节数至少与为查找头大小指定的 NDIS 相同。

如果此类拆分帧符合上述列表项中定义的限制,则 NDIS 协议和筛选器驱动程序必须在接收指示中支持拆分以太网帧。 这些限制可确保协议和筛选器驱动程序与将来的 Windows 版本兼容。