书签 分享 收藏 举报 版权申诉 / 53
上传文档赚钱

类型第11章Windows环境下输入输出程序设计课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4890142
  • 上传时间:2023-01-22
  • 格式:PPT
  • 页数:53
  • 大小:747KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《第11章Windows环境下输入输出程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    11 Windows 环境 输入输出 程序设计 课件
    资源描述:

    1、2023-1-22第11章Windows环境下输入输出程序设计第第11章章Windows环境下环境下输入输出程序设计输入输出程序设计第11章Windows环境下输入输出程序设计 Windows是一个多任务操作系统,在保护模式下工作。是一个多任务操作系统,在保护模式下工作。Windows操作系统不支持用户程序对计算机底层硬件进行操作系统不支持用户程序对计算机底层硬件进行直接控制。用户程序需要输入直接控制。用户程序需要输入/输出时,可以通过通过输出时,可以通过通过API(Application Program Interface,应用程序接口)来调用,应用程序接口)来调用设备驱动程序,对设备实现间

    2、接控制,进行输入设备驱动程序,对设备实现间接控制,进行输入/输出。输出。Windows 9x使用使用VxDs(Virtual Device Drivers,虚拟设,虚拟设备驱动)设备驱动程序。备驱动)设备驱动程序。Windows 2000/XP使用使用WDM(Windows Driver Model,Windows驱动程序模型)设备驱动程序。驱动程序模型)设备驱动程序。第11章Windows环境下输入输出程序设计11.1 Windows设备驱动程序设备驱动程序 11.1.1 虚拟设备虚拟设备 在多任务运行环境下,计算机内的硬件、软件资源为多在多任务运行环境下,计算机内的硬件、软件资源为多个任务

    3、共享。任何一个用户程序都不能独占系统的硬件、个任务共享。任何一个用户程序都不能独占系统的硬件、软件资源。软件资源。虚拟设备实质上是真实物理设备的部分资源和相关软件虚拟设备实质上是真实物理设备的部分资源和相关软件的组合,用来完成用户程序需要的功能。的组合,用来完成用户程序需要的功能。虚拟设备不但可以代表实际存在的硬件设备,还可以模虚拟设备不但可以代表实际存在的硬件设备,还可以模拟实际上不存在的拟实际上不存在的“设备设备”,供用户使用。,供用户使用。计算机上的计算机上的“虚拟光驱虚拟光驱”就是一个典型的虚拟设备。与就是一个典型的虚拟设备。与这个设备同名的物理设备是不存在的,用户使用的是硬盘这个设备

    4、同名的物理设备是不存在的,用户使用的是硬盘的部分存储空间以及相应的服务程序。的部分存储空间以及相应的服务程序。第11章Windows环境下输入输出程序设计使用虚拟设备好处:使用虚拟设备好处:实现多任务对系统资源的共享,方便用户的使用;实现多任务对系统资源的共享,方便用户的使用;实现任务与任务、任务与系统之间的隔离和保护;实现任务与任务、任务与系统之间的隔离和保护;规范外部设备输入、输出方法,使不同工作方式的设备规范外部设备输入、输出方法,使不同工作方式的设备用相同的方式进行输入输出。用相同的方式进行输入输出。对对Windows应用程序来讲,虚拟设备就是真实设备,应应用程序来讲,虚拟设备就是真实

    5、设备,应用程序分不清那个设备是由真实硬件支持的真实设备,用程序分不清那个设备是由真实硬件支持的真实设备,那个设备是由虚拟设备驱动程序模拟的虚拟设备。那个设备是由虚拟设备驱动程序模拟的虚拟设备。第11章Windows环境下输入输出程序设计11.1.2 Windows9X设备驱动程序设备驱动程序 Windows 9x是一个分层结构的操作系统,由工作是一个分层结构的操作系统,由工作在两个不同层面的组件构成:在两个不同层面的组件构成:顶层组件,工作在顶层组件,工作在Ring3层;层;底层组件,工作在底层组件,工作在Ring0层。层。第11章Windows环境下输入输出程序设计 顶层:顶层:Window

    6、s 9x操作系统的顶层组件工作在特权级操作系统的顶层组件工作在特权级3,称为,称为ring3层。它给应用程序的运行提供层。它给应用程序的运行提供Win32 API服务。服务。Windows 9x应用程序和应用程序和Win32 API服务一起构成操作系统服务一起构成操作系统的顶层,称为系统虚拟机(的顶层,称为系统虚拟机(VM,Virtual Machine)。)。对于一个任务来说,这些服务程序以及他们所掌控的硬件对于一个任务来说,这些服务程序以及他们所掌控的硬件资源就是一台资源就是一台“实实在在实实在在”的计算机。但是,对于整个系的计算机。但是,对于整个系统来说,他们只是由操作系统向用户提供的一

    7、个运行用户统来说,他们只是由操作系统向用户提供的一个运行用户程序的平台,包括为这个应用程序服务的操作系统组件和程序的平台,包括为这个应用程序服务的操作系统组件和部分的硬件资源。部分的硬件资源。每一个每一个DOS应用程序都在一个独立的虚拟机中运行,操作应用程序都在一个独立的虚拟机中运行,操作系统允许多个虚拟机同时处于运行状态。系统允许多个虚拟机同时处于运行状态。第11章Windows环境下输入输出程序设计底层:底层:Windows 9x操作系统的底层组件工作在操作系统的底层组件工作在0特权级,称为特权级,称为ring0层,它就是虚拟机管理器(层,它就是虚拟机管理器(VMM,Virtual Mac

    8、hine Manager)。)。Windows 9x虚拟机管理器由一个内核服务集和许多虚拟设虚拟机管理器由一个内核服务集和许多虚拟设备驱动程序(备驱动程序(VxDs,Virtual Device Drivers)组成。)组成。许多许多VxDs是由是由Microsoft公司随操作系统提供的,如键盘和公司随操作系统提供的,如键盘和显示器等的显示器等的VxDs,有的,有的VxD则由设备制造商提供,或者由则由设备制造商提供,或者由用户自行编写。用户自行编写。VxD用来支持特定的硬件或软件,完成需用来支持特定的硬件或软件,完成需要的功能。要的功能。VxDs中的程序运行在中的程序运行在ring0层,可以执

    9、行所有的指令,完成层,可以执行所有的指令,完成所需的任何软硬件的操作。所需的任何软硬件的操作。第11章Windows环境下输入输出程序设计对于应用程序而言,虚拟机管理器是透明的,应用程对于应用程序而言,虚拟机管理器是透明的,应用程序感觉不到管理器的存在。序感觉不到管理器的存在。微软已经宣布,从微软已经宣布,从2006年年6月起不再提供对月起不再提供对Windows 9x的技术支持。因此,的技术支持。因此,Windows 9x和和VxDs的使用将逐渐减少。的使用将逐渐减少。随着随着Windows 2000/XP的广泛使用,的广泛使用,WDM驱动程序的开发驱动程序的开发和使用已成为主流。和使用已成

    10、为主流。第11章Windows环境下输入输出程序设计11.1.3 Windows2000/XP设备驱动程序设备驱动程序Windows 2000操作系统组件的层次结构操作系统组件的层次结构 Windows 2000操作系统的功能模块划分为用户操作系统的功能模块划分为用户模式和内核模式两大类。模式和内核模式两大类。用户模式的操作系统功能模块用户模式的操作系统功能模块工作在工作在ring3层,他们不能使层,他们不能使用用CPU中的特权指令,连同中的特权指令,连同IN、OUT这样的非特权指令也这样的非特权指令也被禁止。所有的用户程序都在这一层上运行。被禁止。所有的用户程序都在这一层上运行。内核模式的操

    11、作系统模块内核模式的操作系统模块工作在工作在ring0层,可以使用层,可以使用CPU的的任何指令。任何指令。第11章Windows环境下输入输出程序设计Windows 2000操作系统的层次结构操作系统的层次结构第11章Windows环境下输入输出程序设计 2.Windows 2000的设备驱动程序的设备驱动程序 Windows 2000的驱动程序也有两种不同的类型。的驱动程序也有两种不同的类型。用户模式驱动程序工作用户模式驱动程序工作在用户模式,通过调用内核在用户模式,通过调用内核模式驱动程序实现指定的功能。用户模式驱动程序不能模式驱动程序实现指定的功能。用户模式驱动程序不能直接对硬件设备进

    12、行访问,仅仅用于构建一个硬件或软直接对硬件设备进行访问,仅仅用于构建一个硬件或软件的运行环境。件的运行环境。Windows内核驱动程序内核驱动程序工作在内核模式,可以直工作在内核模式,可以直接访问硬件设备。每个设备驱动程序都有一组完成各种接访问硬件设备。每个设备驱动程序都有一组完成各种功能的函数,通过调用这些函数可以对某一设备完成特功能的函数,通过调用这些函数可以对某一设备完成特定的操作。定的操作。第11章Windows环境下输入输出程序设计 内核模式驱动程序的类型内核模式驱动程序的类型 文件系统驱动程序文件系统驱动程序可以在本地硬盘、网络、移动存储设可以在本地硬盘、网络、移动存储设备或各种有

    13、存储能力的硬件设备实现标准的文件系统,备或各种有存储能力的硬件设备实现标准的文件系统,如如FAT32、NTFS系统等。系统等。PnP驱动程序驱动程序是一种遵循是一种遵循Windows2000即插即用协议的即插即用协议的内核模式驱动程序。内核模式驱动程序。WDM驱动程序驱动程序是一种是一种PnP驱动程序。它同时还遵守电驱动程序。它同时还遵守电源管理协议。源管理协议。显示驱动程序显示驱动程序是一种特殊的内核驱动程序。此类的驱动是一种特殊的内核驱动程序。此类的驱动程序还有打印驱动程序、多媒体驱动程序、网络驱动程程序还有打印驱动程序、多媒体驱动程序、网络驱动程序等。序等。遗留设备驱动程序遗留设备驱动程

    14、序主要用在主要用在Windows NT系统中,它也系统中,它也可以运行在可以运行在Windows 2000系统中。系统中。第11章Windows环境下输入输出程序设计Windows 2000内核模式驱动程序的类型内核模式驱动程序的类型第11章Windows环境下输入输出程序设计11.2 WDM驱动程序驱动程序 WDM是是Microsoft力推的新型驱动程序模型,首力推的新型驱动程序模型,首先出现在先出现在Windows NT中,现在的中,现在的Windows 98/Me/2000/XP都支持都支持WDM。微软宣称,在后续的操作系统中将继续支持微软宣称,在后续的操作系统中将继续支持WDM。第11

    15、章Windows环境下输入输出程序设计 WDM是一个分层的驱动程序。是一个分层的驱动程序。它至少有功能驱动程它至少有功能驱动程序(序(Function driver)和总线驱动程序()和总线驱动程序(Bus driver)两个)两个层面。层面。功能驱动程序功能驱动程序提供一个设备的使用功能,或者可以认为它提供一个设备的使用功能,或者可以认为它就是一个设备的驱动程序。用户程序需要使用该设备时,就是一个设备的驱动程序。用户程序需要使用该设备时,需要调用功能驱动程序中的功能函数。需要调用功能驱动程序中的功能函数。总线驱动程序总线驱动程序负责系统启动时设备的安装、检测,并确定负责系统启动时设备的安装、

    16、检测,并确定设备的资源使用情况。设备的启动、停止,设备的初始化,设备的资源使用情况。设备的启动、停止,设备的初始化,设备的电源管理等功能也都由总线驱动程序提供。设备的电源管理等功能也都由总线驱动程序提供。11.2.1 WDM驱动程序模型和层次结构驱动程序模型和层次结构第11章Windows环境下输入输出程序设计WDM引入了引入了功能设备对象功能设备对象FDO(FunctionalDeviceObject)物理设备对象物理设备对象PDO(PhysicalDeviceObject)两个新概念来描述硬件。两个新概念来描述硬件。一个一个PDO对应一个真实硬件。一个硬件只允许有一个对应一个真实硬件。一个

    17、硬件只允许有一个PDO,却可以拥有多个却可以拥有多个FDO,在驱动程序中直接操作的不是硬件,在驱动程序中直接操作的不是硬件而是相应的而是相应的PDO与与FDO。根据具体的需要还可以选择过滤驱动程序(根据具体的需要还可以选择过滤驱动程序(filter driver)。)。第11章Windows环境下输入输出程序设计Windows20000的输入输出是包驱动的的输入输出是包驱动的 应用程序调用应用程序调用WDM驱动程序时,系统为每一个用户的请驱动程序时,系统为每一个用户的请求打包,形成一个求打包,形成一个I/O请求包(请求包(I/O Request Package,IRP),然后将其发送至驱动程序

    18、。),然后将其发送至驱动程序。IRP中的中的PDO字段用来字段用来区别是发送给哪一个设备的。区别是发送给哪一个设备的。某个层次的驱动程序得到某个层次的驱动程序得到IRP后,分析其中的请求,完成后,分析其中的请求,完成本层应该完成的任务。本层应该完成的任务。如果如果IRP要求的任务已经完成,该层次的驱动程序就向上要求的任务已经完成,该层次的驱动程序就向上一层传送结果并逐层返回。一层传送结果并逐层返回。如果如果IRP中的请求尚未完成,那么就继续向下层驱动程序中的请求尚未完成,那么就继续向下层驱动程序传递这个传递这个IRP。内核组件就是这样通过发送内核组件就是这样通过发送IRP来运行驱动程序中的代码

    19、来运行驱动程序中的代码第11章Windows环境下输入输出程序设计WDM驱动程序层次与驱动程序层次与I/O请求过程请求过程 第11章Windows环境下输入输出程序设计11.2.2 WDM驱动程序开发工具驱动程序开发工具 目前有两个主要的工具来开发设备驱动程序,目前有两个主要的工具来开发设备驱动程序,一个是一个是Microsoft公司提供的公司提供的Windows DDK。它有。它有Windows 98 DDK、Windows 2000 DDK、Windows XP DDK和和Windows2003DDK四个版本,分别用来支持相四个版本,分别用来支持相应的四个操作系统中应的四个操作系统中VxD

    20、和和WDM驱动程序的开发。驱动程序的开发。用用Windows DDK开发驱动程序难度较大。开发驱动程序难度较大。第11章Windows环境下输入输出程序设计 另一个驱动程序开发工具是另一个驱动程序开发工具是NuMega公司提供的公司提供的DriverStudio,其中包含,其中包含VtoolsD、DriversWorks、DriversNetWorks和和SoftICE。VtoolsD用来开发用来开发Windows 98的的VxD驱动程序。驱动程序。DriversWorks和和DriversNetWorks分别用来开发一般设备和分别用来开发一般设备和网络设备的网络设备的WDM驱动程序。驱动程序

    21、。SoftICE是一个功能强大的调试工具。是一个功能强大的调试工具。第11章Windows环境下输入输出程序设计 DriverStudio的开发是建立在的开发是建立在Windows DDK的基础上的,的基础上的,安装安装DriverStudio时,先要安装时,先要安装Windows DDK。DriverStudio将将Windows DDK的内容封装在一些基本的类的内容封装在一些基本的类中,使用中,使用VC+编程。使用编程。使用DriverStudio来开发来开发Windows的的驱动程序,相对驱动程序,相对Windows DDK来讲要容易得多。来讲要容易得多。DriverStudio使用开发

    22、向导,帮助你建立编写驱动程序所需使用开发向导,帮助你建立编写驱动程序所需要的工程文件和程序框架文件,这些文件已经组成了一个要的工程文件和程序框架文件,这些文件已经组成了一个完整的设备驱动程序。接下来的工作就是将这些文件导入完整的设备驱动程序。接下来的工作就是将这些文件导入到到VC+的开发环境中,添加具体的操作代码,进行进一步的开发环境中,添加具体的操作代码,进行进一步的开发。的开发。第11章Windows环境下输入输出程序设计11.2.3 DriverStudio中的中的WDM驱动程序结构驱动程序结构 从基本从基本WDM启动程序的两个头文件中可以大致看清启动程序的两个头文件中可以大致看清WDM

    23、驱动程序的基本框架结构。驱动程序的基本框架结构。KDriver是是WDM驱动程序的基类,任何驱动程序都要从继驱动程序的基类,任何驱动程序都要从继承该类开始。承该类开始。SimpleWdmDriver驱动程序驱动程序从派生从派生KDriver类开始。类开始。SimpleWdmDevice是是KPnpDevice类的派生类。重载其某类的派生类。重载其某些成员函数便可处理相应事件的发生。些成员函数便可处理相应事件的发生。第11章Windows环境下输入输出程序设计 最重要的方法是最重要的方法是virtual NTSTATUS DeviceControl(KIrp I),应用程序中原本需要对硬件设备的

    24、应用程序中原本需要对硬件设备的I/O访问指令被移到了访问指令被移到了DeviceControl中。应用程序需要访问硬件设备时,可以使中。应用程序需要访问硬件设备时,可以使用用DeviceIoControl函数,最后函数,最后DeviceIoControl会调用会调用DeviceControl,从而完成对设备的,从而完成对设备的I/O访问。可以说访问。可以说DeviceControl就是功能驱动程序。就是功能驱动程序。第11章Windows环境下输入输出程序设计/HelloWdm.h-include file for basic WDM driver class SimpleWdmDriver:

    25、public KDriver public:/DriverEntry负责驱动程序的初始化,必须重载负责驱动程序的初始化,必须重载virtual NTSTATUS DriverEntry(PUNICODE_STRING RegistryPath);/AddDevice初始化驱动程序所控制的设备,必须重载初始化驱动程序所控制的设备,必须重载 virtual NTSTATUS AddDevice(PDEVICE_OBJECT Pdo);/Unload删除由删除由DriverEntry所分配的资源所分配的资源virtual VOID Unload(void);第11章Windows环境下输入输出程序设

    26、计/hellodev.h-include file for device class of basic driver class SimpleWdmDevice:public KPnpDevice public:SimpleWdmDevice(PDEVICE_OBJECT Pdo,ULONG Unit);/Plug and Play handlersNTSTATUS OnStartDevice(KIrp I);/设备启动时调用。设备启动时调用。NTSTATUS OnStopDevice(KIrp I);/设备停止时调用。设备停止时调用。NTSTATUS OnRemoveDevice(KIrp

    27、I);/设备删除时调用。设备删除时调用。/UserControl handlers/设备打开时调用,应用程序使用设备打开时调用,应用程序使用Create函数时调用。函数时调用。第11章Windows环境下输入输出程序设计 virtual NTSTATUS Create(KIrp I);/设备关闭时调用,即应用程序使用设备关闭时调用,即应用程序使用Create函数时调用。函数时调用。virtual NTSTATUS Close(KIrp I);/设备功能调用,应用程序使用设备功能调用,应用程序使用DeviceIoControl函数时被调用函数时被调用virtual NTSTATUS Device

    28、Control(KIrp I);/Power Management handlersNTSTATUS OnDevicePowerUp(KIrp I);/NTSTATUS OnDeviceSleep(KIrp I);/设备睡眠时调用设备睡眠时调用NTSTATUS OnSetPower(KIrp I);/NTSTATUS DefaultPnp(KIrp I);/NTSTATUS DefaultPower(KIrp I);第11章Windows环境下输入输出程序设计11.3 Windows2000/XP下输入下输入 输出的实现输出的实现 Windows是一个基于是一个基于“消息传递消息传递”机制的多

    29、任务操作系统。机制的多任务操作系统。用户程序需要访问硬件设备时,通过调用用户程序需要访问硬件设备时,通过调用API函数调用该设备函数调用该设备的驱动程序。的驱动程序。WIN32将用户的请求组合成为一个将用户的请求组合成为一个IRP包,向内核发送包,向内核发送“消息消息”。内核组件根据内核组件根据IRP中的中的PDO字段,将该字段,将该“消息消息”传送给对传送给对应的应的WDM驱动程序。驱动程序。驱动程序完成硬件设备的访问后,向用户程序返回结果。驱动程序完成硬件设备的访问后,向用户程序返回结果。调用驱动程序的过程,就是用户程序和驱动程序之间传递调用驱动程序的过程,就是用户程序和驱动程序之间传递消

    30、息,交换数据,进行通信的过程。消息,交换数据,进行通信的过程。第11章Windows环境下输入输出程序设计用户程序完成对设备的访问有两种方式用户程序完成对设备的访问有两种方式 等待方式等待方式下,用户程序调用驱动程序,等待驱动程序完成对下,用户程序调用驱动程序,等待驱动程序完成对硬件设备的访问。这种方式编程简单。硬件设备的访问。这种方式编程简单。异步方式异步方式下,应用程序调用驱动程序,启动了硬件设备后,下,应用程序调用驱动程序,启动了硬件设备后,直接返回进行其它处理,并不等待输入直接返回进行其它处理,并不等待输入/输出完成。硬件设备输出完成。硬件设备完成了数据输入输出后,由驱动程序通知应用程

    31、序进行进一完成了数据输入输出后,由驱动程序通知应用程序进行进一步的处理。这时,需要由驱动程序发起和应用程序的通信。步的处理。这时,需要由驱动程序发起和应用程序的通信。这种方式下,要用到反调函数、这种方式下,要用到反调函数、Win32事件通知等方法。事件通知等方法。第11章Windows环境下输入输出程序设计 CreateFile()函数用来打开设备,获取设备句柄;函数用来打开设备,获取设备句柄;设备输入输出控制函数设备输入输出控制函数DeviceIoControl(),用来调用,用来调用WDM驱动程序执行相应的操作(包括设备的控制和数据的输入,驱动程序执行相应的操作(包括设备的控制和数据的输入

    32、,输出)输出);CloseHandle()函数用来关闭设备。函数用来关闭设备。也可以使用也可以使用ReadFile()和和WriteFile()函数进行函数进行“标准标准”的输的输入入/输出。输出。11.3.1 用于输入用于输入/输出的输出的WIN32 API函数函数第11章Windows环境下输入输出程序设计1.打开设备打开设备 CreateFile()函数函数用来打开设备,获取设备句柄,格式如下:用来打开设备,获取设备句柄,格式如下:HANDLE CreateFile(“.SimpleWDMDevice”,/设备的符号链接名设备的符号链接名 GENERIC_READ|GENERIC_WRI

    33、TE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,/同步打开设备同步打开设备 NULL);使用上述函数时,除了设备名之外,不需要改变其它参使用上述函数时,除了设备名之外,不需要改变其它参数。这里假设设备的名字为数。这里假设设备的名字为SimpleWDMDevice。进行打开操。进行打开操作时首先搜索当前目录,然后搜索作时首先搜索当前目录,然后搜索Windows系统目录。系统目录。第11章Windows环境下输入输出程序设计2.DeviceIoControl函数函数调用调用DeviceIoCo

    34、ntrol(HANDLEhDevice,/设备句柄设备句柄DWORDdwIoControlCode,/控制代码控制代码LPVOIDlpInBuffer,/输入数据块指针输入数据块指针DWORDnInBufferSize,/输入数据块大小输入数据块大小LPVOIDlpOutBuffer,/输出数据块指针输出数据块指针DWORDnOutBufferSize,/输出数据块大小输出数据块大小LPDWORD lpBytesReturned,/返回字节长度指针返回字节长度指针NULL /同步时为同步时为NULL )第11章Windows环境下输入输出程序设计 DeviceIoControl函数调用参数函数

    35、调用参数 hDevice是由是由CreateFile函数获取的设备句柄。函数获取的设备句柄。dwIOControlCode是应用程序向是应用程序向WDM驱动程序发出的控制驱动程序发出的控制代码。代码。lpInBuffer和和nInBufferSize是应用程序向是应用程序向WDM驱动程序传送驱动程序传送的的I/O数据块的地址及大小。数据块的地址及大小。lpOutBuffer、nOutBufferSize和和lpBytesReturned是是WDM驱驱动程序返回给应用程序的数据块的地址、大小以及实际返回动程序返回给应用程序的数据块的地址、大小以及实际返回的字节数。的字节数。输入输入/输出缓冲区的

    36、格式由驱动程序自行规定。输出缓冲区的格式由驱动程序自行规定。第11章Windows环境下输入输出程序设计3.关闭设备关闭设备完成对设备的输入、输出控制后,完成对设备的输入、输出控制后,应用程序调用应用程序调用CloseHandle(hDevice)关闭设备。关闭设备。第11章Windows环境下输入输出程序设计4.ReadFile和和WriteFile函数函数 ReadFile(HANDLEhFile,/设备句柄设备句柄LPVOIDlpBuffer,/输入数据块指针输入数据块指针DWORD nNumberOfBytesToRead,/输入数据块大小输入数据块大小LPDWORD lpNumber

    37、OfBytesRead,/返回的字节数长度指针返回的字节数长度指针NULL )/同步时为同步时为NULL WriteFile(HANDLEhFile,/设备句柄设备句柄LPVOIDlpBuffer,/输出数据块指针输出数据块指针DWORD nNumberOfBytesToWrite,/输出数据块大小输出数据块大小LPDWORD lpNumberOfBytesWritten,/实际输出的字节数长度指针实际输出的字节数长度指针NULL)/同步时为同步时为NULL第11章Windows环境下输入输出程序设计 本节以本节以Aedk-LabPCI计算机接口实验仪为例,介绍计算机接口实验仪为例,介绍WDM

    38、驱动程序的使用。驱动程序的使用。该实验设备由一块该实验设备由一块PCI接口卡和一台接口实验仪组成,接口卡和一台接口实验仪组成,将将PCI接口卡插入接口卡插入PC机的机的PCI总线插槽,用连接线把总线插槽,用连接线把PCI卡卡和实验机相连接,整个实验仪就成为和实验机相连接,整个实验仪就成为PC机的一台机的一台“外部设外部设备备”。在监控软件的控制下,进行。在监控软件的控制下,进行PC机与实验仪的通讯,机与实验仪的通讯,实现对实验过程的全程控制。实现对实验过程的全程控制。PCI卡采用了卡采用了PLX公司的公司的PCI9052芯片作为接口芯片。芯片作为接口芯片。11.3.2 Windows2000/

    39、XP下输入输出举例下输入输出举例第11章Windows环境下输入输出程序设计 进行硬件连接之后,需要安装驱动程序,在进行硬件连接之后,需要安装驱动程序,在Win2000中也就是安装中也就是安装WDM驱动程序。驱动程序。在实验设备所附带的软件中,驱动程序文件有两个:在实验设备所附带的软件中,驱动程序文件有两个:INF文件,称为设备信息文件文件,称为设备信息文件,供驱动程序安装时使用。,供驱动程序安装时使用。INF文件指明了硬件驱动该如何安装到系统中,源文件在文件指明了硬件驱动该如何安装到系统中,源文件在哪里、安装到哪一个文件夹中、怎样在注册表中加入与设哪里、安装到哪一个文件夹中、怎样在注册表中加

    40、入与设备有关的信息等;备有关的信息等;后缀为后缀为sys的文件,是整个实验仪的驱动程序。的文件,是整个实验仪的驱动程序。一般情况下,一般情况下,INF文件会被复制到文件会被复制到Windows2000系统目录系统目录中的中的INF子目录中,子目录中,Sys文件被复制到文件被复制到System32/drivers子目子目录中。录中。第11章Windows环境下输入输出程序设计 安装驱动程序后,在设备管理器中可以看到相应的设备安装驱动程序后,在设备管理器中可以看到相应的设备第11章Windows环境下输入输出程序设计/设备的头文件设备的头文件/8255Demo.h/控制码控制码#define IO

    41、CTL_PCI_CON /读配置信息读配置信息 CTL_CODE(FILE_DEVICE_UNKNOWN,0 x800,METHOD_BUFFERED,FILE_ANY_ACCESS)#define IOCTL_IO_READ /IO读读 CTL_CODE(FILE_DEVICE_UNKNOWN,0 x801,METHOD_BUFFERED,FILE_ANY_ACCESS)#define IOCTL_IO_WRITE /IO写写 CTL_CODE(FILE_DEVICE_UNKNOWN,0 x802,METHOD_BUFFERED,FILE_ANY_ACCESS)第11章Windows环境下输

    42、入输出程序设计/设备的头文件设备的头文件/PCI卡配置信息卡配置信息struct pci_cfgULONGMemBase2;/内存基地址内存基地址ULONGMemLength2;/内存大小内存大小ULONGIOBase2;/IO基地址基地址ULONGIOPortLength2;/IO基长度基长度ULONGIRQ;/中断号中断号;/数据缓冲区数据缓冲区struct BuffersULONGAddress;UCHARData;第11章Windows环境下输入输出程序设计 三个控制码三个控制码800H、801H和和802H分别对应于读配置信息、分别对应于读配置信息、IO读和读和IO写。写。pci_c

    43、fg是是PCI配置信息的格式,下面的示例程序只用到了配置信息的格式,下面的示例程序只用到了IOBase2数组,其中可以存放该数组,其中可以存放该PCI设备申请获得的三处设备申请获得的三处IO空间的首地址。空间的首地址。Buffers是应用程序和驱动程序交换数据的缓冲区格式。是应用程序和驱动程序交换数据的缓冲区格式。Buffers有两个域,地址域名为有两个域,地址域名为Address,由用户程序向驱动,由用户程序向驱动程序传递需要读写的程序传递需要读写的IO端口地址,另一个是数据域端口地址,另一个是数据域Data,读操作时由驱动程序将读到的数据通过它传递给用户程序,读操作时由驱动程序将读到的数据

    44、通过它传递给用户程序,写操作时由用户程序将需要输出的数据通过它传递给驱动写操作时由用户程序将需要输出的数据通过它传递给驱动程序。程序。需要注意的是,控制码以及输入、输出缓冲区的具体格式由需要注意的是,控制码以及输入、输出缓冲区的具体格式由驱动程序自行规定,操作系统对此不予干涉。驱动程序自行规定,操作系统对此不予干涉。第11章Windows环境下输入输出程序设计8255A的的PA口接口接8路开关的输入,路开关的输入,PB口输出,接口输出,接8个发个发光二极管。光二极管。程序的功能是将程序的功能是将PA输入的开关量,向输入的开关量,向PB口输出,用口输出,用8个开关分别控制个开关分别控制8个发光二

    45、极管。个发光二极管。输入全零时,程序结束运行。输入全零时,程序结束运行。使用实验仪使用实验仪8255A芯片进行开关量输入输出芯片进行开关量输入输出第11章Windows环境下输入输出程序设计下面的示例程序中,下面的示例程序中,.PCI9052Device0是设备名,只是设备名,只要安装了设备驱动程序,系统就可认出该设备名。要安装了设备驱动程序,系统就可认出该设备名。除了主函数,示例程序还包含了四个子函数。除了主函数,示例程序还包含了四个子函数。OpenDevice函数打开设备,如果成功则返回设备句柄,失败函数打开设备,如果成功则返回设备句柄,失败则程序结束。则程序结束。GetPCIConfig

    46、函数读取设备的配置信息,如果不成功,函数读取设备的配置信息,如果不成功,程序也要结束。程序也要结束。ReadIO和和WriteIO是对是对IO端口的读、写函数。端口的读、写函数。上面三个子函数都通过调用上面三个子函数都通过调用API函数函数DeviceIoControl()实实现他们各自的功能,区别主要在于使用了不同的控制代码。现他们各自的功能,区别主要在于使用了不同的控制代码。使用实验仪使用实验仪8255A芯片进行开关量输入输出芯片进行开关量输入输出第11章Windows环境下输入输出程序设计示例程序函数关系示例程序函数关系第11章Windows环境下输入输出程序设计主函数首先打开设备,读取

    47、主函数首先打开设备,读取PCI卡的配置信息。实验设卡的配置信息。实验设备中备中8255的片选端连接在译码器的最低端,因此,的片选端连接在译码器的最低端,因此,PCI卡卡的的IO基地址就是基地址就是8255的的PA口地址,依次是口地址,依次是PB口的地址、口的地址、PC口的地址和控制口的地址。口的地址和控制口的地址。用户编写的用户编写的ReadIO函数调用函数调用DeviceIoControl函数时,函数时,输入和输出缓冲区使用同一个缓冲区输入和输出缓冲区使用同一个缓冲区buf。端口地址是输入。端口地址是输入参数,调用之前预先置入输入缓冲区参数,调用之前预先置入输入缓冲区buf的的Address

    48、字段。字段。读操作获得的数据是输出参数,调用完成后从读操作获得的数据是输出参数,调用完成后从buf的的Data字字段中取得。段中取得。主函数从主函数从PA口读入数据,然后向口读入数据,然后向PB口输出,这样就可口输出,这样就可以用以用8个开关来分别控制个开关来分别控制8个发光二极管。读入数据个发光二极管。读入数据data为为零时,程序结束。零时,程序结束。第11章Windows环境下输入输出程序设计/8255IO读写演示程序,读写演示程序,Demo.c#include 8255Demo.hchar *sLinkName=.PCI9052Device0;struct pci_cfg pci;st

    49、ruct Buffers buf;HANDLE OpenDevice()HANDLE hDevice;hDevice=CreateFile(sLinkName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL );第11章Windows环境下输入输出程序设计if(hDevice=INVALID_HANDLE_VALUE)printf(请检查请检查PCI卡和驱动程序卡和驱动程序n);exit;return hDevice;第11章Win

    50、dows环境下输入输出程序设计void GetPCIConfig(HANDLE hDevice)BOOL status;DWORD rc;status=DeviceIoControl(hDevice,IOCTL_PCI_CON,NULL,0,&pci,sizeof(pci_cfg),&rc,NULL);/调用调用DeviceIoControl 函数;函数;/获取获取PCI设备配置设备配置if(!status)printf(无法获取无法获取pci配置信息配置信息n);exit;return;第11章Windows环境下输入输出程序设计if(hDevice=INVALID_HANDLE_VALUE

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第11章Windows环境下输入输出程序设计课件.ppt
    链接地址:https://www.163wenku.com/p-4890142.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库