驱动开发:内核封装TDI网络通信接口
在上一篇文章《驱动开发:内核封装WSK网络通信接口》
中,LyShark
已经带大家看过了如何通过WSK接口实现套接字通信,但WSK实现的通信是内核与内核模块之间的,而如果需要内核与应用层之间通信则使用TDK会更好一些因为它更接近应用层,本章将使用TDK实现,TDI全称传输驱动接口,其主要负责连接Socket
和协议驱动,用于实现访问传输层的功能,该接口比NDIS
更接近于应用层,在早期Win系统中常用于实现过滤防火墙,同样经过封装后也可实现通信功能,本章将运用TDI接口实现驱动与应用层之间传输字符串,结构体,多线程收发等技术。
- TDI传输字符串
- TDI多线程收发
- TDI传数结构实现认证
TDI 传输字符串: 服务端在应用层侦听,客户端是驱动程序,驱动程序加载后自动连接应用层并发送消息。
首先来看应用层(服务端)
代码,具体我就不说了,来看教程的都是有基础的。
// 署名权 |
再来是驱动层代码,如下所示;
// 署名权 |
首先运行应用层开启服务端侦听,然后运行驱动程序,会输出如下信息;
TDI 多线程收发包: 实现驱动内部发送数据包后开启一个线程用于等待应用层返回并输出结果,多线程收发在发送数据包后需要创建新的线程等待接收。
首先是服务端代码。
// 署名权 |
驱动程序代码如下,RecvThreadProc
主要负责数据接收,SendThreadData
负责数据发送。
// 署名权 |
运行应用层服务端等待侦听,运行驱动程序输出如下效果;
TDI 传数结构实现认证: 驱动内部发送结构体给应用层,应用层验证结构体成员,此功能可实现对驱动程序的控制机制,例如是否允许驱动加载卸载等,通常用于驱动辅助认证。
应用层代码
// 署名权 |
驱动层代码
// 署名权 |
运行应用层服务端,并运行驱动程序,则会验证该驱动是否合法,如果合法则加载不合法则拒绝;