直接从win95/98说起,因为之前的系统基本上没有保护模式的概念,程序员可以直接修改任意内存的数据。在95/98中采用的内核开发模型是VxD(虚拟设备驱动),在dos时期,程序认为它们拥有系统的一切,严格来说95/98是建立在dos的基础上的操作系统,当dos程序移植到 windows中,windows必须提供一个虚拟的设备供程序访问,也就是真实机器的替身,例如,当一个dos程序和键盘通信的时候,事实上它是和VkD(虚拟键盘设备)通信。一个VxD程序通常控制真正的硬件设备并对该设备在各个虚拟机之间的共享进行管理。
尽管如此,并不是说每个VxD程序必须和一个硬件设备相连。虽然VxD程序是用来虚拟硬件设备的,但是我们也可以把VxD程序看作是在第0级别的dll。例如,如果你需要做一些只有在第0级别才能做的工作,你就可以编一个VxD程序来为你完成这个工作。这样,由于此VxD程序并没有虚拟任何设备,你就可以把它仅仅看作是你的程序的扩展。 VxD程序在NT的架构中已经彻底被放弃了,因为VxD的权利实在太大,它们可以做任何的事情,所以才有当初的CIH病毒。系统对恶意的VxD并没有任何保护。

到了NT内核的时代,作为一个微内核操作系统,NT是建立在Mach和Vax思想上的一种客户/服务器模型操作系统,由一个特权执行体以及一系列被称为保护子系统的非特权服务器组成。整个操作系统被分为用户态模式和核心态模式。所谓特权,是指处理器的操作方式,大多数的处理器都有一种甚至若干种特权方式。在特权方式方式下,所有机器指令都可执行并且系统内存可存取。在非特权方式方式下,某些机器指令不能执行并且系统内存不可存取。在Windows NT下,核心态就是指处于特权处理器方式下,而用户态总处于非特权处理器方式。

核心态模式又被称为NT执行体,包括了系统服务和硬件描述层(HAL),它们运行于CPU的特权层Ring0(在驱动程序内部,在不同部分还分为不同权限层)。系统服务包含了一个操作系统的所有应有服务,文件系统,进程控制,内存管理,设备管理等等。在NT核心态包含了两种基本类型的驱动:用户模式驱动和核心态驱动。用户态驱动包含了Win32多媒体驱动,支持MS-DOS应用程序的VDD(虚拟设备驱动)和其它保护子系统的驱动.用户态驱动是一种特殊的子系统,详细的可以看DDK中的多媒体驱动和虚拟DOS驱动文档。核心态驱动有针对逻辑的,虚拟的以及物理的设备.我们称之为NT驱动。有三种类型的NT驱动,每种类型都有略微不同的结构和完全不同的功能。

1. 设备驱动,例如直接控制物理设备的键盘和磁盘驱动.也称其为低级的驱动,因为它们都特别地处于分层的NT驱动链的最低层。

2. 中间介质驱动,例如虚拟磁盘,镜像,或特殊类型的设备驱动,这些都依靠下层的设备驱动提供支持。

3. 文件系统驱动,例如系统支持的FAT,HPFS,NTFS,CDFS,MSFS,NPFS或RDR驱动,它们一样需要低层驱动的支持。

其实后来的WDM和现在的WDK基本都是基于这个架构,WDM是加入了即插即用支持的内核开发框架,而WDK是为了提高开发效率在WDM上包装了一层Wdf的函数接口。

转载自   :   http://blog.chinaunix.net/u/4329/showart_2132654.html

1.最先开始使用的是VXD(早废弃了)

2.自Windows 2000开始,开发驱动程序必以WDM为基础的,意为Windows Driver Model,是一个标准的驱动模型,意思是说你可以在这个模型上有所改动,WDM是Vista以前平台的驱动模型。(vista支持大部分的WDM驱动)

3.WDF是Vista及其以后OS的驱动模型,意为Windows Driver Foudation,此模型比WDM更先进、合理(微软是这样说的),将WDM中关于电源、PnP等一些复杂的细节由微软实现,所以在此模型上开发驱动会 比以前要简单(个人觉得是要简单一些了,不过隐藏了更多细节)

