Windows驱动程序设计入门(精品·公开课件).ppt

Windows驱动程序设计入门(精品·公开课件).ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows驱动程序设计入门 Windows设备驱动程序设计 Windows的虚拟内存管理 Windows的虚拟内存管理 用户地址空间与内核地址空间 用户地址空间与内核地址空间 用户模式与内核模式 什么是Windows驱动程序? 编驱动程序用什么编程语言? 编驱动程序用什么开发工具? DDK中包含什么? 驱动程序的入口函数 HelloWorld版的驱动程序 内核模式下我们能调用哪些函数? 内核模式下我们不能调用哪些函数? DDK中一个驱动型工程的组成 如何安装驱动程序? inf文件主要包含了哪些内容? “即插即用”型外设 总线与总线驱动 总线的树形结构 即插即用总线 即插即用型设备驱动的加载过程 即插即用型设备驱动的加载过程 即插即用型设备驱动的加载过程 非即插即用型设备驱动的加载过程 递归加载 如何卸载驱动程序? 基于I/O请求包(IRP)的工作方式 驱动的层次结构 驱动的层次结构 驱动对象(Driver Object) 驱动对象(Driver Object) 驱动对象的一些关键字段(一) 驱动对象的一些关键字段(二) 在操作系统首次装载一个驱动程序之后,它会创建一个数据结构用来记录该驱动,该数据结构我们称为驱动对象(Driver Object)。 驱动对象记录与驱动程序本身相关的信息,它主要包含了除了DriverEntry之外的其它驱动程序入口函数的入口地址。(驱动程序是一种具有多个入口函数的程序) 驱动对象是由操作系统创建,然后作为DriverEntry的第一个参数传递给你的程序。 在获得驱动对象的指针之后,你的程序需要对其中的一些字段进行初始化。 驱动对象在DDK的头文件(Wdm.h)中按如下方式定义:。 typedef?struct?_DRIVER_OBJECT?{?? CSHORT?Type;?? CSHORT?Size; … …?? }?DRIVER_OBJECT,?*PDRIVER_OBJECT; 由上面的定义可以看成,驱动对象不同于C++中的Class,它只是一个Struct。 DriverStartIo (PDRIVER_STARTIO) : 指向StartIO入口函数的指针. DriverUnload (PDRIVER_UNLOAD) :指向DriverUnload入口函数的指针。在驱动程序被从内存中卸载时,DriverUnload入口函数会被操作系统调用,你应该在该函数内部做一些与DriverEntry向对应的资源清除工作。 MajorFunction (一个数组,数组中每一元素又是一个指向函数的指针 PDRIVER_DISPATCH):数组中每一个指针指向一个入口函数。在接收到不同的请求包(IRP)时,OS会调用不同的入口函数。 Version 1.0 // b.cpp #include stdio.h int main() { int a, *pa; pa = a; printf(%x\n, pa); // 输出1 *pa = 2008; printf(%d\n, *pa); // 输出2 return 0; } // a.cpp #include stdio.h int main() { int a, *pa; pa = a; printf(%x\n, pa); // 输出1 *pa = 18; getchar(); // 使程序暂停住 printf(%d\n, *pa); // 输出2 return 0; } Windows的虚拟内存管理机制为应用程序和驱动 程序提供了两种服务: 使每个进程都拥有自己独立的内存地址空间;对于32位Windows而言,每个任务可寻址的内存地址空间都为0~ 0xFFFFFFFF(232, 4GB) 当物理内存不够4GB时,虚拟内存管理模块会用磁盘空间模拟内存空间,并且该模拟过程对程序是透明的。 Windows将每个进程的4GB的独立地址空间又划分为用户地址空间(0~ 0x7FFFFFFF)和 内核地址空间(0~ 0xFFFFFFFF)两部分。 操作系统内核代码和数据存放在内核地址空间;每个进程自己私有的代码和数据存放在用户地址空间 虽然Windows的内核代码和数据被映射到了每个进程的地址空间中(所有进程看到的内容是相同的),但在实际的物理内存中,只有内核代码和数据的一份拷贝。 为了更好地保护系统,Windwos规定了两种处理器工作模式:用户模式和内核模式。 工作在用户模式的程序只能使用CPU支持指令集的一个子集,只能访问用户空间中的内存,并且不能直接访问硬件。 工作在内核模式的程序不受任何限制,可以使用CPU

您可能关注的文档

文档评论(0)

夏天 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档