欢迎来到天天文库
浏览记录
ID:24320601
大小:51.50 KB
页数:4页
时间:2018-11-13
《windows2000设备驱动程序的研制开发毕业论》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Windows2000设备驱动程序的研制开发毕业论引言:由于工作关系,我经常涉及PC机与外围设备接口的工作,从PC机这方面要做的工作看来,主要是通过接口处理外围设备的中断,通过I/O端口或内存地址与外设互相传递数据。从计算机原理的角度看,所要达到的目的很简单,那么如何编写程序完成上述功能呢?目前国内流行的PC操作系统有三种:DOS,odeDrivers-Reference章节),换言之,这些函数功能是所有内核模式的系统服务功能的子集。驱动程序由一系列相对独立的函数组成,由I/O管理器根据需要调用这些函数,对于一个需要处
2、理中断的最简单的驱动程序也需要由以下几个函数构成:1.DriverEntry()运行于PASSIVE_LEVEL驱动程序入口点,当驱动程序被手动或自动装入系统后,驱动程序从这点开始执行,主要用于定位硬件资源,建立指向其它驱动程序函数的指针等其它初始化工作。2.XxUnload()运行于PASSIVE_LEVEL用于驱动程序从系统卸出之前,释放由驱动程序占用的所有系统资源。3.XxIsr()运行于DIRQL中断服务程序。4.XxDpcForIsr()运行于DISPATCH_LEVEL中断服务程序后处理程序,以排队方执行不
3、太关键代码的执行,由于排队机制及优先级,不会造成代码拥塞从而提高中断服务程序的响应并且提高系统总体I/O吞吐率。5.XxOpen()运行于PASSIVE_LEVEL处理应用程序Win32函数CloseHandle()请求。7.XxDispatch()运行于PASSIVE_LEVEL处理应用程序Win32函数DeviceIoControl()请求,通过一系列自定义命令,驱动程序与应用程序交换特定的信息。Windoeters]IRQ=dAdd=dword:000d0228RAMSPAN=dd=TRUE;hTest=Crea
4、teFile(...);//打开设备DeviceIoControl(hTest,//设备句柄IOCTL_IOCardA_START,//命令cmd,sizeof(BOOL),//输入缓冲区地址及大小NULL,0,c,NULL);CloseHandle(hTest);//关闭设备上层应用程序通过以下程序段查询当前的中断计数器的值并存于变量p;p;c,NULL);CloseHandle(hTest);其中DeviceIoControl()执行后,操作系统调用IOCardADispatch()函数,如流程图所示,这个函数内部
5、通过一个开关语句,根据命令执行相应的分支。驱动程序与应用程序通过此函数接口交换数据时,操作系统提供4种可选数据缓冲方式,本例由于数据I/O量比较小,故选用缓冲I/O(METHOD_BUFFERED)。过程是,I/O管理器首先分配一个非分页池,它的大小为调用者输入缓冲区和输出缓冲区的较大者,第一段程序为sizeof(BOOL),第二段程序为sizeof(unsignedshort),它的地址存到IRP(I/O请求包)的AssociatedIrp.SystemBuffer域中,然后把输入数据拷贝到这个池中,在第一段程序中c
6、md的值TRUE被拷贝到池中,这样驱动程序通过RtlCopyBytes()函数再把池中的值拷贝到驱动程序的RunFlag中。IOCardADispatch()函数执行完,I/O管理器把池中的内容拷贝到调用者的输出缓冲区,在第二段程序中,驱动程序通过RtlCopyBytes()函数把counter的值拷贝到池中,从而最终传递到应用程序变量32drivers系统目录下,同时手工添加如下信息到注册表:[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesIOCardA
7、]ErrorControl=dicrosoftCo.WindowsNT4.0DeviceDriverKid
此文档下载收益归作者所有