过滤驱动开发笔记(2)
来源:互联网 发布:blk黑水 淘宝 编辑:程序博客网 时间:2024/06/12 04:34
NDIS确实挺复杂,找到了一篇比较完整的资料,也收集了别人的一些心得。虽然算是有些了解,但该怎么做,还是一头雾水。后来终于知道,原来Windows 2003 DDK有一套源代码叫Passthru,已经把框架搭好了。
刚开始有个概念一直搞不清楚:底层面向连接和面向无连接。但是很多实际经验的文章都没提到这个差别,Passthru中也没有实现DDK帮助中提到的面向连接的函数。现在明白了,以太网、FDDI、令牌网都是面向无连接的,而ATM是面向连接的网络。我只关心以太网,所以面向连接的部分与我无关了。
Passthru有几个关键函数,做个简短说明:
1.DriverEntry,在文件passthru.c中,所有驱动程序都有这么个入口,在这里注册各种接口函数。如果需要自行编写接口函数,可在这里修改。一些全局变量的初始化也可以在这里进行。
2.PtDispatch,在文件passthru.c中,在这里跟应用层沟通信息,通常是接收来自应用层的指令,也可以传回一些信息。
3.ProtocolBindAdapter,该函数在DriverEntry中注册为PtBindAdapter,在文件protocol.c中,功能为绑定网卡,每个网卡被启用时,系统自动调用该函数进行绑定。
4.ProtocolUnbindAdapter,该函数在DriverEntry中注册为PtUnbindAdapter,在文件protocol.c中,功能为网卡的解除绑定,与ProtocolBindAdapter相对。
5.ProtocolReceive,该函数在DriverEntry中注册为PtReceive,在文件protocol.c中,实现数据包的接收功能,它接收到的可能不是完整的包,但是一个基础函数,必须实现。
6.ProtocolReceivePacket,该函数在DriverEntry中注册为PtReceivePacket,在文件protocol.c中,实现完整数据包的接收,推荐实现,可提高效率。
7.MiniportSend,该函数在DriverEntry中注册为MPSend,在文件miniport.c中,实现单数据包发送功能。
8.MiniportSendPackets,该函数在DriverEntry中注册为MPSendPackets,在文件miniport.c中,实现多数据包发送功能。调用MiniportSendPackets还是MiniportSend取决于注册了哪一个函数。默认情况下,DriverEntry注册的是MiniportSendPackets。
还有其他的一些函数,比如ProtocolSendComplete等,也是开发中间层驱动经常关注的,但在我的需求中,只要求过滤数据包,不做缓存、修改等操作,无须考虑。
- 过滤驱动开发笔记(2)
- 过滤驱动开发笔记(1)
- 过滤驱动开发笔记(3)
- 过滤驱动开发笔记(4)
- 过滤驱动开发笔记(5)
- 过滤驱动笔记
- NDIS过滤驱动开发手记(完成)
- 文件过滤驱动开发
- 文件过滤驱动开发
- 文件过滤系统驱动开发Filemon学习笔记
- VC文件过滤系统驱动开发Filemon学习笔记
- 【转帖】文件过滤系统驱动开发Filemon学习笔记
- 文件过滤系统驱动开发Filemon学习笔记
- 文件过滤系统驱动开发Filemon学习笔记
- 【转帖】文件过滤系统驱动开发Filemon学习笔记
- 文件过滤系统驱动开发Filemon学习笔记
- 文件过滤系统驱动开发Filemon学习笔记
- VC文件过滤系统驱动开发Filemon学习笔记
- updateprogress改进用法
- 【从黑盒到灰盒】如何测试概率?
- oracle积累2
- SQLite3 驱动支持的SQL列类型
- 40种网页常用小技巧(JavaScript)
- 过滤驱动开发笔记(2)
- 为什么在CSDN群里说了句楼上发的图什么意思,不到十分钟..就被踢出来了????
- 源于网络 MSDN 翻译 VC++内联汇编
- 递归函数最终会结束
- updateprogress用法技巧
- java socket编程
- PHP安装问题:编译安装php5.2.0时出错解决方案
- Error creating bean with name 'transactionManager' defined in file
- g++ gcc 结合gdb调试运行程序