⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 使用NDIS协议完成的一个较为简单的驱动程序编程范例(windons驱动程序编程)
💻 TXT
字号:
1、 DDK的安装和简要介绍
   为了编译驱动程序,需要一个编译器。由于驱动程序由C语言编写,所以使用任何一种C语言编译器都可以进行驱动程序的编译。但是DDK编译环境默认选用MSVC进行编译,并针对这种情况对DDK中的头文件进行了优化。
   这里我们要在win2000上进行试验,所以我们应该从网上下载Win2000的DDK并进行安装。我们假设读者按照提示将DDK安装到了D:\programs\NTDDK目录。安装DDK后,在DDK程序组下有checked和free两个编译环境,checked环境用于编译带调试信息的驱动程序,free环境则用于编译正式发布版本的驱动程序。DDK安装后,可以在DDK的安装目录下看到若干子目录,其中bin子目录下存放的是可执行文件,help子目录下存放着关于DDK的各种帮助文件,inc子目录下存放的是编译驱动程序所需的各种头文件,src子目录下存放的是各种驱动程序例子的源代码等,本试验使用的Packet驱动就来自于此。这里需要特别说明的是DDK在src子目录下包含的几十个真实的驱动程序的源代码,这些例子覆盖了驱动程序编程的各个方面,是学习驱动程序开发的最好资源。
   最后需要注意的是,必须在安装DDK之前安装MSVC,否则DDK的Setevn.bat批处理文件在运行是就不能正确的建立编译环境。

2、驱动程序的修改
   我们可以再vc中创建一个win32 console applicatoin工程,将其中D:\programs\NTDDK \src\network\ ndis\packet\driver目录下的驱动程序源文件(除makefile和sources外)假如到工程中。这样我们就可以看见程序中的各个函数和数据结构。根据试验文档中的介绍,我们很容易对相关的函数和数据结构进行修改。

3、驱动程序和其应用程序的编译
   驱动程序的编译由DDK提供的BUILD工具控制,该工具位于DDK的bin子目录下。一般而言,在编译一个驱动程序时需要在源文件的目录下提供如下三个文件:MAKEFILE、SOURCES和DIRS。这三个文件均没有扩展名。BUILD根据这三个文件的内容对目标驱动程序进行编译,并且创建BUILD.LOG、BUILD.ERR等文件作为输出,如果正常,执行BUILDD的结果是创建驱动程序的可执行版本,其文件类型是.SYS。
   关于上述的MAKEFILE等三个文件,在DDK的每一个例子中都给出了相应的实例。其中对所有的驱动程序而言,MAKEFILE都是一样的,微软建议不要修改该文件。SOURCES文件中包含了一些宏,用以指导BUILD工具如何生成驱动程序的可执行文件、从哪里获得输入及从哪里进行输出。DIRS文件包含了BUILD工具要处理的目录,这些目录必须是当前目录的子目录,在这些目录下边,BUILD将查找其它的DIRS文件或者是MAKEFILE和SOURCES文件。我们在本实验中不需要改动这些文件,沿用例子中现成的即可。
  下面就具体介绍试验中如何来编译我们的驱动程序“Packt”。
  首先,读者可以先将DDK原来的packet例子程序备份,然后用改动后的驱动程序源码覆盖原先的代码(即覆盖packet->driver目录下的代码,修改后的代码已经给出)。
   然后开始编译。顺次选择开始->程序->Development kits->Windows 2000 DDK->Checked Build Environment,将出现一个控制台窗口。使用cd命令进入D:\programs\NTDDK \src\network\ ndis\packet目录(即驱动程序和相应应用程序所在的目录),键入build命令开始编译,在该目录下的dirs文件的控制下可以同时编译driver目录下的驱动程序和testapp目录下用于测试驱动程序的应用程序;即同时得到改动后的驱动程序和测试该驱动程序的应用程序。

4、驱动程序的安装
   DDK给出了Packe协议驱动程序的安装信息文件packet.inf;将该文件同packet.sys放到同一目录下,就可以进行安装了,具体步骤如下:打开本地连接的属性窗口,进入安装功能界面。选择添加协议->从磁盘安装;然后选中对应的Packet.inf即可,安装完毕后,“本地连接 属性”栏中将会显示出新安装的协议“DDK PACKET Protocol”,此时我们就可以在应用程序中通过该驱动获取网络数据了。


5、驱动程序的测试
   如上将改动后的packet驱动程序安装到我们的机器上后,就可以通过应用程序来使用本驱动获取网络数据了。这里,我们沿用DDK中随packet协议驱动一并给出的应用程序“packapp”。该应用程序同Packet驱动程序位于同一目录下。实际上,前面已经提到了,我们可以同时编译得到驱动程序和测试应用程序packeapp.exe。运行该应用该程序后,可以通过filter菜单命令设定想要截取的网络数据类型。在没有对驱动程序进行改动前,packapp程序运行起来后,在发出一个读请求后会等待驱动从网络上捕获下一个数据包。如果将获取包的类型设置为"direct",而此时并不进行网络操作,则packapp的读请求将一直等待,直到下一个网络操作(比如浏览网页)进行位置。而将驱动程序进行改造后,如果你之前进行了任何网络操作,比如收发了email,则packet驱动已经在内部储存了一些数据,这时你再如上提出都数据请求,则会即时得到响应。不过此时获取的是刚才到达的网络数据。
   另外,由于驱动程序使用一个常量"TRANSMIT_PACKETS " 维护数据缓冲区的长度,所以,在没有所要求类型的新的网络数据到达之前,暂存在数据缓冲队列中的数据最多可以响应" TRANSMIT_PACKETS "次的读数据请求。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -