否则,将它放到irp队列中。设备驱动程序做完这些工作后,结束这个deviceiocontrol()的处理,于是win32应用程序可能不等待irp处理完,就从deviceiocontrol()的调用中返回。通过判断返回值,得到irp的处理情况。如果当前irp处于挂起状态,则主程序先做一些其它的工作,然后调用waitforsingleobject()或waitformultipleobject()函数等待overlapped中的事件成为有信号状态。设备驱动程序在适当的时候处理排队的irp,处理完成后,调用iocompleterequest()函数。该函数将overlapped中的事件设置为有信号状态。win32应用程序对这个事件马上进行响应,退出等待状态,并且将事件复位为无信号状态,然后调用getoverlappedresult()
函数获取irp的处理结果。
5 事件方式(wdm)
win32应用程序首先创建一个事件,然后将该事件句柄传给设备驱动程序,接着创建一个辅助线程,等待事件的有信号状态,自己则接着干其它事情。设备驱动程序获得该事件的句柄后,将它转换成能够使用的事件指针,并且把它寄存起来,以便后面使用。当条件具备后,设备驱动程序将事件设置为有信号状态,这样应用程序的辅助线程马上知道这个消息,于是进行相应的处理。当设备驱动程序不再使用这个事件时,应该解除该事件的指针。
6 结语
在目前流行的windows操作系统中,设备驱动程序是操纵硬件的最底层软件接口。它向上提供与硬件无关的用户接口,向下直接进行i/o、硬件中断、dma和内存访问等操作。它将应用程序与硬件细节屏蔽开来,使软件不依赖于硬件并且可在多个不同的平台之间移植。本文介绍了5种设备驱动程序通知应用程序的方法,其中前3种方法主要用于vxd中,后2种方法主要用于wdm。这5种方法都经过实际测试。测试结果表明,它们都能够达到设备驱动程序通知应用程序的目的。
参考文献:
[1]欧青立,徐建波,李方敏,等. 虚拟设备驱动程序vxd的研究与开发. 计算机工程,2003
[2](美)chris cant. windows wdm设备驱动程序开发指南. 孙义, 马莉波, 国雪飞等译. 北京: 机械工业出版社 2000
[3]李和平. 基于dsp的ict图像重建系统研究. 北京: 北京航空航天大学机械工程及自动化学院, 2002
上一页 [1] [2]