------------------------------------------------------------------------------------

WDF 与 WDK 名词解释

WDF驱动模型

如所周知,自Windows 2000开始,开发驱动程序必以WDM为基础的,但其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易。为改善这种局面,微软推出了新的驱动程序开发环境。要预先指出的是,这不是另起炉灶改弦更张,而是以WDM为基础进行了建模和封装,显著特点是降低了开发难度。因为:

1、 将原来普通程序设计中基于对象的技术应用到了驱动开发中。WDM中虽也有对象模型,但与真正的基于对象技术根本就不是一回事。为了实现基于对象的技术,微软精心设计了对象模型并进行了封装。属性、方法、事件等等“一个都不能少”。

2、 无论内核模式的驱动程序或者用户模式的驱动程序,都采用同一套对象模型构建,采用同一个基础承载。这个基础就是WDF。WDF虽然已经是经过封装和定义的 对象模型,但对内核模式和用户模式对象来说,WDF又是两者的父对象。换言之两者都是继承了WDF才得到的,或者都是从WDF派生而来的。相对于内核模 式,派生出的对象称为“KMD框架”即KMDF;相对于用户模式,派生出的模型称为“UMD框架”即UMDF。无论何种模式的框架,其内部封装的方法、执 行的行为其实还是用WDM完成的。

3、更重要的,也是微软反复炫耀的是封装了驱动程序中的某些共同行为:例如即插即用和电源管理就属于这种共同行为。因为大多数驱动程序中都需要处理即插即用和电源管理问题,据说这大概要上千行的代码,况且,没有相当水平还不一定能处理好。为了一劳永逸,WDF干脆将即插即用和电源管理封装了进了对象之内,一举成了对象的缺省(默认)行为。

4、改变了操作系统内核与驱动程序之间的关系,WDM驱动程序中,一方面要处理硬件,另一方面要处理驱动程序与操作系统内核的交互。现在WDF则将驱动程序与操作系统内核之间进行了分离,驱动程序与操作系统交互工作交给框架内封装的方法(函数)完成,这样驱动开发者只需专注处理硬件的行为即可。这不仅避免了顾此失彼两面不周的弊端,也由于双方的分离,对操作系统内的某些改动,硬件制造商配套驱动程序的开发都有莫大的好处。

5、 两种模式的驱动程序(KMDF、UMDF)都使用同一环境进行构建,这一环境称为WDK。

即KMDF,UMDF的开发环境为WDK。以前WDM开发的环境为DDK

Windows Device Kit (WDK): 把测试套件(test suites)集成进来,DDK 就成了WDK。WDK是针对微软操作系统系列的驱动器集成开发系统。它组合了Windows DDK和Hardware Compatibility Test (HCT) kits(硬件兼容性测试工具),同时提供了微软内部用来测试Windows操作系统稳定性和可靠性的测试套件。

6、 虽然经过封装并引入基于对象的技术,所开发的驱动程序在执行效率上并不比原来逊色。

××××××××××××××××××××××××××××××××××××××××××××××

××××××××××××××××××××××××××××××××××××××××××××××

总结:

总的来说驱动的几个过程是开始的VXD(虚拟X设备)------>NT式驱动―>WDM->WDF

从VXD到NT式驱动经历了革命性的变化,完全是两种概念了,所以vxd已经完全淘汰,但是虚拟设备思想还是在的,第一篇博文说了“其实后来的WDM和现在的WDK基本都是基于NT这个架构,WDM是加入了即插即用支持的内核开发框架,而WDK是为了提高开发效率在WDM上包装了一层Wdf的函数接口。”

然后就是DDK和WDK只是这两个对应的WDM与WDF驱动形式的一个开发环境。

