书签 分享 收藏 举报 版权申诉 / 92
上传文档赚钱

类型构造WDM驱动程序开发环境安装成功WindowsDDK后课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3021455
  • 上传时间:2022-06-23
  • 格式:PPT
  • 页数:92
  • 大小:1.14MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《构造WDM驱动程序开发环境安装成功WindowsDDK后课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    构造 WDM 驱动程序 开发 环境 安装 成功 WindowsDDK 课件
    资源描述:

    1、Instructor: Hengming Zou, Ph.D.Instructor: Hengming Zou, Ph.D.In Pursuit of Absolute Simplicity 求于至简,归于永恒求于至简,归于永恒2 2WindowsWindows环境下的程序设计环境下的程序设计1. Windows 1. Windows 应用程序设计模式应用程序设计模式2. 2. 结构化异常处理结构化异常处理3. 3. 动态链接库动态链接库4. Windows4. Windows驱动程序模型驱动程序模型5. WDM5. WDM驱动程序编程实例驱动程序编程实例6. 6. 开发开发WDMWDM驱动程

    2、序的一般方法驱动程序的一般方法3 3Windows Windows 应用程序设计模式应用程序设计模式Windows Windows 应用程序是特意为在应用程序是特意为在Windows Windows 环境中运行而编写的环境中运行而编写的应用程序应用程序以窗口为核心的用户界面、以事件驱动为动力的程序运行机以窗口为核心的用户界面、以事件驱动为动力的程序运行机制、以及将程序代码与用户界面分开处理的程序开发手段,制、以及将程序代码与用户界面分开处理的程序开发手段,构成了构成了WindowsWindows应用程序特有的设计模式应用程序特有的设计模式4 4Win32 APIWin32 APIWindows

    3、 Windows 应用程序总是在常规的用户态下运行应用程序总是在常规的用户态下运行操作系统核心组件则对外界表现出中立的性质,它们不实现操作系统核心组件则对外界表现出中立的性质,它们不实现用户界面,甚至不提供编程接口,系统服务调用对应用程序用户界面,甚至不提供编程接口,系统服务调用对应用程序而言是不公开的而言是不公开的WindowsWindows操作系统依靠一组用户态环境子系统,作为应用程序操作系统依靠一组用户态环境子系统,作为应用程序与操作系统核心之间的接口与操作系统核心之间的接口5 5Win32 APIWin32 APIWin32Win32子系统是子系统是Windows Windows 操作

    4、系统的固有的子系统,这个子系操作系统的固有的子系统,这个子系统能够提供应用程序运行所需要的窗口管理、图形设备接口、统能够提供应用程序运行所需要的窗口管理、图形设备接口、媒体控制、内存管理等各项服务功能,这些功能以函数库的媒体控制、内存管理等各项服务功能,这些功能以函数库的形式组织在一起,这就是形式组织在一起,这就是Win32Win32应用程序编程接口,简称为应用程序编程接口,简称为Win32 APIWin32 APIWin32Win32子系统负责将子系统负责将APIAPI调用转换成调用转换成WindowsWindows操作系统的系统服操作系统的系统服务调用务调用6 6Win32 APIWin3

    5、2 APIWindows Windows 应用程序与操作系统的关系应用程序与操作系统的关系Windows应用程序Win32子系统子系统子系统用户态用户态核心态核心态系统服务Windows应用程序硬件层7 7Win32 APIWin32 APIUSER32.DLLUSER32.DLL:负责处理用户接口:负责处理用户接口GDI32.DLLGDI32.DLL:负责在图形设备上执行绘图操作:负责在图形设备上执行绘图操作KERNEL32.DLLKERNEL32.DLL:操作系统核心功能服务:操作系统核心功能服务COMCTL32.DLLCOMCTL32.DLL:通用控件库:通用控件库COMDLG32.DL

    6、LCOMDLG32.DLL:公共对话框:公共对话框SHELL32.DLLSHELL32.DLL:用户界面外壳:用户界面外壳DIBENG.DLLDIBENG.DLL:图形引擎:图形引擎NETAPI32.DLLNETAPI32.DLL:网络:网络8 8Win32 APIWin32 API标准标准Win32 APIWin32 API函数分类:函数分类: 系统服务系统服务 通用控件库通用控件库 图形设备接口图形设备接口 网络服务网络服务 用户接口用户接口 系统系统ShellShell Windows Windows 系统信息系统信息9 9WindowsWindows应用程序设计模式应用程序设计模式窗口

    7、窗口目的是保证用户能够同时访问大多数应用程序目的是保证用户能够同时访问大多数应用程序应用程序使用窗口来显示输出或接收用户的输入应用程序使用窗口来显示输出或接收用户的输入应用程序只有通过窗口才能访问系统显示器;并且通过使用应用程序只有通过窗口才能访问系统显示器;并且通过使用窗口与其他应用程序共享系统显示器窗口与其他应用程序共享系统显示器1010WindowsWindows应用程序设计模式应用程序设计模式事件驱动事件驱动Windows Windows 应用程序的执行顺序取决于事件发生的顺序,描述应用程序的执行顺序取决于事件发生的顺序,描述事件发生的信息称为消息,而事件驱动程序设计则是围绕着事件发生

    8、的信息称为消息,而事件驱动程序设计则是围绕着消息的产生与处理而展开的消息的产生与处理而展开的消息可以分为由硬件设备产生的输入消息和来自消息可以分为由硬件设备产生的输入消息和来自WindowsWindows系统系统的窗口管理消息的窗口管理消息发送消息发送消息sendsend指派消息指派消息postpost1111WindowsWindows应用程序设计模式应用程序设计模式事件驱动事件驱动硬件输入硬件输入系统消息队列系统消息队列应用程序队应用程序队列列1 1应用程序队列应用程序队列n nWindowsWindowsWinMainWinMain函数函数消息循环消息循环窗口窗口函数函数1 1窗口窗口函

    9、数函数m m应用程序应用程序 1 1WinMainWinMain函数函数消息循环消息循环应用程序应用程序 n n窗口窗口函数函数1 1窗口窗口函数函数m m1212WindowsWindows应用程序设计模式应用程序设计模式WindowsWindows应用程序的开发流程应用程序的开发流程Windows Windows 应用程序分为程序代码和用户界面资源两部分,两应用程序分为程序代码和用户界面资源两部分,两部分通过资源编译器组合为一个完整的部分通过资源编译器组合为一个完整的EXEEXE文件文件将用户界面资源一类的静态数据与程序代码相分离有如下一将用户界面资源一类的静态数据与程序代码相分离有如下一

    10、些优点些优点: : 减少内存要求; 划清了程序员与用户界面设计人员的任务分工 用户界面风格的变化可以不必修改程序代码或只需进行少量的修改1313WindowsWindows应用程序设计模式应用程序设计模式WindowsWindows应用程序的开发流程应用程序的开发流程.C.H.RC.DEF.DLG.EXE链接器.LIB.BMP.CUR.ICO.FON.RES.OBJ资源编译器C编译器字体编辑器图象编辑器对话框编辑器工具文本文件二进制文件1414WindowsWindows应用程序应用程序的基本结构的基本结构WindowsWindows应用程序具有相对固定的基本结构,入口点函数应用程序具有相对固

    11、定的基本结构,入口点函数WinMainWinMain和窗口函数构成了和窗口函数构成了WindowsWindows应用程序的基本框架应用程序的基本框架1515WindowsWindows应用程序应用程序的基本结构的基本结构WinMainWinMain函数函数 是程序的入口点,相当于标准是程序的入口点,相当于标准C C语言中的语言中的mainmain函数函数WinMainWinMain函数主要由四部分组成:函数主要由四部分组成: 注册窗口类注册窗口类 创建窗口创建窗口 显示窗口显示窗口 建立消息循环建立消息循环1616WindowsWindows应用程序应用程序的基本结构的基本结构WinMainW

    12、inMain函数函数消息循环消息循环WindowsWindows并不直接把输入消息发送给应用程序,而是将其送入并不直接把输入消息发送给应用程序,而是将其送入应用程序的消息队列之中。此外,应用程序的消息队列之中。此外,WindowsWindows和其他应用程序也和其他应用程序也可以将消息指派到应用程序队列中可以将消息指派到应用程序队列中应用程序必须读取应用程序队列,检索消息并将它们发送出应用程序必须读取应用程序队列,检索消息并将它们发送出去,以便适当的窗口函数能够处理它们,负责这一任务的便去,以便适当的窗口函数能够处理它们,负责这一任务的便是消息循环是消息循环1717WindowsWindows

    13、应用程序应用程序的基本结构的基本结构WinMainWinMain函数函数消息循环消息循环 while(GetMessage(&Msgwhile(GetMessage(&Msg, NULL, 0,0), NULL, 0,0) TranslateMessage(&MsgTranslateMessage(&Msg);); DispatchMessage(&MsgDispatchMessage(&Msg);); GetMessageGetMessage函数检索到函数检索到WM_QUITWM_QUIT消息时返回非零值,检索到其消息时返回非零值,检索到其他消息均返回他消息均返回1818WindowsWin

    14、dows应用程序应用程序的基本结构的基本结构窗口函数窗口函数窗口函数也称为窗口过程,负责从窗口函数也称为窗口过程,负责从WindowsWindows接收消息,并根据接收消息,并根据这些消息完成特定的操作这些消息完成特定的操作窗口函数是一个回调函数,由窗口函数是一个回调函数,由WindowsWindows系统调用,应用程序并系统调用,应用程序并不会直接调用它的窗口函数不会直接调用它的窗口函数窗口函数的主体是由一系列窗口函数的主体是由一系列casecase语句组成的消息处理程序段语句组成的消息处理程序段如果窗口函数不处理某些消息,则必须把它们传给如果窗口函数不处理某些消息,则必须把它们传给DefW

    15、indowProcDefWindowProc函数函数case 1case 2case 3DefaultWindows系统系统应用程序应用程序WinMain( )消息循环WndProc( )DispatchMessage( )DefWindowProc( )检索到的消息GetMessage( )指派的消息指派的消息WM_KEYDOWNWM_KEYUPWM_MOUSEMOVEWM_LBUTTONDOWNWM_QUIT.发送的消息发送的消息WM_CREATEWM_DESTROYWM_SIZEWM_PAINT.应用程序的消息队列回调WindowsWindows应用程序的应用程序的消息处理过程消息处理过

    16、程 2020WindowsWindows应用程序应用程序的基本结构的基本结构当用户关闭窗口时,当用户关闭窗口时,WindowsWindows系统将把系统将把WM_DESTROYWM_DESTROY消息发送给消息发送给该窗口的窗口函数,在这种情况下,窗口函数应该使用该窗口的窗口函数,在这种情况下,窗口函数应该使用PostQuitMessagePostQuitMessage函数将函数将WM_QUITWM_QUIT消息发送到应用程序队列中,消息发送到应用程序队列中,这样可以使这样可以使GetMessageGetMessage函数检索到函数检索到WM_QUITWM_QUIT消息,从而结束消消息,从而结

    17、束消息循环,退出应用程序息循环,退出应用程序case 1case 2.case WM_DESTROYDefaultWindows系统系统应用程序应用程序WinMain( )消息循环WndProc( )PostQuitMessage(0)WM_QUIT消息GetMessage( )WM_QUIT消息应用程序的消息队列WM_DESTROY消息退出消息循环结束应用程序WM_DESTROYWM_DESTROY消息的消息的处理过程处理过程 2222结构化异常处理结构化异常处理WindowsWindows在系统底层提供了一种称为结构化异常处理在系统底层提供了一种称为结构化异常处理SEHSEH的系的系统机制

    18、。利用统机制。利用SEHSEH可以把程序主要的工作同错误处理分离开来,可以把程序主要的工作同错误处理分离开来,这样的分离,可以使程序员集中精力关注程序要完成的任务,这样的分离,可以使程序员集中精力关注程序要完成的任务,而将可能发生的错误放在后面处理而将可能发生的错误放在后面处理异常是在应用程序的正常执行过程中发生的不正常事件。异常是在应用程序的正常执行过程中发生的不正常事件。CPUCPU引发的异常称为引发的异常称为硬件异常硬件异常,操作系统和应用程序直接引发的,操作系统和应用程序直接引发的异常,称为异常,称为软件异常软件异常2323结构化异常处理结构化异常处理SHESHE是操作系统的一种系统机

    19、制,与特定的程序设计语言无关是操作系统的一种系统机制,与特定的程序设计语言无关应用程序要利用系统提供的应用程序要利用系统提供的SHESHE机制,则必须借助于特定程序机制,则必须借助于特定程序设计语言的相关语法设计语言的相关语法因此,因此,SEHSEH不但涉及操作系统,而且与编译器有密切的关系不但涉及操作系统,而且与编译器有密切的关系结构化异常处理包括异常处理和终止处理两个方面结构化异常处理包括异常处理和终止处理两个方面2424结构化异常处理结构化异常处理异常处理异常处理 _try_try ./guarded section/guarded section _except(exceptionex

    20、cept(exception filter) filter) ./exception handler/exception handler 2525结构化异常处理结构化异常处理异常处理异常处理异常过滤器返回如下三个异常标识符之一异常过滤器返回如下三个异常标识符之一 ECXEPTION_EXECUTE_HANDLERECXEPTION_EXECUTE_HANDLER ECXEPTION_CONTINUE_EXECUTIONECXEPTION_CONTINUE_EXECUTION ECXEPTION_CONTINUE_SEARCHECXEPTION_CONTINUE_SEARCH2626结构化异常处

    21、理结构化异常处理终止处理终止处理WindowsWindows应用程序在运行时通常要分配资源,使用这些资源,应用程序在运行时通常要分配资源,使用这些资源,然后释放它们然后释放它们由于异常改变了控制的流程,因此很容易导致无法释放在产由于异常改变了控制的流程,因此很容易导致无法释放在产生异常的代码块中分配的资源生异常的代码块中分配的资源使用终止处理程序可以保证进行这样的清除工作使用终止处理程序可以保证进行这样的清除工作2727结构化异常处理结构化异常处理终止处理终止处理 _try_try . _finally_finally . . 2828结构化异常处理结构化异常处理终止处理终止处理有两种情况可能

    22、使受保护段不正常地结束有两种情况可能使受保护段不正常地结束 在在trytry块中执行了块中执行了returnreturn、gotogoto、breakbreak或或continuecontinue等控制语句等控制语句 在在trytry块中发生异常块中发生异常2929结构化异常处理结构化异常处理软件异常软件异常当一个函数执行失败时,习惯上要返回一些特殊的值来,函当一个函数执行失败时,习惯上要返回一些特殊的值来,函数的调用者可以检查这些特殊值并采取一种替代的动作数的调用者可以检查这些特殊值并采取一种替代的动作如果这个调用者是被另一个调用者调用的函数,那么它还需如果这个调用者是被另一个调用者调用的函

    23、数,那么它还需要将它自己的失败代码返回给它的调用者要将它自己的失败代码返回给它的调用者这种错误代码的逐层传递会使源程序变得非常难于编写和维这种错误代码的逐层传递会使源程序变得非常难于编写和维护护采用软件异常则可以解决这些问题采用软件异常则可以解决这些问题3030动态链接库动态链接库动态链接库动态链接库DLLDLL是一个可执行程序模块,模块中包含了可以被是一个可执行程序模块,模块中包含了可以被其他应用程序或其他其他应用程序或其他DLLDLL共享的程序代码和资源共享的程序代码和资源3131动态链接库动态链接库采用采用DLLDLL的优点:的优点: 当多个进程同时使用同一个当多个进程同时使用同一个DL

    24、LDLL时,只要在内存中装入它的一时,只要在内存中装入它的一个副本即可,从而可以节省内存;个副本即可,从而可以节省内存; DLLDLL与调用它的应用程序相分离,因此可以在不修改应用程序与调用它的应用程序相分离,因此可以在不修改应用程序的情况下对的情况下对DLLDLL进行更新;进行更新; 只要在调用只要在调用DLLDLL中的函数时遵循相同的调用规范,那么中的函数时遵循相同的调用规范,那么DLLDLL中的中的函数就可以被各种编程语言编制的应用程序调用函数就可以被各种编程语言编制的应用程序调用3232动态链接库动态链接库DLLDLL到进程地址空间的映射到进程地址空间的映射 装入时刻动态链接装入时刻动

    25、态链接经过编译的.obj文件引入库,包含DLL函数的重定位信息链接器可执行程序重定位信息动态链接库调用DLL中的函数内存3333动态链接库动态链接库DLLDLL到进程地址空间的映射到进程地址空间的映射 运行时刻动态链接运行时刻动态链接 在运行时刻,通过调用在运行时刻,通过调用LoadLibraryLoadLibrary可以使可以使DLLDLL加载到一个进程加载到一个进程的地址空间中的地址空间中 为了在运行时刻从为了在运行时刻从DLLDLL中调用一个函数,可以通过调用中调用一个函数,可以通过调用GetProcAddressGetProcAddress获取函数的地址获取函数的地址3434动态链接库

    26、动态链接库DLLDLL到进程地址空间的映射到进程地址空间的映射虚拟地址空间02GB02GB进程1进程2DLL数据(共享)DLL数据(私用进程1)DLL数据(私用进程1)DLL代码物理内存3535动态链接库动态链接库DLLDLL的入口点函数的入口点函数DLLDLL没有没有WinMainWinMain函数,不含有消息循环,一般也不获取自己函数,不含有消息循环,一般也不获取自己的消息,但是它有自己特殊的入口点函数,入口点函数的缺的消息,但是它有自己特殊的入口点函数,入口点函数的缺省名为省名为DllMainDllMain当进程和线程被初始化或终止时,当进程和线程被初始化或终止时,DllMainDllM

    27、ain函数被函数被WindowsWindows系系统调用统调用DllMainDllMain要做的主要任务是执行进程级或线程级的初始化和清要做的主要任务是执行进程级或线程级的初始化和清理工作理工作如果不要求如果不要求DLLDLL初始化,初始化,DllMainDllMain可以只是一个虚设函数可以只是一个虚设函数3636动态链接库动态链接库DLLDLL的创建和使用的创建和使用创建创建DLLDLL文件需要用到源文件(文件需要用到源文件(.C.C)和头文件()和头文件(.H.H)。)。DLLDLL源源文件通常包括入口点函数和供应用程序调用的文件通常包括入口点函数和供应用程序调用的DLLDLL库函数。头

    28、库函数。头文件中含有文件中含有DLLDLL要导出的所有函数与变量的说明要导出的所有函数与变量的说明在应用程序中调用在应用程序中调用DLLDLL中的函数或访问中的函数或访问DLLDLL中的变量时,须告中的变量时,须告诉编译器要调用的函数或要访问的变量是在诉编译器要调用的函数或要访问的变量是在DLLDLL中:中: _declspec(dllimportdeclspec(dllimport) ) int int Sub(intSub(int nPara1, int Para2); nPara1, int Para2);3737习题习题Win32Win32子系统与子系统与Win32 APIWin32

    29、API的关系是什么?的关系是什么? 什么是事件驱动?什么是事件驱动?WindowsWindows应用程序为什么采用事件驱动的程应用程序为什么采用事件驱动的程序设计方法,而不是象传统序设计方法,而不是象传统DOSDOS应用程序那样采用过程驱动的应用程序那样采用过程驱动的程序设计方法?程序设计方法? 与静态链接相比,动态链接有哪些优点?有哪些缺点?与静态链接相比,动态链接有哪些优点?有哪些缺点?3838WindowsWindows驱动程序模型驱动程序模型WDMWDM以以Windows NT 4.0Windows NT 4.0的内部结构为基础,同时引入了的内部结构为基础,同时引入了 Windows

    30、9xWindows 9x的即插即用特性,为存在于的即插即用特性,为存在于Windows 98Windows 98和和Windows Windows 2000/XP/20032000/XP/2003操作系统中的设备驱动程序提供了一个统一的操作系统中的设备驱动程序提供了一个统一的参考框架参考框架WDMWDM驱动程序还可以在不修改源代码的情况下经过重新编译后驱动程序还可以在不修改源代码的情况下经过重新编译后在非在非IntelIntel平台上运行,因此平台上运行,因此WDMWDM是一个跨平台的驱动程序模是一个跨平台的驱动程序模型型3939设备和驱动程序的分层设备和驱动程序的分层WDMWDM是一个分层化

    31、的驱动程序模型,在这个模型中,驱动程序是一个分层化的驱动程序模型,在这个模型中,驱动程序的层或堆栈一起工作处理的层或堆栈一起工作处理I/OI/O请求请求FiDOFDOFiDOPDO上层过滤器驱动程序上层过滤器驱动程序功能驱动程序功能驱动程序下层过滤器驱动程序下层过滤器驱动程序总线驱动程序总线驱动程序IRP4040设备和驱动程序的分层设备和驱动程序的分层总线驱动程序总线驱动程序总线驱动程序负责枚举连接在该总线上的所有设备并进行必总线驱动程序负责枚举连接在该总线上的所有设备并进行必要处理要处理MicrosoftMicrosoft为大多数总线如为大多数总线如PCIPCI、PnPISAPnPISA、S

    32、CSISCSI以及以及USBUSB等提供等提供了驱动程序了驱动程序机器中每种类型的总线都有相应的总线驱动程序机器中每种类型的总线都有相应的总线驱动程序总线枚举时驱动程序识别其上的设备并为其创建一个物理设总线枚举时驱动程序识别其上的设备并为其创建一个物理设备对象备对象4141设备和驱动程序的分层设备和驱动程序的分层功能驱动程序功能驱动程序功能驱动程序是一个设备的主要驱动程序,它知道如何控制功能驱动程序是一个设备的主要驱动程序,它知道如何控制设备的主要功能设备的主要功能功能驱动程序为它的设备提供操作接口,处理对设备的读功能驱动程序为它的设备提供操作接口,处理对设备的读/ /写,写,并管理设备的电源

    33、策略并管理设备的电源策略功能驱动程序创建一个功能设备对象功能驱动程序创建一个功能设备对象FDOFDO放在设备栈中放在设备栈中4242设备和驱动程序的分层设备和驱动程序的分层过滤器驱动程序过滤器驱动程序过滤器驱动程序过滤对每个设备、每一类设备或一条总线的过滤器驱动程序过滤对每个设备、每一类设备或一条总线的I/OI/O请求请求过滤器驱动程序是可选择的过滤器驱动程序是可选择的4343IRPIRP的处理的处理IRPIRP是驱动程序操作的中心。是驱动程序操作的中心。I/OI/O管理器接收一个管理器接收一个I/OI/O请求之后,请求之后,在把它传递到合适的驱动程序堆栈中的最高层驱动程序之前,在把它传递到合

    34、适的驱动程序堆栈中的最高层驱动程序之前,分配并初始化一个分配并初始化一个IRPIRP当一个当一个IRPIRP由多个驱动程序处理时,使用多个由多个驱动程序处理时,使用多个I/OI/O堆栈单元。堆栈单元。每个驱动程序从当前每个驱动程序从当前I/OI/O堆栈单元得到它的堆栈单元得到它的IRPIRP参数。如果把参数。如果把一个一个IRPIRP沿当前设备的驱动程序堆栈向下传递,必须使用正确沿当前设备的驱动程序堆栈向下传递,必须使用正确的常数设置下一个堆栈单元的常数设置下一个堆栈单元4444IRPIRP的处理的处理驱动程序驱动程序1驱动程序驱动程序2驱动程序驱动程序3驱动程序驱动程序4I/O堆栈单元堆栈单

    35、元1I/O堆栈单元堆栈单元2I/O堆栈单元堆栈单元3I/O堆栈单元堆栈单元4IRP最低最低最高最高4545用户程序对设备的访问过程用户程序对设备的访问过程WindowsWindows中对设备的访问分为用户态和核心态两种方式:中对设备的访问分为用户态和核心态两种方式: 用户态通过调用用户态通过调用Win32 APIWin32 API函数如函数如ReadFileReadFile、WriteFileWriteFile等访问等访问设备,它不能直接控制硬件设备,它不能直接控制硬件 核心态通过发送核心态通过发送I/OI/O请求包请求包IRPIRP来运行驱动程序实现对设备的控来运行驱动程序实现对设备的控制制

    36、4646用户程序对设备的访问过程用户程序对设备的访问过程应用程序应用程序Win32Win32子系统子系统用户态用户态核心态核心态I/OI/O系统服务系统服务I/OI/O管理器管理器IRPIRP高层驱动程序高层驱动程序 中层驱动程序中层驱动程序 低层驱动程序低层驱动程序 HALHAL4747WDMWDM驱动程序的结构驱动程序的结构分发例程分发例程I/OI/O控制例程控制例程StartIoStartIoAdapterControlAdapterControlOnInterruptOnInterruptDpcForIsrDpcForIsrDriverEntryDriverEntryAddDevice

    37、AddDevice基本驱动程序例程基本驱动程序例程必须的驱动程序例程必须的驱动程序例程处理请求队列需要包含处理请求队列需要包含StarIoStarIo如果设备产生中断需要包含中断和如果设备产生中断需要包含中断和 DPCDPC 例程例程DMADMA操作需要包含操作需要包含AdapterControlAdapterControl例程例程可选的可选的IRPIRP分发例程分发例程DispatchPnpDispatchPnpDispatchPowerDispatchPowerDispatchWmiDispatchWmiDispatchReadDispatchReadDispatchWriteDispat

    38、chWrite4848WDMWDM驱动程序的结构驱动程序的结构初始化例程,当初始化例程,当I/OI/O管理器把驱动程序加载到操作系统中时,管理器把驱动程序加载到操作系统中时,它执行驱动程序的初始化例程它执行驱动程序的初始化例程添加设备例程,用于支持添加设备例程,用于支持PnPPnP管理器的操作管理器的操作一系列分发一系列分发( (调度调度) ) 例程,调度例程是设备驱动程序提供的主例程,调度例程是设备驱动程序提供的主要函数要函数启动启动I/OI/O例程,驱动程序可以使用启动例程,驱动程序可以使用启动I/OI/O例程来初始化与设例程来初始化与设备之间的数据传输备之间的数据传输4949WDMWDM

    39、驱动程序的结构驱动程序的结构中断服务例程(中断服务例程(ISRISR),当一个设备中断时,内核的中断调度),当一个设备中断时,内核的中断调度程序把控制转交给这个例程。程序把控制转交给这个例程。ISRISR运行在高级的设备中断请求运行在高级的设备中断请求级(级(IRQLIRQL)上,越简单越好,以避免对低优先级中断产生不)上,越简单越好,以避免对低优先级中断产生不希望的阻塞希望的阻塞中断服务中断服务DPCDPC例程,例程,DPCDPC例程执行在例程执行在ISRISR执行以后的大部分设备执行以后的大部分设备中断处理工作。中断处理工作。DPCDPC例程在低于例程在低于ISRISR的的IRQIRQ的时

    40、候执行,从而避的时候执行,从而避免对其他中断产生不希望的阻塞。免对其他中断产生不希望的阻塞。DPCDPC例程初始化例程初始化I/OI/O完成并完成并启动关于设备的下一个队列的启动关于设备的下一个队列的I/OI/O操作操作5050WDMWDM驱动程序编程实例驱动程序编程实例WdmDriverWdmDriver是一个是一个WDMWDM驱动程序,它实现了一个驱动程序,它实现了一个4 4字节的核心态字节的核心态内存缓冲区,内存缓冲区,Win32 Win32 应用程序可以对该缓冲区进行读写操作应用程序可以对该缓冲区进行读写操作由于采用由于采用WDMWDM模型,模型,WdmDriverWdmDriver

    41、可以运行在可以运行在Windows 98 Windows 98 和和Windows 2000/XP/2003Windows 2000/XP/2003两个平台上两个平台上5151DriverEntryDriverEntry例程例程驱动程序向驱动程序向I/OI/O管理器显露一个名为管理器显露一个名为DriverEntryDriverEntry的函数,在的函数,在启动驱动程序的时候,启动驱动程序的时候, I/OI/O管理器将调用这个入口函数。管理器将调用这个入口函数。 DriverEntryDriverEntry相当于作为应用程序入口的相当于作为应用程序入口的mainmain函数或函数或WinMai

    42、nWinMain函数函数驱动程序可以被多个类似的硬件使用,但驱动程序的某些全驱动程序可以被多个类似的硬件使用,但驱动程序的某些全局初始化操作只能在第一次被装入时执行一次,局初始化操作只能在第一次被装入时执行一次,DriverEntryDriverEntry例程就是用于这个目的例程就是用于这个目的DriverEntryDriverEntry例程的主要工作是把各种函数指针填入驱动程序例程的主要工作是把各种函数指针填入驱动程序对象,这些指针为操作系统指明了驱动程序容器中各种子例对象,这些指针为操作系统指明了驱动程序容器中各种子例程的位置程的位置5252DriverEntryDriverEntry例程

    43、例程5353AddDeviceAddDevice例程例程AddDeviceAddDevice函数的基本职责是创建一个设备对象并把它连接到函数的基本职责是创建一个设备对象并把它连接到以以pdopdo为栈底的设备堆栈中,主要步骤如下:为栈底的设备堆栈中,主要步骤如下: 调用调用IoCreateDeviceIoCreateDevice创建设备对象,并建立一个私有的设备扩创建设备对象,并建立一个私有的设备扩展对象展对象 注册一个或多个设备接口,以便应用程序能知道设备的存在。注册一个或多个设备接口,以便应用程序能知道设备的存在。另外,还可以给出设备名并创建符号连接另外,还可以给出设备名并创建符号连接 调

    44、用调用IoAttachDeviceToDeviceStackIoAttachDeviceToDeviceStack函数,把新设备对象放到函数,把新设备对象放到堆栈上堆栈上 初始化设备对象的初始化设备对象的FlagFlag成员成员5454AddDeviceAddDevice例程例程1 1创建设备对象与设备扩展对象创建设备对象与设备扩展对象 :5555AddDeviceAddDevice例程例程2 2注册设备接口注册设备接口5656AddDeviceAddDevice例程例程3 3建立设备堆栈建立设备堆栈5757AddDeviceAddDevice例程例程4 4设置设备标志设置设备标志fdofdo

    45、 - - Flags |= DO_BUFFERED_IO;Flags |= DO_BUFFERED_IO; fdofdo - - Flags &= DO_DEVICE_INITIALIZING;Flags &= DO_DEVICE_INITIALIZING; return STATUS_SUCCESS;return STATUS_SUCCESS; 5858其他必须的例程其他必须的例程DispatchPnpDispatchPnp例程例程DispatchPowerDispatchPower例程例程DispatchWmiDispatchWmi例程例程5959DispatchPnpDispatchPn

    46、p例程例程NTSTATUS DispatchPnp(PDEVICE_OBJECT fdo, PIRP Irp) PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp); ULONG fcn = stack-MinorFunction; NTSTATUS status = StaTUS_SUCCESS; Switch(fcn) case IRP_MN_START_DEVICE: status = PnpStartDeviceHandler(fdo, irp); break; case IRP_MN_REMOVE_DEVICE: s

    47、tatus = PnpRemoveDeviceHandler(fdo, irp); break; . default: PnpDefaultHandler(fdo, irp); ; return status; 6060DispatchPowerDispatchPower例程例程6161DispatchWmiDispatchWmi例程例程驱动程序对驱动程序对WMIWMI的支持主要是基于对主代码为的支持主要是基于对主代码为IRP_MJ_SYSTEM_CONTROLIRP_MJ_SYSTEM_CONTROL的的IRPIRP的支持。为了能接收到这种的支持。为了能接收到这种IRPIRP,必须先注册这种

    48、需求:必须先注册这种需求: IoWMIRegistrationControl(fdoIoWMIRegistrationControl(fdo, WMI_ACTION_REGISTER);, WMI_ACTION_REGISTER);调用调用IoWMIRegistrationControlIoWMIRegistrationControl函数的恰当位置是在函数的恰当位置是在AddDeviceAddDevice例程中,注册完成后,一旦系统认为可以安全地向例程中,注册完成后,一旦系统认为可以安全地向驱动程序发送系统控制驱动程序发送系统控制IRPIRP时,它就向驱动程序发出一个时,它就向驱动程序发出一个

    49、IRP_MJ_SYSTEM_CONTROLIRP_MJ_SYSTEM_CONTROL请求,以获得设备的详细寄存信息请求,以获得设备的详细寄存信息对于对于WDMWDM驱动程序而言,系统控制驱动程序而言,系统控制IRPIRP的分发例程的分发例程DispatchWmiDispatchWmi是必须提供的,一般的做法是委托是必须提供的,一般的做法是委托WMILIBWMILIB来处理系统控制来处理系统控制IRPIRP,WMILIBWMILIB实际上是一个内核模式实际上是一个内核模式DLLDLL,它导出的服务可以被其他,它导出的服务可以被其他驱动程序调用驱动程序调用6262其他可选的例程其他可选的例程Win

    50、dowsWindows应用程序与设备驱动程序打交道主要是通过应用程序与设备驱动程序打交道主要是通过CreateFileCreateFile、 ReadFileReadFile、WriteFileWriteFile 和和DeviceIoControlDeviceIoControl等等Win32 APIWin32 API来进行的,这些来进行的,这些APIAPI对应着驱动程序的一些分发例对应着驱动程序的一些分发例程程6363DispatchWriteDispatchWrite例程例程6464WDMWDM驱动程序编程实例驱动程序编程实例驱动程序中除了驱动程序中除了DriverEntryDriverEn

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:构造WDM驱动程序开发环境安装成功WindowsDDK后课件.ppt
    链接地址:https://www.163wenku.com/p-3021455.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库