以下是《寒江独钓》NDIS相关章节的学习笔记
协议驱动架构
1.以太网包和协议驱动
1.1以太网包结构
左边是低地址,右边是高地址
传输层发送TCP/UDP包 然后在网络层再加上IP信息封装成IP包,协议又把IP包封装成以太网包发送出去,这些操作都是协议驱动做到的。但是协议驱动难以干预其他应用程序接受或者发送包,所以一般不用于防火墙。
1.2 NDIS网络驱动
NDIS是NetWork Driver Interface Specification(网卡驱动接口标准)的简写,从名字上可以看出这个驱动是一组定义好的函数接口的集合,厂商开发的时候只需要调用相关的API完成功能即可。
NDIS网络驱动有3种,分别是:协议驱动、小端口驱动和中间层驱动。
1.3NDIS协议驱动编写步骤
1.在DriverEntry中填写协议特征(实际上就是协议的回调函数列表)
2.在DriverEntry中使用内核API函数NdisRegisterProtocolDriver,把自己注册成协议驱动
3.系统会对每个实际存在的网卡实例,调用本协议驱动在协议特征集合中提供的一个回调函数。
4.发生各种事件时(比如网卡接收到一个新的数据包),特征中的某个函数也会被调用,协议的开发者实现这些函数,就可以在其中决定如何处理接收到的数据包了。
5.当应用层试图发出一个以太网包时,可以打开这个协议并发出请求(socket或者其他设备接口)