NDIS驱动分为3层
https://blog.csdn.net/youyou519/article/details/94669104
协议层驱动
绑定再所有网卡上,所以能截获接收到的包,但无法截获发送的包
中间层驱动
(P部分)绑定在了所有小端口驱动上(M部分)也被所有的协议驱动绑定,收发都能拦截。所有中间层小端口部分负责处理发送的包,协议部分负责处理接受的包
小端口驱动
网卡驱动
NDIS驱动开始
NdisMInitializeWrapper初始化NDIS句柄,
NdisIMRegisterLayeredMiniport注册小端口特征并获得DriverHandle,提供一组回调函数,用来拦截发送数据包,进行分析解析。
NdisRegisterProtocol注册协议特征并获得ProtHandle,拦截接受数据包,进行能分析解析。
NdisIMAssociateMiniport。将DriverHandle与ProtHandle关联。
收发包处理(协议部分的PtReceive(),小端口部分的MpSend())
协议分析(接收,拒绝,修改)
代码部分
在DriverEntry做了小端口,协议部分初始化,创建设备对象符号链接。初始化各种协议头。