20120816
13.3 中间层驱动发送数据包 (书 P.447 对应 pdf P.473)
13.3.1 发送数据包原理
以 MpSend 为例。
中间层驱动要发送网络数据包,最终都必须调用 NdisSend / NdisSendPackets / NdisCoSendPackets 这个系列的函数。
NdisSend + 适配器上下文 ,将网络数据包 一层一层往下发送,直至为端口驱动,然后发出去。
13.3.2 包描述符“重利用” (书 P.448 对应 pdf P.474)
如何对包进行发送。两种方式:
一、“重利用”(把包描述符不懂的传递下去。)
二、“重申请”(根据收到的包描述符,重建一个新的包描述符,将新建的描述符发送下去。)
本节讲 “重利用”(需要 NDIS 5.1 版本以后才能做)。
But ,即使运行在 NDIS 5.1以后的版本上,也不是所有的包描述符都可以被重利用的。
那么 ,现在先不看“重利用”了,以后再说。
13.3.3 包描述符“重申请” (书 P.451 对应 pdf P.477)
与“重利用”相比,可谓万能。此种方法并不低效,重建包描述符 并非需要重建网络包数据,so其所涉及的内存操作并不多。(即 只是 重建描述符,而非 重建数据包)
需要3步工作:
(1)、调用 NdisAllocatePacketPool,NdisAllocatePacketPoolEx (应在MiniportBindAdapter中进行)
(2)、NdisAllocatePacket 池中分配包描述符
(3)、初始化的工作,设置包描述符。
阅读(1337) | 评论(0) | 转发(0) |