《精编》试谈Windows环境下输入输出程序设计

上传人:tang****xu4 文档编号:133495237 上传时间:2020-05-27 格式:PPT 页数:53 大小:162.50KB
返回 下载 相关 举报
《精编》试谈Windows环境下输入输出程序设计_第1页
第1页 / 共53页
《精编》试谈Windows环境下输入输出程序设计_第2页
第2页 / 共53页
《精编》试谈Windows环境下输入输出程序设计_第3页
第3页 / 共53页
《精编》试谈Windows环境下输入输出程序设计_第4页
第4页 / 共53页
《精编》试谈Windows环境下输入输出程序设计_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《《精编》试谈Windows环境下输入输出程序设计》由会员分享,可在线阅读,更多相关《《精编》试谈Windows环境下输入输出程序设计(53页珍藏版)》请在金锄头文库上搜索。

1、第11章Windows环境下输入输出程序设计 11 1Windows设备驱动程序11 2WDM驱动程序11 3PCI总线与PCI Express总线11 4Windows2000 XP环境下输入输出的实现 Windows是一个多任务操作系统 在保护模式下工作 Windows操作系统不支持用户程序对计算机底层硬件进行直接控制 用户程序需要输入 输出时 可以通过通过API ApplicationProgramInterface 应用程序接口 来调用设备驱动程序 对设备实现间接控制 进行输入 输出 Windows9x使用VxDs VirtualDeviceDriver s 虚拟设备驱动 设备驱动程序

2、 Windows2000 XP使用WDM WindowsDriverModel Windows驱动程序模型 设备驱动程序 11 1Windows设备驱动程序 11 1 1虚拟设备在多任务运行环境下 计算机内的硬件 软件资源为多个任务共享 任何一个用户程序都不能独占系统的硬件 软件资源 虚拟设备实质上是真实物理设备的部分资源和相关软件的组合 用来完成用户程序需要的功能 虚拟设备不但可以代表实际存在的硬件设备 还可以模拟实际上不存在的 设备 供用户使用 计算机上的 虚拟光驱 就是一个典型的虚拟设备 与这个设备同名的物理设备是不存在的 用户使用的是硬盘的部分存储空间以及相应的服务程序 使用虚拟设备好

3、处 实现多任务对系统资源的共享 方便用户的使用 实现任务与任务 任务与系统之间的隔离和保护 规范外部设备输入 输出方法 使不同工作方式的设备用相同的方式进行输入输出 对Windows应用程序来讲 虚拟设备就是真实设备 应用程序分不清那个设备是由真实硬件支持的真实设备 那个设备是由虚拟设备驱动程序模拟的虚拟设备 11 1 2Windows9X设备驱动程序 Windows9x是一个分层结构的操作系统 由工作在两个不同层面的组件构成 顶层组件 工作在Ring3层 底层组件 工作在Ring0层 顶层 Windows9x操作系统的顶层组件工作在特权级3 称为ring3层 它给应用程序的运行提供Win32

4、API服务 Windows9x应用程序和Win32API服务一起构成操作系统的顶层 称为系统虚拟机 VM VirtualMachine 对于一个任务来说 这些服务程序以及他们所掌控的硬件资源就是一台 实实在在 的计算机 但是 对于整个系统来说 他们只是由操作系统向用户提供的一个运行用户程序的平台 包括为这个应用程序服务的操作系统组件和部分的硬件资源 每一个DOS应用程序都在一个独立的虚拟机中运行 操作系统允许多个虚拟机同时处于运行状态 底层 Windows9x操作系统的底层组件工作在0特权级 称为ring0层 它就是虚拟机管理器 VMM VirtualMachineManager Window

