Win32设备驱动程序体系结构

  目前,由于需要支持新的业务和新的PC外部设备类型对驱动程序开发造成了新的挑战。新型总线增加了设备的数量和对设备驱动程序的需求。设备上各种功能的不断增加使驱动程序的开发变得越来越复杂。同时,快速反应的交互式应用程序要求将软件和硬件紧密的结合在一起。1997年,在用于Windows 95和Windows NT的统一的Win32驱动程序模型(WDM)有了进一步的发展,将这些因素全部考虑在内。WDM允许使用一个单一的驱动程序源(x86二进制)来同时在Windows 95和Windows NT中实现对新的总线和新设备的支持。

  WDM的关键目标是通过提供一种灵活的方式来简化驱动程序的开发,使在实现对新硬件支持的基础上减少并降低所必须开发的驱动程序的数量和复杂性。WDM还必须为即插即用和设备的电源管理提供一个通用的框架结构。WDM是实现对新型设备的简便支持和方便使用的关键组件。

  为了实现这些目标,WDM只能以Windows NT I/O子系统提供的一组通用服务为基础。WDM改进了由一组核心扩展构成的功能实现对即插即用、设备电源管理、和快速反应I/O流的支持。除了通用的平台服务和扩展外,WDM还实现了一个模块化的、分层次类型的微型驱动程序结构。类型驱动程序实现了支持通用总线、协议、或设备类所需的功能性接口。类驱动程序的一般特性是为逻辑设备的命令设置、协议、和代码重用所需的总线接口实现标准化提供必要的条件。WDM对标准类接口的支持减少了Windows 95和Windows NT所需的设备驱动程序的数量和复杂性。

  微型驱动程序允许通用类驱动程序的扩展实现对特定设备协议或物理编程接口的支持。例如,一个微型驱动程序可以被用于实现对IEEE 1394总线类驱动程序的扩展,用于对特定主机控制器编程接口的支持。微型驱动程序非常易于开发,因为它们可以通过简单的扩展通用的类驱动程序接口功能来实现。尽管微型驱动程序设计简便,但是重复使用微型驱动程序模块所带来的优点也可以通过对标准设备编程接口的支持来实现。USB主机控制器接口(OpenHCI或UHCI)就是这方面的一个例子。

  模块化的WDM体系结构灵活统一的接口使操作系统可以动态的配置不同的设备驱动程序模块来支持特定的设备。模块化的WDM体系结构灵活统一的接口使操作系统可以动态的配置不同的驱动程序模块来支持特定的设备。一个典型的驱动程序堆栈由通用设备、协议、和用特定协议和特定总线的微型驱动程序联接的总线类驱动程序构成。例如,操作系统可以配置一个驱动程序堆栈来支持这样一个照相机,它的命令是用图象类定义的,并且它是根据来自IEEE 1394总线类的功能控制协议(FCP)类而发表的。这种灵活性还使其可以很容易的支持一个多功能设备,仅需简单的实现一个微型驱动程序将多功能硬件与几个设备类的接口相连接。动态构造WDM驱动程序堆栈是实现即插即用设备支持的关键。

  WDM服务使实现一个用于Windows NT和Windows 95快速反应的模型成为可能。WDM提供了多个执行优先级包括核心态和非核心态线程、IRQ级别、和被延缓的程序调用(DPC)。所有的WDM类和微型驱动程序都作为核心态(第0层)的特权级线程(不会被CPU调度程序中断)执行。32个IRQ级可以被用于区分硬件中断服务的优先级。对于每个中断,DPC被排入队列等到被启用中断的IRQ服务例程完成后再执行。DPCs通过有效的减少中断被禁止的时间,使系统对中断的响应获得了很大的提高。对于使用多处理器的基于x86的PC系统,在Windows NT下对中断的支持是以Intel的多处理器规范1.4版本为基础的。

  对于需要活动的多媒体的应用程序,WDM在核心态提供了快速反应的接口来处理I/O流。WDM的流接口是通过标准的WDM类接口提供出的。对于WDM,一个多媒体流完全可以用一个或多个软件过滤器和设备驱动程序来处理。为了加速对I/O流的处理,WDM流可以直接对硬件进行访问,避免了由于进行非核心态和核心态之间的转换而造成的延迟,并且还省取了对中间I/O缓冲区的需要。

  要充分利用WDM提供的优点,建议你使用即插即用兼容的电源管理输入、声音、图形、和使用USB和IEEE 1394的存储外围设备。

  WDM驱动程序可以在Windows NT上与现有的Windows NT驱动程序共存,也可以在Windows 95上与现有的Windows 95驱动程序共存。现有的Windows NT 和Windows 95驱动程序将继续被支持,但是却不能使用WDM的先进优点。由微软提供的可扩展的WDM类驱动程序是支持新设备的最好选择。在开始开发一个新的WDM类驱动程序之前,硬件开发者应当请教微软公司以取得对特定设备类的支持信息。一旦有可能,就采用仅编写一次类驱动程序,然后通过使用WDM的微型驱动程序来将其扩展成针对特定硬件接口的驱动程序的方法。

