Windows驱动程序设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windows 驱动程序设计 Windows 驱动程序简介 Windows 下有两种不同结构的驱动程序,(Virtual Device Driver)VxD和 Windows Driver Model WDM。VxD只能够运行在Win95和Win98环境下,WDM能够在Win98和Win2000下运行。 Windows95下的VxD 所有的设备驱动程序都有一个具有管理功能的核心虚拟机VMM 虚拟机管理器 管理。Windows对中断的处理与MS-DOS大不一样。当中断发生时,处理器转换为ring0级保护模式。Windows系统并不像MS-DOS那样通过中断描述符表IDT Interrupt Descriptor Table 直接指向中断处理过程,而是由IDT入口指向VMM中的程序。该程序将判断是否为中断调用,如果是,则把中断控制权交给虚拟可编程中断控制器VPICD Virtual Programmable Interrupt Controller Device ,VPICD实际上是一个重要的VxD。VPICD再将其交给另一个注册了该中断的VxD(如Audcard.vxd)来处理。VxD程序是通过调用VPICD服务VPICD_Virtualize_IRQ来注册中断的。 Windows 95 对于设备 device 的处理,一般的模型是:由一个 VxD 掌管所有中断并执行所有数据传输,应用程序则使用函数调用 function calls 的方式对 VxDs 发出服务请求。只需使用 Win32 的 DeviceIoControl API 函数,以及那些支持所谓 alertable waits” 即时唤醒,大意是那些可以在VXD中调用的Windows 32位 API函数,但数量极其有限, 的 Win32 API 即可。这两个接口可以让你把 VxD 当做 32 位应用程序的扩展组件。 Windows982kNT下的WDM WDM模型(Windows Driver Model)是微软公司为当前主流操作系统Windows98和Windows 2000的驱动程序设计的一种构架。它和传统的win3.x和win95使用的vxd的驱动是完全不同的体系结构。不过对于最终用户来说,WDM驱动程序在Windows98和Windows2000下的表现很相似。作为驱动开发人员来说,它在两者中有很多的不同。并且Windows98中的WDM只能算是Windowss2000中的WDM的一个了集。在Windows98中有一些驱动程序只能使用VXD来实现,如串行通讯驱动等。 要写驱动程序,首先要了解操作系统的结构。在WDM体系中,windows2000操作系统中是最标准的实现方式,Windows98则是部分兼容WDM结构。照微软的说法,Windows98和Windows2000 X86 Intel 架构 版本实现二进制码兼容 参见98DDK ,Windows2000 x86版本与其它CPU平台版本实现源码级兼容 因为Windows 2000是基本NT相似的结构,最底层是硬件抽象层HAL, 。但实际上,Windows2000的WDM实现中有很多例程在Win98中没有实现。 相对而言,VxD的结构比较简单,WDM牵涉的概念较多,因为时间较短,很多同学以前没有windsows下的驱动程序的开发经验,所以推荐选择VxD。 开发VxD可以使用汇编的方法,直接用98DDK,要用到很多的汇编语言,开发的效率较低。VtoolsD开发包提供了对VxD编程的全线C++类库支持。使用Vtoolsd的封装环境,我们可以很方便的写出高效率的驱动。 VToolsD的使用 在VtoolsD中有一个最重要的VxD开发工具:QuickVxD。QuickVxD可以为我们自动生成VxD源程序框架,而且QuickVxD提供了许多VxD的特性选项,例如可以选择要生成的VxD是动态加载或是静态加载的,要使用的编程语言是C还是C++等等。C/C++头文件,C/C++代码文件,C/C++工程文件。头文件含有VxD所必需的类声明,还有VxD控制消息处理函数声明,Windows ring3 API调用VxD的调用入口声明以及VxD其他服务函数声明等必要声明,此外,头文件还定义了许多全局变量和类变量。代码文件中,QuickVxD预先生成了许多须继续编程来扩充其内在功能的类成员函数。通过在这些类成员函数中添加代码,从而完成定制功能。 驱动程序有两种调用方式:静态加载和动态加载。所谓静态加载就是指在系统启动后自动加载,这样在驱动程序中必须在系统启动的时候响应Device_Init的消息,在系统退出的时候响应System_Exit的消息。但是静态加载还要涉及到和其他驱动程序的配合问题,往往会使系统启动不起来,开发的时候

文档评论(0)

80092355km + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档