5、s9x虚拟机管理器由一个内核服务集和许多虚拟设备驱动程序 VxDs VirtualDeviceDriver s 组成 许多VxDs是由Microsoft公司随操作系统提供的 如键盘和显示器等的VxDs 有的VxD则由设备制造商提供 或者由用户自行编写 VxD用来支持特定的硬件或软件 完成需要的功能 VxDs中的程序运行在ring0层 可以执行所有的指令 完成所需的任何软硬件的操作 对于应用程序而言 虚拟机管理器是透明的 应用程序感觉不到管理器的存在 微软已经宣布 从2006年6月起不再提供对Windows9x的技术支持 因此 Windows9x和VxDs的使用将逐渐减少 随着Windows20

6、00 XP的广泛使用 WDM驱动程序的开发和使用已成为主流 11 1 3Windows2000 XP设备驱动程序 Windows2000操作系统组件的层次结构Windows2000操作系统的功能模块划分为用户模式和内核模式两大类 用户模式的操作系统功能模块工作在ring3层 他们不能使用CPU中的特权指令 连同IN OUT这样的非特权指令也被禁止 所有的用户程序都在这一层上运行 内核模式的操作系统模块工作在ring0层 可以使用CPU的任何指令 Windows2000操作系统的层次结构 2 Windows2000的设备驱动程序Windows2000的驱动程序也有两种不同的类型 用户模式驱动程序

7、工作在用户模式 通过调用内核模式驱动程序实现指定的功能 用户模式驱动程序不能直接对硬件设备进行访问 仅仅用于构建一个硬件或软件的运行环境 Windows内核驱动程序工作在内核模式 可以直接访问硬件设备 每个设备驱动程序都有一组完成各种功能的函数 通过调用这些函数可以对某一设备完成特定的操作 内核模式驱动程序的类型文件系统驱动程序可以在本地硬盘 网络 移动存储设备或各种有存储能力的硬件设备实现标准的文件系统 如FAT32 NTFS系统等 PnP驱动程序是一种遵循Windows2000即插即用协议的内核模式驱动程序 WDM驱动程序是一种PnP驱动程序 它同时还遵守电源管理协议 显示驱动程序是一种特

8、殊的内核驱动程序 此类的驱动程序还有打印驱动程序 多媒体驱动程序 网络驱动程序等 遗留设备驱动程序主要用在WindowsNT系统中 它也可以运行在Windows2000系统中 Windows2000内核模式驱动程序的类型 11 2WDM驱动程序 WDM是Microsoft力推的新型驱动程序模型 首先出现在WindowsNT中 现在的Windows98 Me 2000 XP都支持WDM 微软宣称 在后续的操作系统中将继续支持WDM WDM是一个分层的驱动程序 它至少有功能驱动程序 Functiondriver 和总线驱动程序 Busdriver 两个层面 功能驱动程序提供一个设备的使用功能 或者

9、可以认为它就是一个设备的驱动程序 用户程序需要使用该设备时 需要调用功能驱动程序中的功能函数 总线驱动程序负责系统启动时设备的安装 检测 并确定设备的资源使用情况 设备的启动 停止 设备的初始化 设备的电源管理等功能也都由总线驱动程序提供 11 2 1WDM驱动程序模型和层次结构 WDM引入了功能设备对象FDO FunctionalDeviceObject 物理设备对象PDO PhysicalDeviceObject 两个新概念来描述硬件 一个PDO对应一个真实硬件 一个硬件只允许有一个PDO 却可以拥有多个FDO 在驱动程序中直接操作的不是硬件而是相应的PDO与FDO 根据具体的需要还可以选

10、择过滤驱动程序 filterdriver Windows20000的输入输出是包驱动的应用程序调用WDM驱动程序时 系统为每一个用户的请求打包 形成一个I O请求包 I ORequestPackage IRP 然后将其发送至驱动程序 IRP中的PDO字段用来区别是发送给哪一个设备的 某个层次的驱动程序得到IRP后 分析其中的请求 完成本层应该完成的任务 如果IRP要求的任务已经完成 该层次的驱动程序就向上一层传送结果并逐层返回 如果IRP中的请求尚未完成 那么就继续向下层驱动程序传递这个IRP 内核组件就是这样通过发送IRP来运行驱动程序中的代码 WDM驱动程序层次与I O请求过程 11 2

