已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Windows设备驱动程序设计 西北工业大学计算机学院周兴社谷建华倪红波 Windows2000 XP的设备驱动程序 Windows2000 XP设备驱动程序的种类 虚拟设备驱动程序 VirtualDeviceDriver VDD 可使DOS应用程序访问x86平台上的硬件 也可支持Windows9x下的对端口访问 WDM驱动程序是一种遵循电源管理协议并能在Win98和Win2000上实现源代码级兼容的PnP驱动程序 WDM驱动程序又可分为类驱动程序 管理已定义类的设备 和小驱动程序 提供厂商专有的支持 显示驱动程序是用于显示和打印设备的内核模式驱动程序 文件系统驱动程序在本地磁盘或网络上实现标准PC文件系统模型 含多层次目录结构和命名文件概念 保留设备驱动程序主要包括WindowsNT早期版本的驱动程序 它直接控制一个硬设备而不用其他驱动程序帮助 可以不做修改地在Windows2000中运行 WDM的基本结构 1 设备对象设备对象 系统为帮助软件管理硬件而创建的一个数据结构 包括PDO FDO FiDO PDO 物理设备对象 设备对象中的物理型对象 FDO 功能设备对象 设备对象中的功能型对象 FiDO 过滤器设备对象 在I O管理器 FDO和PDO间的监视 修改IRP流的过滤型对象 分上层过滤和下层过滤对象 设备对象栈 描述对设备对象内部处理请求的驱动层次的栈型结构 功能驱动程序 管理FDO所代表的设备 负责其初始化 处理I O操作 I O操作完成时产生中断事件 为用户提供一种适当的设备控制方式 总线驱动程序 负责管理PDO硬件和计算机之间的连接 过滤器驱动程序 管理FiDO所代表的设备 用于监视和修改IRP流 硬件或软件人员可利用过滤器驱动程序修改上级驱动程序的传递过来的操作 WDM设备驱动程序类型 每种硬件设备的驱动程序由上述两到三种驱动程序组成 可以无过滤器驱动程序 相同类型的总线共用一种总线驱动程序 如PCI总线驱动程序 设备对象与设备驱动程序关系 每个功能设备对应一个设备对象 设备对象栈为设备对象内部属性 相同型号的多个功能设备对应多个设备对象 每个设备对象具有不同的私有属性值 如设备ID 相同型号的多个功能设备共用一个过滤驱动程序和功能驱动程序 即只有一个驱动程序对象 设备驱动程序与设备关系 同类中成员函数与类实例关系 应用程序对设备对象的操作过程 操作接口 设备驱动程序的Win32API函数 或重载的设备驱动程序的Win32API回调函数 操作参数 设备句柄 操作类型及其它信息 例 DeviceIoControl hDevice DIOC MY IO NULL 0 NULL 0 NULL NULL Win32子系统处理 将I O操作转换后交I O管理器处理 I O管理器创建一个I O请求包 IRP 后 送到设备对象栈的最上层设备对象对应的驱动程序 驱动程序处理 每层驱动程序都可决定如何处理IRP 既可直接处理完该IRP就不再向下传 也可处理完后继续向下传递 还可只做向下传递工作 下层处理完的返回信息又通过该包的结构逐层向上传递 设备驱动程序的装入过程 WDM驱动程序的结构 WDM驱动程序包含许多例程 操作系统调用这些例程来执行对IRP的各种操作 StartIO处理请求队列 AdapterControl处理DMA操作 OnInterrupt处理中断 WDM驱动程序包含例程 DriverEntry例程 这个例程是每一个设备驱动程序的入口 完成某些全局初始化 如将驱动程序对象指针装入到I O管理器中 工作 设置响应各种用户请求的分发例程与I O控制例程的入口 AddDevice例程 对于功能驱动程序 其AddDevice函数的基本职责是创建一个设备对象并把它连接到以PDO为底的设备堆栈中 DispatchPnp例程 用于处理IRP MJ PNP消息 以便能实现即插即用的功能 DispatchPower例程 用于实现对电源管理的支持 DispatchWmi例程 WMI是微软实现的基于Web的企业管理工业标准 该例程用于处理有关的消息 驱动程序的DriverEntry函数示例 extern C NTSTATUSDriverEntry INPDRIVER OBJECTDriverObject INPUNICODE STRINGRegistryPath 初始化例程的入口地址DriverObject DriverUnload DriverUnload DriverObject DriverExtension AddDevice AddDevice DriverObject DriverStartIo StartIo DriverObject MajorFunction IRP MJ PNP DispatchPnp DriverObject MajorFunction IRP MJ POWER DispatchPower DriverObject MajorFunction IRP MJ SYSTEM CONTROL DispatchWmi 这里可加入其他MajorFunction处理例程的入口地址 驱动程序的AddDevice函数示例 NTSTATUSAddDevice PDRIVER OBJECTDriverObject PDEVICE OBJECTpdo NTSTATUSstatus PDEVICE OBJECTfdo status IoCreateDevice DriveObject sizeof WDM DEVICE EXTENSION NULL FILE DEVICE UNKNOWN 0 FALSE fdo 在fdo中产生我们的功能设备对象if NT ERROR status returnstatus 驱动程序的IRP派遣函数示例 NTSTATUSDispatchXxx PDEVICE OBJECTdevice PIRPIrp PIO STACK LOCATIONstack IoGetCurrentIrpStackLocation Irp 获得栈单元指针PDEVICE EXTENSIONpdx PDEVICE EXTENSION device DeviceExtension 获得设备扩展 其他IRP处理操作returnSTATUS Xxx 返回状态码 I O请求包 IRP 定义 I O请求包 IRP 是驱动程序操作的中心 它是一个内核 对象 是预先定义的数据结构 应用 I O管理器通过IRP对设备对象进行操作 I O管理器接收到一个I O请求后 分配并初始化一个IRP 再把它传递到合适的设备驱动程序中的最高驱动程序中 设备对象属性为设备驱动程序处理的数据 由一个固定的首部和一个可变数目的I O栈组成 1 IRP组成 IRP首部组成 I O栈 通过IO STACK LOCATION结构数组实现 一次I O请求可能对应多个I O操作实现方法 较多个IRP实现 一个IRP实现 I O栈实现 较优 IRP中的I O栈组成 IO STACK LOCATION结构成员 MajorFunction 该IRP的主功能码 MinorFunction 该IRP的副功能码 Parameters IRP参数 DeviceObject 与该栈单元对应的设备对象地址 FileObject 内核文件对象地址 CompletionRoutine I O完成程序地址 Context 任意的与上下文相关的值 IRP MJ CREATE请求 创建设备映射 IRP MJ CLOSE请求 关闭设备映射 IRP MJ READ请求 读取设备对象的信息 IRP MJ WRITE请求 对设备对象写信息 IRP MJ PNP请求 实现PnP管理 如IRP MN START DEVICE请求 启动设备 IRP MJ IOCTL请求 I O控制 Parameters成员的几个常见的类型 2 IRP创建与处理 创建IRP的函数 IoBuildAsynchronousFsdRequest 创建异步IRPIoBuildSynchronousFsdRequest 创建同步IRPIoBuildDeviceIoControlRequest 创建同步IRP MJ DEVICE CONTROL或 IRP MJ INTERNAL DEVICE CONTROL请求IoAllocateIrp 创建其他种类IRPIoMakeAssociatedIrp 创建某些IRP的子IRP 创建者 I O管理器 或其他的驱动程序 I O管理器在创建完IRP后 将I O请求信息设置到IRP中 并将IRP发送到设备驱动程序中 已知参数信息 PDEVICE OBJECTDeviceObject 设备对象结构IRP MJ Xxx I O请求对应的功能码I O管理器的处理流程 PIO STACK LOCATIONstack IoGetNextIrpStackLocation Irp 获得该IRP第一个堆栈单元的指针 堆栈初始为空 stack MajorFunction IRP MJ Xxx 填充MajorFunction代码 对栈做其他初始化的工作 如StartIo NTSTATUSstatus IoCallDriver DeviceObject Irp 把IRP发送到设备驱动程序 IRP的设置与派遣 IoCallDriver的执行过程 NTSTATUSIoCallDriver PDEVICE OBJECTdevice PIRPIrp IoSetNextIrpStackLocation Irp PIO STACK LOCATIONstack IoGetCurrentIrpStackLocation Irp 获得栈单元指针stack DeviceObject device 设置设备对象结构地址ULONGfcn stack MajorFunction 得到主功能号PDRIVER OBJECTdriver device DriverObject 获得驱动程序对象的地址return driver MajorFunction fcn device Irp 利用主功能号调用相应的派遣函数 driver MajorFunction fcn 是函数指针 它所指向的派遣函数是在DriverEntry例程中指定的 3 IRP参数与Win32API 大部分IRP参数可以和Win32函数对应起来 五 即插即用 支持即插即用主要是指实现一个AddDevice程序和一个IRP MJ PNP处理程序 这个PnPIRP有8个次功能代码 它们的主功能代码都是IRP MJ PNP IRP MN START DEVICE分配资源并启动设备 IRP MN QUERY REMOVE DEVICE询问一个设备是否可以删除 IRP MN REMOVE DEVICE设备被拔出 删除设备 IRP MN CANCEL REMOVE DEVICE取消查询删除请求 IRP MN STOP DEVICE停止设备进行资源重新分配 IRP MN QUERY STOP DEVICE询问设备是否可以停止 IRP MN CANCEL STOP DEVICE取消查询停止请求IRP MN SURPRISE REMOVAL用户在意外下拔出设备 六 数据读 写 WDM有4个标准的资源类型 分别是 CmResourceTypePort 端口资源 CmResourceTypeMemory 内存资源 CmResourceTypeInterrupt 中断资源 CmResourceTypeDma DMA资源 1 内存与端口访问 尽管PC机的I O端口是单独编址的 但为了做到和统一编址的机器兼容性 Windows2000的设计者使用了硬件抽象层 HAL 的概念 无论是单独编址还是统一编址 只需要使用P386表中所给的函数就可以访问端口和内存了 2 响应中断 响应中断首先要配置中断 也就是截获中断 然后就需要编写中断处理程序 配置中断资源是在StartDevice函数中实现的 使用从CmResourceTypeInterrupt描述符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高效节能捕捞船队组建可行性研究报告
- 海南省三沙市2026年重点学校初一入学语文分班考试试题及答案
- 2026年黑龙江省哈尔滨中小学教师招聘考试试卷含答案
- 电动三轮车锂电池生产及农村配送配套项目可行性研究报告
- 基本乐理模拟试题及答案pdf
- 北京西城区 2025-2026学年七年级下学期期末考试道德与法治试题(文字版含答案)
- 福建省福州市仓山区2023-2024学年第一学期校内期中质量检查八年级地理试卷(文字版含答案)
- 高考数学一轮复习 达标训练 10.1计数原理与排列组合习题
- 甘肃省嘉峪关市2026年高三最后一模语文试题含解析
- 2025-2026学年阿坝藏族羌族自治州黑水县数学三年级第二学期期末考试模拟试题含解析
- 特种设备生产单位质量安全总监和质量安全员考试题库(含答案)
- 水马封路施工方案
- 缺血缺氧性脑病课件
- 项目工程师知识培训课件
- 新招投标法培训课件
- 脊髓型颈椎病的康复治疗
- 邻里纠纷及其合法合理处理课件
- T/CAQI 47-2018饮用水售水机技术要求
- 快运物流月结合同协议书
- 儿童暴发性心肌炎诊治专家建议(2025)解读课件
- 中医诊所医生聘用合同
评论
0/150
提交评论