NDIS
--------Sophia Xie
NDIS:Network Driver Interface Specification,即网络驱动接口规范。NDIS 的主要目
的就 是为 NIC(网络接口卡,Network Interface Cards)制定出标准的 API 接口。它横跨
传输层、网络层和数据链路层,定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信
接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡
通信。
NDIS 同时也提供一个函数库(又时也称作 wrapper),这个库中的函数可以被 MAC 驱
动调用,也可以被高层的协议(例如 TCP/IP)驱动调用。NDIS 为网络驱动程序创建了一
个完整的开发环境,只需调用 NDIS 函数,而不用考虑操作系统的内核以及与其他驱动程序
的接口问题,从而使得网络驱动程序可以从与操作系统的复杂通讯中分离,极大地方便了网
络驱动程序的编写。另外,利用 NDIS 的封装特性,可以专注于一层驱动的设计,减少了设
计的复杂性,同时易于扩展驱动程序栈。
wince 网络驱动架构图如下图所示:
Wince 网络驱动架构
在 WinCE 中,开发网卡驱动就是写一个 Miniport Driver,导出相应的 Miniport 接口函
数,调用 NDIS 的接口访问底层硬件。Miniport driver 直接管理硬件网卡,它使用 NDIS
Library 中的接口函数读写硬件网卡,同时对上层导出 Miniport 接口函数,这样上层通过该
接口可以配置网卡,发送和接收网络数据包。
NDIS 支持三种类型的网络驱动程序:
网卡驱动程序(NICdrivers):网卡驱动程序是网卡与上层驱动程序通信的接口,它负责接
收来自上层的数据包,或将数据包发送到上层相应的驱动程序,同时它还完成处理中断等工
作。
中间驱动程序(Intermediateprotocoldrivers):中间驱动程序位于网卡驱动程序和协议驱
动程序之间,它向上提供小端口(Minport)函数集,向下提供协议(protocol)函数集,因此对于上
层驱动程序而言,它是小端口驱动程序。对于底层的驱动程序,它是协议驱动程序。
协议驱动程序(Upperlevelprotocoldrivers):协议驱动程序执行具体的网络协议,如
IPX/SPX、TCP/IP 等。协议驱动程序为应用层客户程序提供服务,接收来自网卡或中间驱动
程序的信息。