11、2WDM驱动程序开发工具 目前有两个主要的工具来开发设备驱动程序 一个是Microsoft公司提供的WindowsDDK 它有Windows98DDK Windows2000DDK WindowsXPDDK和Windows2003DDK四个版本 分别用来支持相应的四个操作系统中VxD和WDM驱动程序的开发 用WindowsDDK开发驱动程序难度较大 另一个驱动程序开发工具是NuMega公司提供的DriverStudio 其中包含VtoolsD DriversWorks DriversNetWorks和SoftICE VtoolsD用来开发Windows98的VxD驱动程序 DriversWor

12、ks和DriversNetWorks分别用来开发一般设备和网络设备的WDM驱动程序 SoftICE是一个功能强大的调试工具 DriverStudio的开发是建立在WindowsDDK的基础上的 安装DriverStudio时 先要安装WindowsDDK DriverStudio将WindowsDDK的内容封装在一些基本的类中 使用VC 编程 使用DriverStudio来开发Windows的驱动程序 相对WindowsDDK来讲要容易得多 DriverStudio使用开发向导 帮助你建立编写驱动程序所需要的工程文件和程序框架文件 这些文件已经组成了一个完整的设备驱动程序 接下来的工作就是将这

13、些文件导入到VC 的开发环境中 添加具体的操作代码 进行进一步的开发 11 2 3DriverStudio中的WDM驱动程序结构 从基本WDM启动程序的两个头文件中可以大致看清WDM驱动程序的基本框架结构 KDriver是WDM驱动程序的基类 任何驱动程序都要从继承该类开始 SimpleWdmDriver驱动程序从派生KDriver类开始 SimpleWdmDevice是KPnpDevice类的派生类 重载其某些成员函数便可处理相应事件的发生 最重要的方法是virtualNTSTATUSDeviceControl KIrpI 应用程序中原本需要对硬件设备的I O访问指令被移到了DeviceCo

14、ntrol中 应用程序需要访问硬件设备时 可以使用DeviceIoControl函数 最后DeviceIoControl会调用DeviceControl 从而完成对设备的I O访问 可以说DeviceControl就是功能驱动程序 HelloWdm h includefileforbasicWDMdriverclassSimpleWdmDriver publicKDriver public DriverEntry负责驱动程序的初始化 必须重载virtualNTSTATUSDriverEntry PUNICODE STRINGRegistryPath AddDevice初始化驱动程序所控制的设备

15、 必须重载virtualNTSTATUSAddDevice PDEVICE OBJECTPdo Unload删除由DriverEntry所分配的资源virtualVOIDUnload void hellodev h includefilefordeviceclassofbasicdriverclassSimpleWdmDevice publicKPnpDevice public SimpleWdmDevice PDEVICE OBJECTPdo ULONGUnit PlugandPlayhandlersNTSTATUSOnStartDevice KIrpI 设备启动时调用 NTSTATUSOn

16、StopDevice KIrpI 设备停止时调用 NTSTATUSOnRemoveDevice KIrpI 设备删除时调用 UserControlhandlers 设备打开时调用 应用程序使用Create函数时调用 virtualNTSTATUSCreate KIrpI 设备关闭时调用 即应用程序使用Create函数时调用 virtualNTSTATUSClose KIrpI 设备功能调用 应用程序使用DeviceIoControl函数时被调用virtualNTSTATUSDeviceControl KIrpI PowerManagementhandlersNTSTATUSOnDevicePowerUp KIrpI NTSTATUSOnDeviceSleep KIrpI 设备睡眠时调用NTSTATUSOnSetPower KIrpI NTSTATUSDefaultPnp KIrpI NTSTATUSDefaultPower KIrpI 11 3Windows2000 XP下输入输出的实现 Windows是一个基于 消息传递 机制的多任务操作系统 用户程序需要访问硬件设备时 通过调用AP

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号