范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

对于设备驱动程序通知应用程序的几种方法

  对于设备驱动程序通知应用程序的几种方法          对于设备驱动程序通知应用程序的几种方法	对于设备驱动程序通知应用程序的几种方法 精品源自历史科
  在目前流行的Windows操作系统中,设备驱动程序是操纵硬件的最底层软件接口。为了共享在设备驱动程序设计过程中的经验,给出设备驱动程序通知应用程序的5种方法,具体说明每种方法的原理和实现过程,希望能够给设备驱动程序的设计者提供一些帮助。
  为了保证操作系统的平安性和稳定性以及应用程序的可移植性,Windows操作系统不答应应用程序直接访问系统的硬件资源,而是必须借助于相应的设备驱动程序。设备驱动程序可以直接操作硬件,假如应用程序和设备驱动程序之间实现了双向通信,也就达到了应用程序控制底层硬件设备的目的。它们之间的通信包括两个方面摘要:一方面是应用程序传送给设备驱动程序的数据;另一方面是设备驱动程序发送给应用程序的消息。前者的实现较轻易,通过CreateFile()函数获取设备驱动程序的句柄后,就可以使用Win32函数,如DeviceIoControl()、ReadFile()或WriteFile()等实现应用程序和设备驱动程序之间的通信。后者的实现远比前者复杂,同时介绍这方面情况的文章较少。这不等于说它不重要,相反,它在有些应用场合发挥着重要的功能。设备驱动程序完成数据的采集工作后,需要马上通知应用程序,以便应用程序能够及时将数据取走并进行处理。诸如此类情况,不一而足。
  鉴于设备驱动程序通知应用程序的重要性,本人结合一些经验,对它进行了总结,归纳出5种方法摘要:异步过程调用(APC)、事件方式(VxD)、消息方式、异步I/O方式和事件方式(WDM)。下面分别说明这几种方式的原理,并给出实现的部分源代码。
  1 异步过程调用(APC)
  Win32应用程序使用CreateFile()函数动态加载设备驱动程序,然后定义一个回调函数backFunc(),并且将回调函数的地址%26amp;backFunc()作为参数,通过DeviceIoControl()传送给设备驱动程序。设备驱动程序获得回调函数的地址后,将它保存在一个全局变量(如callback)中,同时调用Get_Cur_Thread_Handle()函数获取它的应用程序线程的句柄,并且将该句柄保存在一个全局变量(如appthread)中。当条件成熟时,设备驱动程序调用_VWIN32_QueueUserApc()函数,向Win32应用程序发送消息。这个函数带有三个参数摘要:第一个参数为回调函数的地址(已经注册);第二个参数为传递给回调函数的消息;第三个参数为调用者的线程句柄(已经注册)。Win32应用程序收到消息后,自动调用回调函数(实际是由设备驱动程序调用)。回调函数的输入参数是由设备驱动程序填入的,回调函数在这里主要是对消息进行处理。
  2 事件方式(VxD)
  首先,Win32应用程序创建一个事件的句柄,称其为Ring3句柄。由于虚拟设备驱动程序使用事件的Ring0句柄,因此,需要创建Ring0句柄。用LoadLibrary()函数加载未公开的动态链接库Kernel32.dll,获得动态链接库的句柄。然后,调用GetProcAddress(), 找到函数OpenVxDHandle()在动态链接库中的位置。接着,用OpenVxDHandle()函数将Ring3事件句柄转化为Ring0事件句柄。Win32应用程序用CreateFile()函数加载设备驱动程序。假如加载成功,则调用DeviceIoControl()函数将Ring0事件句柄传给VxD;同时,创建一个辅助线程等待信号变成有信号状态,本身则可去干其它的事情。当条件成熟时,VxD置Ring0事件为有信号状态(调用_VWIN32_SetWin32Event()函数),这马上触发对应的Ring3事件为有信号状态。一旦Ring3事件句柄为有信号状态,Win32应用程序的辅助线程就对这个消息进行相应的处理。
  3 消息方式
  Win32应用程序调用CreateFile()函数动态加载虚拟设备驱动程序。加载成功后,通过调用DeviceIoControl()函数将窗体句柄传送给VxD,VxD利用这个句柄向窗体发消息。当条件满足时,VxD调用SHELL_PostMessage()函数向Win32应用程序发送消息。要让该函数使用成功,必须用#define来自定义一个消息,并且也要照样在应用程序中定义它;还要在消息循环中使用ON_MESSAGE()来定义消息对应的消息处理函数,以便消息产生时,能够调用消息处理函数。SHELL_PostMessage()函数的第一个参数为Win32窗体句柄,第二个参数为消息ID号,第
  三、四个参数为发送给消息处理函数的参数,第
  五、六个参数为回调函数和传给它的参数。Win32应用程序收到消息后,对消息进行处理。
  4 异步I/O方式
  Win32应用程序首先调用CreateFile()函数加载设备驱动程序。在调用该函数时,将倒数第2个参数设置为FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,表示以后可以对文件进行重叠I/O操作。当设备驱动程序文件创建成功后,创建一个初始态为无信号、需要手动复位的事件,并且将这个事件传给类型为OVERLAPPED的数据结构(如Overlapped)。然后,将Overlapped作为一个参数,传给DeviceIoControl()函数。设备驱动程序把这个I/O请求包(IRP)设置为挂起状态,并且设置一个取消例程。假如当前IRP队列为空,则将这个IRP传送给StartIo()例程;否则,将它放到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种方法都经过实际测试。测试结果表明,它们都能够达到设备驱动程序通知应用程序的目的。
  参考文献摘要:  [2(美)Chris Cant. Windows WDM设备驱动程序开发指南. 孙义, 马莉波, 国雪飞等译. 北京摘要: 机械工业出版社 2000
  [3李和平. 基于DSP的ICT图像重建系统探究. 北京摘要: 北京航空航天大学机械工程及自动化学院, 2002

浅谈音乐院校加强专业外语教学的社会意义毕业论文摘要1986年,中国音协受联合国教科文组织的委托在京举办了亚洲太平洋地区传统音乐研讨会。国外专家对会上交流的中国音乐学家的研究成果1致表示高度赞赏,并对中国音乐学研究成果没先秦时期地方监察机构的设立和演变早在西周,自上而下的监察已成雏型,主要有三种方式一是天子巡狩二是诸侯国君亲自省视或派员巡行三是向地方派遣监察使臣。周武王灭商后,因商的残余势力还较强大,武王采取了两项措施,一是封商浅谈盟员日记中的开国大典1949年10月1日在天安门举行的开国大典,是新中国成立的标志。本文依据黄炎培日记徐铸成日记和常任侠春城纪事当日的记述,从三位盟员的视角,重新回顾了65年前的盛大典礼。开国大典前的浅谈清末立宪运动的性质影响和反思改良与革命是社会变革的两种不同方式,在特定的历史时期如何选择实现社会变革的方式和路径,是社会各界和各种政治力量争论和较量的焦点,往往也是学术研究的重点。目前,在所谓告别革命的呼声中光辉的19492014年的国庆,是新中国第65个生日,是一个举国欢腾的日子。每到这个时候,我们首先想起的是在1949年的这一天,伟大领袖毛泽东在天安门城楼上庄严宣布中华人民共和国,中央人民政府成浅谈民主建国的两个步骤李泽厚的变奏论与毛泽东的新民主主义论最大的差异,表现在新文化运动与新民主主义革命的关联性这个问题上,而且,这里的差异无疑还是双重的既是文化的也是政治的。就新文化运动所产生的新的主体职业学校数学教学论文引导语数学教学工作是学校教学工作中的非常重要的组成部分,而有关职业学校数学教学论文哪里有呢?接下来是品学网范文网小编为你带来收集整理的文章,欢迎阅读!职业学校的学生基础薄弱,学习自公允价值计量最新研究成果解读与准则运用(1)摘要美国财务会计准则委员会于2006年9月正式发布了会计准则第157号公允价值计量(FVM),为公允价值计量的应用进行了技术上的指导和规范。本文对公允价值计量这一最新研究成果进行解反脆弱顽强生存什么是反脆弱?熟悉哈耶克的读者将立刻联想到适应性效率尽管西方社会的秩序作为一个整体,似乎不如官僚制度甚至计划经济自上而下的统制(典型的脆弱性)理性和井然有序。但正是这种去中心化的多关于撰写人民史的探讨西方国家出版了不少人民史著作,中国的通史型的人民史著作却难产,这是值得深思的。早在1874年,英国史学家J。R。格林(18371883)就出版了英国人民简史,以后又修订为4卷本英国对迷航背后的马来西亚探讨马来西亚人口约3000万,共有59个民族。其中,信奉伊斯兰教的马来人占50。4,华人占23。7,印度人占7。1。伊斯兰教是马来西亚国教,此外佛教基督教印度教锡克教都有一定影响力。悠
论中学生音乐教育的创造性教学法毕业论文论中学生音乐教育的创造性教学法摘要创造性原则是音乐教学中必须贯彻的教育原则之1。在音乐教学中应遵循音乐学科的特点,增强学生的创造意识,开发学生的创造性潜质,并使音乐审美能力如何在小学音乐教学中培养学生的创造性思维毕业论文摘要目前,培养学生的创造性思维能力已是1个全球性的问题。为创造而教成为学校的主要目标之1。音乐创造性教学,在颁布了新的全日制义务教育音乐课程标准后,在深化音乐教学改革的今天谈超级女声对中小学生的影响毕业论文摘要超级女声是湖南卫视和天娱传媒公司联合打造的快餐式大众娱乐节目。这两年超级女声非常火爆也非常热门,她对中小学生的健康成长带来着巨大的影响。本文从分析超级女声走红的原因入手即兴演讲语言的变异修辞研究摘要如何在演讲中,特别是即兴演讲中抓住听众的耳朵,吸引他们的眼球是极为重要的。演讲者需要合理恰当地运用一些技巧和手段来点缀他们的言辞,而变异修辞的运用尤为值得关注。关键词即兴演讲变试议英汉名词的异同论文关键词派生词数语法特征论文摘要本文从构成功能用法上比较了英汉名词的异同。虽然英语和汉语的名词的概念基本相同,但是在其构成,功能和用法上仍存在许多差异1名词的构成1。1英语名词的浅论汉语缺乏形态变化对汉语量词的影响摘要量词一直被认为是汉语中比较特殊的一类词。因为其数量之丰富,运用范围之广,都是其他语言所无法比拟的。其实,汉语量词的形成也像其他词类一样,经历了一个由简易到丰富的过程。本文将采取浅论对外汉语教学中的汉语本体研究问题对外汉语教学是一种把汉语作为第二语言或外语的语言教学。对外汉语教学的目的是培养学生的汉语能力和汉语交际能力。因此,汉语本体的研究在对外汉语教学过程中的地位举足轻重。一汉语本体研究与汉语语料库对对外汉语教学中语法研究的作用汉语语料库对对外汉语教学中语法研究的作用语料库是存放语言素材或语料文本的仓库,是按照语域分类收集并经过特殊编码的自然语篇总集,编码即对词语进行类别和功能的定义以及对以小句为单位的文声波透射法桩基检测的实施声波透射法桩基检测的实施摘要结合多年的桩基检测经验,从声测管的埋设与要求桩身龄期要求现场检测三个方面论述了声波透射法桩基检测的实施,可供相关专业技术人员参考。关键词声波透射法桩基检初一数学入门教学的探索论文初一学生充满求知的欲望,数学入门教学应注重培养创造心理,渗透数学思想方法,注意中小学知识衔接,使学生轻松入门,为今后的学习打好基础。小学升初中,是学生成长阶段的一个重要的转型时期,培养学生数学情感的思索论文一教师的关爱是激发学生积极情感的基础在教学中,教师要始终持有饱满的热情,这是激发学生情感的基础。教师的情就是对学生的爱。针对不同的学生,给予不同的关爱。对于学困生,尊重他们,相信他