1 / 12
文档名称:

基于PassThru的NDIS中间层驱动程序扩展.docx

格式:docx   大小:20KB   页数:12页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

基于PassThru的NDIS中间层驱动程序扩展.docx

上传人:guoxiachuanyue 2021/1/18 文件大小:20 KB

下载得到文件列表

基于PassThru的NDIS中间层驱动程序扩展.docx

文档介绍

文档介绍:| 抽齐 - Medi=a X
+ ”一一E一一一
BIC Briver
基于 PaSsThru 的 ND
]
IS
中间层驱动程序扩展
三 NDIS
驱动程序的数据处理流程
厨二
系。
通常一个NDIS Protocol Driver的上边沿导出TDI接口,并在其 下边沿向NDIS注册一组Protocolxxx操作例程;一个NDIS Miniport Drive r则在其下边沿通过NDIS接口操作物理网络设备,并在其上边沿向 NDIS
注册一组Miniportxxx操作例程。当一个中间层介入的时候,必需遵守那个 规则,因此,中间层驱动对上层来讲,扮演一个 Miniport Driver的角色,
它在上边沿向NDIS注册一组Miniportxxx函数;关于下层 Miniport Driver 来讲,中间层驱动扮演一个Protocol Driver的角色,因此它在下边沿向ND IS 注册一组 Protocolxxx 函数。Miniport Driver 通过调用 NdisMRegisterMin iport向NDIS注册一组MiniportXxx函数。其中原型如下:
NDIS_STATUS NdisMRegisterMiniport(
IN NDIS_HANDLE NdisWrapperHandle,
IN PNDIS_MINIPORT_CHARACTERISTICS Mi nip
ortCharacteristics,
IN UINT CharacteristicsLength
);
其中,NdisWrapperHandls是之前通过调用 NdisMInitializeWrapper 取得的句柄MiniportCharacteristics包含一组MiniportXxx函数指针。
Protocol Driver 通过调用 NdisRegisterProtocol 向 NDIS 注册一组 ProtocolXxx函数。其中原型如下:
VOID NdisRegisterProtocol(
OUT PNDIS_STATUS Status,
OUT PNDIS_HANDLE NdisProtocolHandle,
IN PNDIS_PROTOCOL_CHARACTERISTICS Proto colCharacteristics,
IN UINT CharacteristicsLength
);
其中,Protocolcharacteristics包含一组 ProtocoIXxx 函数。由于 N
DIS Intermediate Driver 的双重性,它需要调用 NdisIMRegisterLayeredMin iport 向 NDIS 注册,并向上层导出一组 MiniportXxx 函数,之后,调用 Nd isRegisterProtocol向NIDS注册,并向下层导出一组 ProtocoIXxx函数。当 一个 NDIS 中间层介入后,如图二所示。
NDIS 数据发送流程:
当上层协议驱动要发数据时,调用NdisSend/NdisSendPacket要求
NDIS 发送数据包, NDIS 将会调用紧接其下的中间层驱动的 MiniportSend/ MiniportSendPackets,中间层驱动 MiniportSend/MiniportSendPackets 有机会 在那个地点对包进行必要的操作,然后,中间层驱动再次调用 NdisSend/Nd isSendPackets请NDIS发送数据包,NDIS将调用其下层的Miniport Driver 的 MiniportSend/MiniportSendPackets,底层 MiniportSend /MiniportSendPac kets通过NDIS接口操纵物理网络设备,将数据发送出去。在上层要求发送 数据包时,上层分配了有关的资源 (如内存),期望在下层完成发送动作后, 能够及时的收回有关的资源,因此,当上层调用 NdisSend/NdisSendPackets 返回 NDIS_STATUS_PENDING 以外的任何值时, 上层就能够开释资源了, 如果得到返回的结果是 NDIS_STATUS_PENDING 话,讲明下层还没有完成 发送要求,以后,等下层最终完成发送要求时,下层调用 NdisMSendComp lete要求NDIS通知上层能够开释资源了,因此NDIS调用上层注册的Prot ocolSendComplete函数,上层在这它的ProtocolSendComplete中开释了资源 后,再次调用 NdisMSendComplete要求NDIS通知更