Windows 驱动模型的发展历史的更多相关文章

  1. Linux与Windows的设备驱动模型对比

    Linux与Windows的设备驱动模型对比 名词缩写: API 应用程序接口(Application Program Interface ) ABI 应用系统二进制接口(Application Bi ...

  2. Windows 驱动发展基金会(九)内核函数

    Windows 驱动发展基金会系列,转载请注明出处:http://blog.csdn.net/ikerpeng/article/details/38849861 这里主要介绍3类Windows的内核函 ...

  3. Web开发技术发展历史

    Web开发技术发展历史   来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...

  4. windows驱动开发前导知识

    从以下整理得到 https://blog.csdn.net/suxinpingtao51/article/details/8610528 http://www.cnblogs.com/bugcheck ...

  5. Linux发展历史

    一.硬件与软件发展历史 计算机由硬件和软件组成结构 硬件 1946年诞生于宾夕法尼亚州,占地170平米,重量达到30吨,名字叫做ENIAC(electronic numerical integrato ...

  6. 【转载】Web开发技术发展历史-版本1

    原文在这里. Web开发技术发展历史 Web的诞生 提到Web,不得不提一个词就是“互联网”.Web是World Wide Web的简称,中文译为万维网.“万维网”和我们经常说的“互联网”是两个联系极 ...

  7. windows 驱动开发 DDK与WDK WDM的区别

    1.首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发W ...

  8. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  9. .net版本发展历史

    最近装上了VS2013,发现好多新特性.新功能,公司办公还在使用VS2005.VS2008,不过用着也很顺手,在最新版Visual Studio中,微软加入了git源码管理工具,和之前的TFS大体上类 ...

随机推荐

  1. Sqli labs系列-less-5&6 报错注入法(下)

    我先输入 ' 让其出错. 然后知道语句是单引号闭合. 然后直接 and 1=1 测试. 返回正常,再 and 1=2 . 返回错误,开始猜表段数. 恩,3位.让其报错,然后注入... 擦,不错出,再加 ...

  2. symantec SMG 抓包

    1.使用putty连接SMG,先用admin账号登陆 执行set-support  , 设置一个密码. 2.重新打开一个putty连接SMG,使用support账号登陆.用我们刚才设置的密码. 3.开 ...

  3. ARM系列处理器的分类

    1.ARM ARM即以英国ARM(Advanced RISC Machines)公司的内核芯片作为CPU,同时附加其他外围功能的嵌入式开发板,用以评估内核芯片的功能和研发各科技类企业的产品. ARM ...

  4. 通过泛型,将string转换为指定类型

    Generic TryParse You should use the TypeDescriptor class: public static T Convert<T>(this stri ...

  5. Oracle架构实现原理、含五大进程解析(图文详解)

    目录 目录 前言 Oracle RDBMS架构图 内存结构 系统全局区SGA 高速缓存缓冲区数据库缓冲区 日志缓冲区 共享池 其他结构 进程结构 用户连接进程 用户进程User Process Ser ...

  6. C++构造函数异常(一)

    C++ 构造函数的异常是一个比较难缠的问题,很多时候,我们可能不去考虑这些问题,如果被问到,有人可能会说使用RAII管理资源. 但你真的考虑过如果构造函数失败了,到底会发生什么吗,前面构造成功的成员. ...

  7. 2.Jmeter 快速入门教程(二)--创建简单web测试 打印 E-mail

    今天我们就来实际用Jmeter创建一个测试场景,并进行性能测试. 注:由于本人使用中文版本,使用英文版本的请注意具体的菜单及参数名称. 1. 添加线程组(相当于lr里的scenario 设置) 打开j ...

  8. python面试题之补充缺失的代码

    补充缺失的代码 def print_directory_contents(sPath): """ 这个函数接受文件夹的名称作为输入参数, 返回该文件夹中文件的路径, 以及 ...

  9. 截取url参数

    //获得参数(只对字母数字等有效,参数值为中文则不能传) function getQueryString(name) { var reg = new RegExp("(^|&)&qu ...

  10. CSS新特性(3D转换,perspective(透视),transfrom-style(子元素是否开启三维环境))

    1. 三维坐标系(里面的值不能省略,没有就写 0 ) x 轴:水平向右    注意:x 右边是正值,左边是负值 y轴: 垂直向下    注意:y 下面是正值,上面是负值 z轴:垂直屏幕     注意: ...