大二暑假,据说拥有驱动开发基础,boss给出了个网络过滤驱动的题目,刚开始以为会是很简单的,就一直在TDI层上着手,后来才发现TDI在xp之后就有可能不支持了,所以在了解其处理流程之后果断专项NDIS中间层协议驱动。
NDIS横跨传输层/网络层/数据链路层,NDIS负责上下层驱动程序间服务原语与驱动程序入口之间的转换,分派消息通知。NDIS提供三个层次的接口:网络接口卡驱动程序(NIC)、中间层驱动程序(MD)和协议驱动程序,中间层协议驱动(MD)是介于NDIS协议驱动程序与小端口驱动程序(网络接口卡驱动程序NIC)之间的驱动。
MD: 中间层协议驱动是网卡驱动和协议驱动之间的桥梁。插入自己的中间层驱动,从而可以截获网络封包,并重新进行封包、加密、网络地址转换、过滤和认证等操作。可以处理更低级的操作、功能强大,但是编程接口复杂,自动化安装困难,容易导致网络瘫痪。
NIC: 下端直接控制网络接口卡硬件,上端提供接口,处理初始化网卡、停止网卡、发送和接受数据包。
PD: 接收来自网卡或中间驱动程序的信息。
windows内核网络驱动的总体格局(从下至上):小端口驱动实现了对网卡硬件的驱动,包括对其中各个寄存器的访问、中断处理等。协议驱动将链路层、网络层和传输层集合在一起的一个驱动模块。上层是传输驱动界面(TDI)。TDI上层是用来实现Socket机制的AFD驱动模块。
之后要补上学习的是(windows内核情景分析第十章 第一小节)
今天遇到的bug,NdisMRegisterDevice函数的一个参数声明错误
NDIS_ST