基于Passthru的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Conversion to Dalvik format failed with error 1

如题,解决办法是将工程中的 Android Private Libraries移除即可

char类型包括数字吗java_Java char 与 Character

1. java中char类型占2个字节、16位能够存放汉子,字母和数字占一个字节,一个字节8位,中文占2个字节,16位;java2. char类型赋值编码char a’a’; //任意单个字符,加单引号。char a’中’;//任意单个中文字&am…

HDOJ 4253 Two Famous Companies 二分+MST

题目意思:给出n个点,m条边,边分为两种,一种是A公司的,一种是B公司的。边上有权值, 问用n-1条边把n个点连起来的最小费用是多少,其中A公司的边刚好有k条。题目保证有解。 题解:题目意…

低代码开发平台_低代码开发平台测评——伙伴云

​本次测评的产品严格来说不算低代码开发平台,它自己给自己的定位更多是全流程数据生产力平台。不过它依然具备应用搭建的关键要素,而且在数据管理方面还比较出彩,所以不能放过它——伙伴云,这款由Discuz!主创团队操刀…

java 返回js_如何基于java或js获取URL返回状态码

这篇文章主要介绍了如何基于java或js获取URL返回状态码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参fgLAeaGAH考下描述:使用java或者js访问某个网站,返回状态码1.java实现// 用getResponse…

Linux 信号signal处理函数

alarm&#xff08;设置信号传送闹钟&#xff09; 相关函数 signal&#xff0c;sleep 表头文件 #include<unistd.h> 定义函数 unsigned int alarm(unsigned int seconds); 函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数se…

我的开发环境配置经验

我的开发环境配置经验 http://chinasf.cnblogs.com/archive/2010/01/07/1640960.html本人做开发&#xff0c;偶尔重装下系统&#xff0c;比如换电脑了&#xff1b;或者是visual studio 该升级了&#xff0c;或者是系统坏掉了&#xff1b;每次装好后&#xff0c;我都会做备份&am…

python database ioerror_python – IOError:[Errno 2]没有这样的文件或...

我试图在我的MySQL数据库的表的路径中添加所有种子文件的一些信息,但似乎我有一些PATH问题.你可以看到有完整的路径,它甚至检测到“charlie.torrent”,所以我真的不明白是什么问题.这是我的代码&#xff1a;#!/usr/bin/env python# -*- coding: utf-8 -*-import mysql.connecto…

A20修改串口设备文件

目标&#xff1a;将uart2的设备文件修改为ttyS6&#xff0c;反之亦然 将uart1的设备文件修改为ttyS5&#xff0c;反之亦然 修改“drivers/tty/tty_io.c"文件 找到tty_line_name(driver,index,name)这行&#xff0c;这行是用来生成设备文件的名称。 在这行前加上一下几句…

php 返回数组 键名,php array_keys 返回数组的键名

array_keys返回数组中部分的或所有的键名说明array array_keys ( array $array [, mixed $search_value [, bool $strict false ]] )array_keys() 返回 $array 数组中的数字或者字符串的键名。如果指定了可选参数 search_value&#xff0c;则只返回该值的键名。否则 $array 数…

C#中ref与out区别

static void Main(string[] args){//out testint a, b;//out使用前&#xff0c;变量可以不赋值outTest(out a, out b);Console.WriteLine("a{0};b{1}", a, b);int c 11, d 22;outTest(out c, out d);Console.WriteLine("c{0};d{1}", c, d);//ref testint…

安装好了python环境后如何打开_教你如何安装Python环境

欢迎同学们来到Python编程世界。人生苦短&#xff0c;Python是岸。01 初见PythonPython编程语言是荷兰人Guido van Rossum在1990年代开发出来的。Gudio拥数学和计算机双硕士学位&#xff0c;但他更喜欢计算机。当时Gudio觉得现有的编程语言无法做到既实用又能够轻松编程&#x…

A20串口驱动分析

串口驱动的整体框架实际上和显示驱动类似 驱动程序是一个字符设备&#xff0c;驱动的实质内容都是在一个平台总线设备驱动程序里 1. 串口驱动的分析&#xff0c;从"drivers/tty/serial/8250/8250.c"开始 serial8250_init为入口函数&#xff0c;从这个函数一路分析下…

php vo 遍历,thinkPHP简单遍历数组方法分析

thinkPHP简单遍历数组方法分析文章主要介绍了thinkPHP简单遍历数组方法,结合实例形式分析了thinkPHP使用volist标签遍历数组的技巧,并对比分析了织梦cms的arclist标签加强对thinkPHP数组遍历的理解,需要的朋友可以参考下。本文实例分析了thinkPHP简单遍历数组方法。分享给大家供…

【Demo 0011】多媒体播放器

本章学习要点: 1. 掌握AVAudioPlayer 基本使用; 2. 掌握AVPlayer 基本使用; 3. 掌握系统声音播放以及震动; 4. 掌握MPMediaPlayerController 基本使用; 5. 掌握音乐后台播发以及普通应用后台工作方法; 转载于:https://www.cnblogs.com/ztercel/p/3225689.html

oracle对某两列求和再求和_函数实战:多列条件求和

今天和新手小伙伴们分享有关条件求和的内容&#xff0c;高手请忽略哈。先来看一组销售数据&#xff0c;是某商场不同品牌电视机的三天销售记录&#xff1a;现在需要根据G列的品牌&#xff0c;计算其三天的销售总和。想必有表亲已经想到办法了&#xff0c;既然是按条件求和&…

Mysql安装时出现APPLY security settings错误

1 APPLY security settings错误&#xff0c;经过许久的揣摩&#xff0c;发现第一次安装时不会出现这样的错误&#xff0c;而在重新安装时&#xff0c;就会很容易的出现apply security setting error&#xff08;access denied for user rootlocalhost(using password: YES)&…

php 访问第三方接口吗,PHP-----------HTTP请求的第三方接口

2019独角兽企业重金招聘Python工程师标准>>>开发中常常遇到接口请求这个功能&#xff0c;后台也不例外&#xff0c;因为遇到了&#xff0c;所以写一篇。前段时间做商城后台时&#xff0c;需要用到第三方物流接口查询物流信息。post&#xff1a;/***** param $url* par…

(IOS)截图Demo

思路是建一个UIView的子类&#xff0c;获取划动出的矩形&#xff0c;用协议将矩形传递给代理对象&#xff0c;依据该矩形完成图像数据的截取&#xff0c;并显示出来。 截图视图类&#xff1a; #import <UIKit/UIKit.h>protocol UICutImgDelegate;interface BIDCutView : …

python的map怎么用_python中的map怎么使用

python中的map方法怎么使用&#xff1f;下面给大家介绍一下具体使用的方法&#xff1a;描述map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数&#xff0c;返回包含每次 function 函数返回值的新列表。语法map() 函数语…