支持协议驱动程序和筛选器驱动程序中的Header-Data拆分

NDIS 6.0 及更高版本的协议驱动程序和筛选器驱动程序必须支持使用非连续缓冲区中的标头和数据接收指示。

不得假定 NET_BUFFER 结构中只有一个 MDL。 协议驱动程序和筛选器驱动程序不需要执行任何特定的操作来支持标头数据拆分注册。 但是,驱动程序接收处理代码必须处理 MDL 链中的多个 MDL,并且必须使用以下 NDIS MDL 宏来访问 MDL 链:

使用拆分缓冲区时,与 NET_BUFFER_DATA 结构) DataLength 成员中的 NET_BUFFER 结构 (关联的数据长度将拆分到多个 MDL 中。 例如,如果协议驱动程序尝试访问第一个 MDL 中的整个数据缓冲区,则该驱动程序可能会访问无效数据。

注意 接收指示调用返回到微型端口驱动程序后,微型端口驱动程序可以回收标头 MDL。 在接收指示调用返回到微型端口驱动程序后,上报驱动程序或其客户端不得访问标头 MDL。 即使微型端口驱动程序未指示接收的数据状态为NDIS_RECEIVE_FLAGS_RESOURCES,此限制也适用。