相关服务

  • 《现代电子技术》2006年第20期摘录:吴庭翱:基于WinDriver

如发现有乱码,请点击下面链接浏览原文
正文摘录:

吴庭翱:基于WinDriverKernelPlugln+Windows2000DDK实时中断技术的研究处理100000个中断H不会丢掉一些中断。KernelPlugln体系结构图如图1所示:图1KernelPlugIn体系结构图用WinDriver开发设备驱动程序的根源还足来自于WindowsDDK,所以要利用KernelPlugIn技术开发出真正意义上的设备驱动程序,需要在计算机上安装与操作系统对应的DDK(如Windows2000DDK),且确保BADEDIR环境变量设置了DDK安装的路径。同时可以在内核模式编写代码时调用某些DDK函数来精简程序。6软件设计WinDriver提供了一个基于KernelPlugIn技术的kptest驱动程序例子。通过修改内核模式代码、编译生成驱动程序kptest.sys文件、注册驱动程序kptest.sys和在用户模式下调用相关回调函数就可以完成对驱动程序的访问。(1)内核模式代码的修改为了直观地显示实时中断的效果,采用修改系统定时器中的计数器的设定值来改变L111断用期,并利用PC机的现有资源并口来输出卡f{应的【};断.将并¨的端口周期性的置高电平和低IU平就【lI以迎过爪波器来观测实时中断的效果了。,具体修改后的系统J】Ⅱ载初始化程序代码如下:BOOI,一c(1t(1KI’Init(KP—INIT*kplnit)tif(kpInit一>dwVerWI)!一WD—VER)1returnFAI。SE:}kpInit一>func()pen—KP()pen;strcpy(kpInit一2>cI)riverName.”KP“FEST”);//upto8charsWRlTEPORTUSH()RT(0x43,0x36)://初始化8253定时器的控制字WRITEPORTUSHORT(0xi0,0x54);///向汁数器0的低8位置数据WRITEPORTUSH()RT(0x40,0x02):,。/向计数器0的高8位置数据returnTRUE;}具体修改后的产生硬件中断程序的代码如下:】44BOOLcdeclKPIntAtlrql(PV()IDpIntContext,BOOI。”pflsMyInterrupt){if(m)//Hi为定义的静态布尔变量{WRITEPORTUSHORT(0x378.255);,//将并行端口的数据口置高电平m—FAI,SE;//m置为假returnTRUF=:}elseiWRITEP()RTUSHOR'I、(0x378,0);//将并行端口的数据in—TRUE:returnFAI,SE:口置高电平//m鹭为假}(2)编译并安装编译之前要安装好Windows2000DDK、设置好环境变量和配置好要生成的驱动程序为自由构造版本文件(Win32Win2kfree)或检查构造版本文件(Win32Win2kchecked)。编译无误后生成kptest.sys文件。将kptest.sys文件拷贝到C:\system32\drivers(假设操作系统安装在C盘下)。启动命令提示符并在目录\WinDriver\utiE>下执行:wdreg——namekptestinstall便可以完成驱动程序的安装。如果以后要安装同名的驱动程序,要先卸载掉以前安装的驱动程序,再安装新的驱动程序文件,卸载驱动程序的命令为:(3)MFC和kptest.sys通信的实现通过VC集成于r发环境下的MFCAppWizard程序向导建立一个对话框程序,硬件中断试验的对话框界面如图2所示。图2硬件中断试验界面要完成MFC对话框与驱动程序kptest.sys的通信需要添加相应的头文件和全局变量,具体的头文件和全局变量如下:#include#include#include#;nelude../../include/windrvr.h”../..jinelude/windrvr—int—thread.h../../include/stat∽一strings.h”Rcsource/kptest—COIll.h”

阅读此文(图):   点击此处在线翻阅