贵城乡建设官方网站,青岛九二网络科技有限公司,阿里云网站模板,php婚庆网站源码基于Passthru的NDIS开发的个人理解 这几天对NDIS的学习#xff0c;基本思路是#xff1a;首先熟悉理论知识→然后下载一个例子进行研究→最后例子自己模仿扩展→最最后尝试自己写一个新的。 Passthru是微软NDIS自己写的一个框架驱动#xff0c;NDIS开发者可以在此框架上进行… 基于Passthru的NDIS开发的个人理解 这几天对NDIS的学习基本思路是首先熟悉理论知识→然后下载一个例子进行研究→最后例子自己模仿扩展→最最后尝试自己写一个新的。 Passthru是微软NDIS自己写的一个框架驱动NDIS开发者可以在此框架上进行扩展做二次开发。NDIS提供一些基本操作函数Passthru里的函数就是使用的这些基本函数做成的一个网络驱动。 基于Passthru的扩展就是自己在此驱动的基础上在封装一次比如说为MyPassthru将NDIS里面的函数封装在自己自定义函数里方便外界调用。最主要的函数就是NDIS里面的PtReceive或PtReceivePacket(负责网络封包的接收) MPSend或MPSendPacket(负责发送上层准备发送到网络的数据包)这四个回调函数是封包截获和过滤的关键。 总体上基于NDIS的程序分为应用程序、驱动程序以及两者的通信三大部分 1基于NDIS 中间层的驱动程序passthru.sys该程序运行于内核态主要有以下功能模块A. 网络封包截获在数据链路层和网络层之间捕获所有接收到的封包B. 网络封包过滤根据过滤规则决定每一个封包的行为放行或丢弃C. 网络封包发送将用户构造的封包发送至网络中 2应用层的测试程序NdisDemo.exe应用程序主要起着控制驱动程序行为的作用主要有以下功能模块A. 封包解析对底层的封包进行分析B. 驱动设置控制驱动的的行为如缓冲数量、过滤规则等C. 封包构造构造任意数据包并控制驱动程序发送该封包 3驱动程序与应用程序之间的通信A. 本文采用文献中介绍的共享内存方式。应用层在获取共享内地址后可以直接对内存进行操作从而减少了数据复制的次数B. 为减少应用程序在对数据包解析时驱动程序发生丢包现象在内核中申请一个比较大的缓冲区作为共享内存通过循环队列的方式对缓冲区进行存取操作C. 为进一步提高效率驱动程序在缓存一定数量之后才以事件的方式通知应用程序。同时采用定时器的机制保证所有数据能被应用程序读取。 其中第一部分只需开发者了解明白即可关键是处理第二、三部分和这三者之间的联系。当然第二部分只是一个例子你也可以写成自己的一个库到时是具体的应用程序直接调用库。 posted on 2013-07-28 15:43 RodYang 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/RodYang/p/3221190.html