




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Windows驱动程序设计入门,Windows设备驱动程序设计,2,Windows的虚拟内存管理,3,Windows的虚拟内存管理,Windows的虚拟内存管理机制为应用程序和驱动 程序提供了两种服务: 使每个进程都拥有自己独立的内存地址空间;对于32位Windows而言,每个任务可寻址的内存地址空间都为0x00000000 0xFFFFFFFF(232, 4GB) 当物理内存不够4GB时,虚拟内存管理模块会用磁盘空间模拟内存空间,并且该模拟过程对程序是透明的。,4,用户地址空间与内核地址空间,Windows将每个进程的4GB的独立地址空间又划分为用户地址空间(0x00000000 0x7FFFFFFF)和 内核地址空间(0x80000000 0xFFFFFFFF)两部分。 操作系统内核代码和数据存放在内核地址空间;每个进程自己私有的代码和数据存放在用户地址空间 虽然Windows的内核代码和数据被映射到了每个进程的地址空间中(所有进程看到的内容是相同的),但在实际的物理内存中,只有内核代码和数据的一份拷贝。,5,用户地址空间与内核地址空间,6,用户模式与内核模式,为了更好地保护系统,Windwos规定了两种处理器工作模式:用户模式和内核模式。 工作在用户模式的程序只能使用CPU支持指令集的一个子集,只能访问用户空间中的内存,并且不能直接访问硬件。 工作在内核模式的程序不受任何限制,可以使用CPU支持的任意指令,可以访问任意的内存空间,可以直接访问硬件。 所有的Windows应用程序都工作于用户模式,Windows内核程序都工作于内核模式。 也可以认为:位于用户空间的代码都工作于用户模式,位于内核空间的代码都工作于内核模式。 应用程序只能通过Windows规定的一些API访问内核模式的代码和数据。,7,什么是Windows驱动程序?,Windows驱动程序是一种位于内核地址空间并且 工作于内核模式的一种特殊的程序类型(.sys文件)。 驱动程序是操作系统信任的一个内核扩展模块。 驱动程序和操作系统之间遵循的是容器与插件模型。OS负责管理Driver的生命周期;Driver是一种被动的软件模块。 驱动程序类似于DLL程序,它是一个回调函数(子程序)的集合体,这些函数由OS在适当的时候调用 驱动程序也可以通过Windows内核API获得OS的一些服务。,8,编驱动程序用什么编程语言?,C语言 C+语言 1的情况下会用到汇编语言 目前还不能用其它高级语言编写驱动程序。,9,编驱动程序用什么开发工具?,DDK (Driver Development Kit) (可以到微软网站上免费下载) Driver Studio(Compuware NuMega公司的产品)DDK WinDriver DDK,10,DDK中包含什么?,与Windows内核API函数相关的头文件(如ddk.h, wdm.h等) 与Windows内核API函数相关的导入库(wdm.lib等) 内核专用C运行时间库的头文件和导入库 关于驱动程序编程模型和内核API函数的帮助文档 C+编译器和链接器,综合创建工具 内核调试工具、分析工具,11,驱动程序的入口函数,extern “C” #include “wdm.h” extern “C“ NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) return STATUS_SUCCESS; ,12,HelloWorld版的驱动程序,extern “C” #include “wdm.h” extern “C“ NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) NTSTATUS status = STATUS_DEVICE_CONFIGURATION_ERROR; KdPrint(“Hellow World!“); return status; ,13,内核模式下我们能调用哪些函数?,Windows内核输出的内核API函数; DDK提供的运行时间库 其它驱动程序提供的服务,14,内核模式下我们不能调用哪些函数?,Windows的用户模式API函数; ISO规定的C/C+标准函数库,15,DDK中一个驱动型工程的组成,MAKEFILE文件,一般不作改动 Sources文件:(1) 指示了整个工程由哪些源程序和资源文件构成; (2) 包含了主要的编译参数,指导编译器和链接器的工作。 .cpp文件和.h文件,16,如何安装驱动程序?,必须编写一个安装指示文件(.inf)指导Windows将驱动程序安装到指定位置(一般安装在windowssystem32drivers子目录下),并在注册表中进行登记。 对于即插即用类设备的驱动,操作系统会自动发现该设备并调用“添加新硬件”程序向用户询问相应的inf文件的位置。 对于非即插即用类设备的驱动,用户必须自己手动调用“添加新硬件”程序,并通过告诉该程序inf文件的位置。,17,inf文件主要包含了哪些内容?,设备类型、设备型号、厂商信息、程序版本号。 对操作系统版本和CPU类型的要求 源文件(.sys文件)的文件名和所在位置 安装目标子目录 在注册表中添加哪些内容 硬件配置信息 安全配置信息,18,“即插即用”型外设,从用户角度看,即插即用外设具备如下两种能力: 主机能够自动发现该外设; 主机能够自动查找并加载相应的驱动程序。 从专业角度看,即插即用型外设还具有如下功能: 能够利用即插即用总线协议向主机汇报自己的 唯一标识信息和I/O资源请求; 能够通过即插即用总线协议接收主机的I/O资源分配结果并对自己的硬件逻辑作出相应的调整。 常用的I/O资源包括:I/O地址空间、内存空间、中断号、DMA通道号等。,19,总线与总线驱动,可以这样认为,一台计算机中除了CPU和内存之外的其他硬件模块都可以称之为外设。凡是外设都需要驱动程序。 CPU与外设之间的连接和通信必须通过总线。一条总线即可以链接一台外设,也可以连接多台外设。 以CPU本身的地址总线和数据总线为根,计算机系统中的各类总线形成一种树形结构。 总线也被视为外设,也需要驱动程序支持。这类总线型外设的驱动被称为总线驱动。 CPU本身的总线所对应的驱动称为“根总线驱动”,总线的树形结构,21,即插即用总线,能够连接即插即用设备的总线称为即插即用总线。 每一种即插即用总线都规定了一套即插即用协议用于和设备之间的身份识别,I/O 资源协商等。 常见的即插即用总线包括:PnP-ISA、PCI、USB、1394、PCMCIA等,22,即插即用型设备驱动的加载过程,现假设驱动程序已被正确安装: 某种PnP总线驱动发现了即插即用设备的存在: 对于热插拔设备,则发现过程发生于插入设备的瞬间; 如果是非热插拔设备,则发现过程发生于系统启动时 PnP总线驱动利用即插即用协议询问设备的ID信息 设备的ID信息是一个能够唯一标识该设备的字符串,一般格式为:总线类型&厂商ID&产品ID&设备ID&版本号 PnP总线驱动将该ID信息上报给OS OS利用该设备ID信息查找硬件键(注册表HKLM SYSTEMCurrentControlSetEnum的某个子目录),23,即插即用型设备驱动的加载过程,OS查找到该设备的硬件键之后,再通过硬件键的Service子键查到该设备的服务键(HKLMSYSTEM CurrentControlSetServices的某个子目录) 通过服务键的ImagePath子键的值就可以找到该设备所对应的驱动程序。 OS扫描内存,看该驱动是否已被加载,如果没有,则立即加载该驱动,并调用该驱动的“DiverEnry”回调函数。 加载完毕之后,OS调用该驱动的“AddDevice”回调函数通知驱动程序有新的设备到来。,24,即插即用型设备驱动的加载过程,PnP总线驱动利用即插即用协议询问设备的I/O资源请求,并将请求信息上报给OS; OS根据目前系统资源使用情况进行资源分配,并将分配结果反馈给总线驱动和该设备的驱动; 现在该设备的硬件和驱动都知道了资源分配结果就可以正常工作了。,25,非即插即用型设备驱动的加载过程,非PnP总线驱动在系统启动时通过扫描注册表发现非PnP设备的存在,并向OS报告ID信息。(例如根总线驱动通过扫描HKLM SYSTEM CurrentControlSetEnumRoot的各个子目录。) 后面的加载步骤与即插即用型设备类似。 唯一不同的是非PnP设备的资源请求直接写在了注册表里,总线驱动不再询问设备。,26,递归加载,根总线驱动负责发现并装载挂到它上面的二级总线(如PCI、ISA等)的驱动。 二级总线的驱动被装载并正常工作之后负责发现挂在它们上面的外设以及三级总线的驱动,并依次类推。这个过程称为递归加载过程。,27,如何卸载驱动程序?,在控制面板 系统 硬件设备管理器中找到该设备并右击“卸载”,28,基于I/O请求包(IRP)的工作方式,29,驱动的层次结构,在Windows系统中,与一个设备相关的驱动程序至少包含两种:功能驱动和总线驱动。 另外一个设备还可以包含可选的过滤驱动。 Windows为每个驱动程序都建立一个数据结构Driver Object,用于记录与该驱动本身相关的信息 每个驱动程序为属于自己管理的设备创建一个数据结构Device Object,用于记录与设备相关的信息。 功能驱动创建的Device Object叫FDO,过滤驱动创建的叫FiDO,总线驱动创建的叫PDO。 FDO、FiDO和PDO串连在一起形成设备对象栈。,30,驱动的层次结构,31,驱动对象(Driver Object),在操作系统首次装载一个驱动程序之后,它会创建一个数据结构用来记录该驱动,该数据结构我们称为驱动对象(Driver Object)。 驱动对象记录与驱动程序本身相关的信息,它主要包含了除了DriverEntry之外的其它驱动程序入口函数的入口地址。(驱动程序是一种具有多个入口函数的程序) 驱动对象是由操作系统创建,然后作为DriverEntry的第一个参数传递给你的程序。 在获得驱动对象的指针之后,你的程序需要对其中的一些字段进行初始化。,32,驱动对象(Driver Object),驱动对象在DDK的头文件(Wdm.h)中按如下方式定义:。,typedef struct _DRIVER_OBJECT CSHORT Type; CSHORT Size; DRIVER_OBJECT, *PDRIVER_OBJECT;,由上面的定义可以看成,驱动对象不同于C+中的Class,它只是一个Struct。,33,34,驱动对象的一些关键字段(一),DriverStartIo (PDRIVER_STARTIO) : 指向StartIO入口函数的指针. DriverUnload (PDRIVER_UNLOAD) :指向DriverUnload入口函数的指针。在驱动程序被从内存中卸载时,DriverUnload入口函数会被操作系统调用,你应该在该函数内部做一些与DriverEntry向对应的资源清除工作。 MajorFunction (一个数组,数组中每一元素又是一个指向函数的指针 PDRIVER_DISPATCH):数组中每一个指针指向一个入口函数。在接收到不同的请求包(IRP)时,OS会调用不同的入口函数。,35,驱动对象的一些关键字段(二),Device
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数据库加密与隐私保护的新技术革命-洞察及研究
- 奇石系工艺品网络销售代理合同3篇
- 山东省临沂市莒南县2024-2025学年八年级下学期期末考试物理试题(含答案)
- 吉林省长春市净月高新区华岳学校2025-2026学年八年级上学期开学考试语文试题(含答案)
- 方城一高2025年秋期高二阶段性拔尖考试(二)物理学科
- (终)仁寿县城区学校2025年春季半期教学质量监测
- 部门春节安全培训内容课件
- 自然语言交互教学-洞察及研究
- 部门及安全培训心得课件
- 避孕药具发放课件
- 2025至2030全球及中国细胞培养行业产业运行态势及投资规划深度研究报告
- 2025年《党政机关厉行节约反对浪费条例》应知应会测试考试题库
- 2025至2030中国煤制天然气行业发展趋势分析与未来投资战略咨询研究报告
- 社会组织制度管理制度
- 智能制造装备产业“十五五”发展规划公布
- 《小学教师专业发展》课件-第四章 教师的自我发展
- 企业ESG表现与其韧性之间的关联研究:以厚德方能行稳致远为视角的探索分析
- 2025-2030中国魔芋胶行业营销渠道与重点企业发展分析报告
- 小学生书法课件模板
- 公司雨水排放管理制度
- DB32/T 3550-2019住宿业清洗消毒卫生规范
评论
0/150
提交评论