版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Version 1.0 Windows设备驱动程序设计设备驱动程序设计 Windows的虚拟内存管理机制为应用程序和驱动的虚拟内存管理机制为应用程序和驱动 程程 序提供了两种服务:序提供了两种服务: 使每个进程都拥有自己独立的内存地址空间;对于使每个进程都拥有自己独立的内存地址空间;对于 32位位Windows而言,每个任务可寻址的内存地址空而言,每个任务可寻址的内存地址空 间都为间都为0 x00000000 0 xFFFFFFFF(232, 4GB) 当物理内存不够当物理内存不够4GB时,虚拟内存管理模块会用磁时,虚拟内存管理模块会用磁 盘空间模拟内存空间,并且该模拟过程对程序是透盘空间模拟
2、内存空间,并且该模拟过程对程序是透 明的。明的。 Windows将每个进程的将每个进程的4GB的独立地址空间又划分的独立地址空间又划分 为用户地址空间为用户地址空间(0 x00000000 0 x7FFFFFFF)和和 内核地址空间内核地址空间(0 x80000000 0 xFFFFFFFF)两部分。两部分。 操作系统内核代码和数据存放在内核地址空间;每操作系统内核代码和数据存放在内核地址空间;每 个进程自己私有的代码和数据存放在用户地址空间个进程自己私有的代码和数据存放在用户地址空间 虽然虽然Windows的内核代码和数据被映射到了每个进的内核代码和数据被映射到了每个进 程的地址空间中(所有
3、进程看到的内容是相同的),程的地址空间中(所有进程看到的内容是相同的), 但在实际的物理内存中,只有内核代码和数据的一但在实际的物理内存中,只有内核代码和数据的一 份拷贝。份拷贝。 为了更好地保护系统,为了更好地保护系统,Windwos规定了两种处理器工作模式:规定了两种处理器工作模式: 用户模式和内核模式。用户模式和内核模式。 工作在用户模式的程序只能使用工作在用户模式的程序只能使用CPU支持指令集的一个子集,支持指令集的一个子集, 只能访问用户空间中的内存,并且不能直接访问硬件。只能访问用户空间中的内存,并且不能直接访问硬件。 工作在内核模式的程序不受任何限制,可以使用工作在内核模式的程序
4、不受任何限制,可以使用CPU支持的支持的 任意指令,可以访问任意的内存空间,可以直接访问硬件。任意指令,可以访问任意的内存空间,可以直接访问硬件。 所有的所有的Windows应用程序都工作于用户模式,应用程序都工作于用户模式,Windows内核内核 程序都工作于内核模式。程序都工作于内核模式。 也可以认为:位于用户空间的代码都工作于用户模式,位于也可以认为:位于用户空间的代码都工作于用户模式,位于 内核空间的代码都工作于内核模式。内核空间的代码都工作于内核模式。 应用程序只能通过应用程序只能通过Windows规定的一些规定的一些API访问内核模式的访问内核模式的 代码和数据。代码和数据。 Wi
5、ndows驱动程序是一种位于内核地址空间并且驱动程序是一种位于内核地址空间并且 工工 作于内核模式的一种特殊的程序类型作于内核模式的一种特殊的程序类型(.sys文件文件)。 驱动程序是操作系统信任的一个内核扩展模块。驱动程序是操作系统信任的一个内核扩展模块。 驱动程序和操作系统之间遵循的是容器与插件模型。驱动程序和操作系统之间遵循的是容器与插件模型。 OS负责管理负责管理Driver的生命周期;的生命周期;Driver是一种被动是一种被动 的软件模块。的软件模块。 驱动程序类似于驱动程序类似于DLL程序,它是一个回调函数程序,它是一个回调函数(子子 程序程序)的集合体,这些函数由的集合体,这些
6、函数由OS在适当的时候调用在适当的时候调用 驱动程序也可以通过驱动程序也可以通过Windows内核内核API获得获得OS的一的一 些服务。些服务。 C语言语言 C+语言语言 1的情况下会用到汇编语言的情况下会用到汇编语言 目前还不能用其它高级语言编写驱动程序。目前还不能用其它高级语言编写驱动程序。 DDK (Driver Development Kit) (可以到微软网站上可以到微软网站上 免费下载免费下载) Driver Studio(Compuware NuMega公司的产品)公司的产品) DDK WinDriver DDK 与与Windows内核内核API函数相关的头文件函数相关的头文件
7、(如如ddk.h, wdm.h等等) 与与Windows内核内核API函数相关的导入库函数相关的导入库(wdm.lib等等) 内核专用内核专用C运行时间库的头文件和导入库运行时间库的头文件和导入库 关于驱动程序编程模型和内核关于驱动程序编程模型和内核API函数的帮助文档函数的帮助文档 C+编译器和链接器,综合创建工具编译器和链接器,综合创建工具 内核调试工具、分析工具内核调试工具、分析工具 extern “C” #include “wdm.h” extern C NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_S
8、TRING RegistryPath) return STATUS_SUCCESS; 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; Windows内核输出的内核内核输出的内核API函数;函数; DDK提供的运行时间库
9、提供的运行时间库 其它驱动程序提供的服务其它驱动程序提供的服务 Windows的用户模式的用户模式API函数;函数; ISO规定的规定的C/C+标准函数库标准函数库 MAKEFILE文件,一般不作改动文件,一般不作改动 Sources文件:文件:(1) 指示了整个工程由哪些源程序和指示了整个工程由哪些源程序和 资源文件构成资源文件构成; (2) 包含了主要的编译参数,指导包含了主要的编译参数,指导 编译器和链接器的工作。编译器和链接器的工作。 .cpp文件和文件和.h文件文件 必须编写一个安装指示文件必须编写一个安装指示文件(.inf)指导指导Windows将驱将驱 动程序安装到指定位置动程序
10、安装到指定位置(一般安装在一般安装在 windowssystem32drivers子目录下子目录下),并在注册表,并在注册表 中进行登记。中进行登记。 对于即插即用类设备的驱动,操作系统会自动发现对于即插即用类设备的驱动,操作系统会自动发现 该设备并调用该设备并调用“添加新硬件添加新硬件”程序向用户询问相应程序向用户询问相应 的的inf文件的位置。文件的位置。 对于非即插即用类设备的驱动,用户必须自己手动对于非即插即用类设备的驱动,用户必须自己手动 调用调用“添加新硬件添加新硬件”程序,并通过告诉该程序程序,并通过告诉该程序inf文文 件的位置。件的位置。 设备类型、设备型号、厂商信息、程序版
11、本号设备类型、设备型号、厂商信息、程序版本号。 对操作系统版本和对操作系统版本和CPU类型的要求类型的要求 源文件源文件(.sys文件文件)的文件名和所在位置的文件名和所在位置 安装目标子目录安装目标子目录 在注册表中添加哪些内容在注册表中添加哪些内容 硬件配置信息硬件配置信息 安全配置信息安全配置信息 从用户角度看,即插即用外设具备如下两种能力:从用户角度看,即插即用外设具备如下两种能力: 主机能够自动发现该外设; 主机能够自动查找并加载相应的驱动程序。 从专业角度看,即插即用型外设还具有如下功能:从专业角度看,即插即用型外设还具有如下功能: 能够利用即插即用总线协议向主机汇报自己的 唯一标
12、识信息和I/O资源请求; 能够通过即插即用总线协议接收主机的I/O资源 分配结果并对自己的硬件逻辑作出相应的调整。 常用的常用的I/O资源包括:资源包括:I/O地址空间、内存空间、中地址空间、内存空间、中 断号、断号、DMA通道号等。通道号等。 可以这样认为,一台计算机中除了可以这样认为,一台计算机中除了CPU和内存之外和内存之外 的其他硬件模块都可以称之为外设。凡是外设都需的其他硬件模块都可以称之为外设。凡是外设都需 要驱动程序。要驱动程序。 CPU与外设之间的连接和通信必须通过总线。一条与外设之间的连接和通信必须通过总线。一条 总线即可以链接一台外设,也可以连接多台外设。总线即可以链接一台
13、外设,也可以连接多台外设。 以以CPU本身的地址总线和数据总线为根,计算机系本身的地址总线和数据总线为根,计算机系 统中的各类总线形成一种树形结构。统中的各类总线形成一种树形结构。 总线也被视为外设,也需要驱动程序支持。这类总总线也被视为外设,也需要驱动程序支持。这类总 线型外设的驱动被称为总线驱动。线型外设的驱动被称为总线驱动。 CPU本身的总线所对应的驱动称为本身的总线所对应的驱动称为“根总线驱动根总线驱动” 能够连接即插即用设备的总线称为即插即用总线。能够连接即插即用设备的总线称为即插即用总线。 每一种即插即用总线都规定了一套即插即用协议用每一种即插即用总线都规定了一套即插即用协议用 于
14、和设备之间的身份识别,于和设备之间的身份识别,I/O 资源协商等。资源协商等。 常见的即插即用总线包括:常见的即插即用总线包括:PnP-ISA、PCI、USB、 1394、PCMCIA等等 现假设驱动程序已被正确安装:现假设驱动程序已被正确安装: 某种某种PnP总线驱动发现了即插即用设备的存在:总线驱动发现了即插即用设备的存在: 对于热插拔设备,则发现过程发生于插入设备的瞬间; 如果是非热插拔设备,则发现过程发生于系统启动时 PnP总线驱动利用即插即用协议询问设备的总线驱动利用即插即用协议询问设备的ID信息信息 设备的ID信息是一个能够唯一标识该设备的字符串,一 般格式为:总线类型总线类型 C
15、SHORT Size; DRIVER_OBJECT, *PDRIVER_OBJECT; 由上面的定义可以看成,驱动对象不同于由上面的定义可以看成,驱动对象不同于C+中的中的 Class,它只是一个,它只是一个Struct。 DriverStartIo (PDRIVER_STARTIO) : 指向指向StartIO 入口函数的指针入口函数的指针. DriverUnload (PDRIVER_UNLOAD) :指向:指向 DriverUnload入口函数的指针。在驱动程序被从内入口函数的指针。在驱动程序被从内 存中卸载时,存中卸载时,DriverUnload入口函数会被操作系统入口函数会被操作系统
16、 调用,你应该在该函数内部做一些与调用,你应该在该函数内部做一些与DriverEntry 向对应的资源清除工作。向对应的资源清除工作。 MajorFunction (一个数组,数组中每一元素又是一一个数组,数组中每一元素又是一 个指向函数的指针个指向函数的指针 PDRIVER_DISPATCH):数组:数组 中每一个指针指向一个入口函数。在接收到不同的中每一个指针指向一个入口函数。在接收到不同的 请求包请求包(IRP)时,时,OS会调用不同的入口函数。会调用不同的入口函数。 DeviceObject (PDEVICE_OBJECT) : 指向一个链表指向一个链表 的指针,该链表中每一个节点都存储了一个的指针,该链表中每一个节点都存储了一个FDO对对 象。每一个象。每一个FDO都代表一个由该驱动维护的硬件设都代表一个由该驱动维护的硬件设 备实例。在备实例。在WDM模型中,该链表由模型中,该链表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年专利权质押贷款操作指南:让专利技术等“软资产”变成融资“硬通货”
- 2026年新质生产力驱动下无人机技术创新与产业升级路径
- 2026年电碳证市场协同衔接促进绿色价值闭环
- 2026年装配式建筑从试点示范向提质扩面全面转型实务手册
- 2026年边云协同从技术概念走向产业实践关键路径
- 2026年政府采购支持绿色建材促进建筑品质提升政策汇编
- 2026年深海微生物多糖与功能保健产品研发指南
- 2026上海复旦大学化学系舒校坤课题组招聘全职博士后备考题库及参考答案详解(精练)
- 2026广州南沙人力资源发展有限公司一线社工招聘备考题库及答案详解【新】
- 2026重庆财经学院财务处工作人员招聘1人备考题库(精练)附答案详解
- 妇科肿瘤及早期症状
- 谈话室装修合同范本
- 化肥产品生产许可证实施细则(一)(复肥产品部分)2025
- 骨关节疾病的pt康复教案
- 备战2026年中考语文5年中考2年模拟真题作文探究-【浙江省】(解析版)
- 2025年10月自考00908网络营销与策划试题及答案含评分参考
- 天然水体中的主要离子专题培训教案
- 房屋市政工程施工现场安全风险分级管控与防范措施清单
- (13)普通高中艺术课程标准日常修订版(2017年版2025年修订)
- 海绵城市施工方案
- 防高坠安全教育课件
评论
0/150
提交评论