WDM驱动和NT式驱动相关推荐

  1. NT式驱动和WDM式驱动程序

    1.Windows驱动程序分为两类,一类是不支持即插即用功能的NT式的驱动程序:另一类是支持即插即用功能的WDM式的驱动程序. 2.NT式的驱动程序要导入的头文件时NTDDK.H,而WDM式的驱动要导 ...

  2. 《Windows驱动开发技术详解》之编程加载NT式驱动

    之前我们加载驱动都是利用INSTDRV这个应用,其原理是在注册表中写入相应的字段,这一节我们手动编写代码去加载驱动,其原理类似: 设备驱动程序的动态加载主要由服务控制管理程序(Service Cont ...

  3. c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]

    Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...

  4. 我的第一个WinCE驱动--流式驱动【转】

    我的第一个WinCE驱动--流式驱动[转] 2008-10-29 14:00 转做WinCE驱动已经有两个月了,却没有做过一个真正的WinCE平台下的驱动,心里都有些急了,很想尝试下,好尽快融入Win ...

  5. Windows驱动开发WDM (13)- 过滤驱动

    之前用的驱动例子是一个功能型驱动,只不过它操作的是一个虚拟设备.这个驱动创建的FDO(功能设备对象)是附在虚拟总线驱动创建的虚拟PDO之上的.这次来介绍一下不同于功能型驱动的过滤驱动.过滤驱动可以在功 ...

  6. IIC总线式驱动开发(mpu6050)

    目录 一.I2C总线背景知识 二.Exynos4412 I2C收发实现之裸机版 2.1 发送 2.2 接收 三.Linux内核对I2C总线的支持 四.MPU6050 五.应用层直接使用I2C通道 5. ...

  7. I2C总线式驱动开发

    文章目录 前言 一.Linux内核对I2C总线的支持 1.1.理解I2C设备驱动.I2C总线驱动以及I2C核心之间的关系 1.2.i2c二级外设驱动开发涉及到核心结构体及其相关接口函数: 二.I2C总 ...

  8. 驱动开发笔记5—驱动对象、设备对象、IRP和派遣函数

    文章目录 驱动对象 设备对象 IRP和派遣函数 IRP IRP类型 设置派遣函数 处理IRP 举例说明 设备读写方式 缓冲区方式读写 直接方式读写 其他方式读写 驱动对象 每个驱动程序都会有唯一的驱动 ...

  9. ddd领域驱动设计_领域驱动设计(DDD)理论启示

    过去几年通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量.高可用等技术需求,现在通天塔平台已经能满足集团主站的大部分活动.频道搭建和运营能力,主流程的新需求越来越少,个 ...

  10. win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决

    win7关闭驱动签名,进入驱动测试模式 win7.win10关闭驱动签名.进入驱动测试模式 方式一: 方式二:批处理文件实现:管理员权限打开win7-win10驱动测试模式 方式三: DebugVie ...

最新文章

  1. [模板][持续更新]欧拉回路与欧拉路径浅析
  2. 如何使用fdisk与parted对不同容量硬盘分区
  3. 2018 Spring Team Contest D HDU - 6023、HDU - 6024、HDU - 6025 、HDU - 6027 、HDU - 6029
  4. idea自动更新java_IntelliJ IDEA自动更新资源文件
  5. mysql union left join_Case:MySQL使用left join的时候or改写成union可以提高效率
  6. python读取html中body_python批量获取html内body内容的实例
  7. pytroch预训练网络ResNet
  8. 消息中间件解决方案-JMS-ActiveMQ
  9. vue.3.0 dom赋值_Vue3.0的几大新特性
  10. C语言实现直接插入与直接选择排序,详细
  11. 后台管理系统之题库管理
  12. 校园二手市场需求分析
  13. win7忘记开机密码怎么弄?
  14. 细胞制备流程图_体细胞核移植过程中,注入“供体细胞”还是“供体细胞核”?...
  15. python视频补帧_视频补帧软件(DAIN APP)
  16. Material-design icon生成插件
  17. Mac Mounty正常卸载方法(mount failed异常解决)
  18. spring boot V部落 V人事项目
  19. 考研还是工作?回过头来反思我当初为何没考研
  20. linux数据库管理工具

热门文章

  1. 华为IPD全流程管理
  2. Android 直播礼物动画实现之SVGA动画
  3. 使用PHP来获取客户端和服务端IP
  4. html文档基本格式主要包括以下哪几类,CAD多选题考试题「附答案」
  5. NFC开发 - Android
  6. pygame基础教程
  7. 《Arduino》开发 之 用 u8g2 库 给 0.96寸OLED 刷bmp图片,OLED图片取模
  8. mac安装旺旺启动台找不到_如何正确安装和卸载Mac软件?
  9. 规则引擎groovy
  10. Visual Studio 调试时右侧诊断工具窗口如何显示