Windows 2000驱动程序的设计
2006-04-08 11:38:51 来源:WEB开发网本文示例源代码或素材下载
本文介绍了Windows 2000 WDM驱动程序结构及其编写的注意事项,最后给出了一个简单的WDM驱动程序及客户端程序的源码,希望能对大家有所帮助。
1. 简介:
Windows 2000原名Windows NT 5.0是继Windows NT 4.0的新一代操作系统,它不但继承了Windows NT 4.0的种种优点,而且在技术上又有了许多的突破,其中一项就是对驱动程序结构的变化,即引入了全新的WDM (Win32 Driver Model)的驱动程序构架。说是新技术,其实早在1997年Microsoft就提出了该项技术并在Windows 98中得到了充分的应用,换句话说,Windows 98也支持WDM。这样WDM就成为了一个跨平台的驱动程序模型,不仅如此WDM驱动程序还可以在不修改源代码的情况下经过重新编译后在非Intel平台上运行,可以不夸张的讲WDM算得上是21世纪的驱动程序构架。
2.WDM的工作原理:
WDM是在NT 4.0驱动程序结构上发展起来的,所以它与NT 4.0的驱动程序极为相似,但是它却有了本质上的提高,比如它支持USB、IEEE 1394、ACPI等全新的硬件标准。虽然Windows 98与Windows 2000都支持WDM,可是并不意味着Windows 98下的VxD可以在Windows 2000下运行,而NT下的VDD却可以在Windows 98下运行。不过原先准备在两个平台上同时运行需要编写两个截然不同的驱动程序,而现在只需要编写一个WDM驱动程序就可以了。同NT 4.0驱动程序一样,WDM驱动程序也是分层的,即不同层上的驱动程序有着不同的优先权,而Windows 9x下的VxD则没有此结构。另外,WDM还引入了功能设备对象FDO(functional device object)与物理设备对象PDO(physical device object)两个新概念来描述硬件,一个PDO代表一个真实硬件,在驱动程序看来则是一个FDO,见图1。另外值得注意的是,一个硬件只允许有一个PDO,但却可以拥有多个FDO,而在驱动程序中我们不是直接操作硬件而是操作相应的PDO与FDO。在Ring-3与Ring-0通讯方面,操作系统为每一个用户请求打包成一个IRP(IO Request Packet)结构,将其发送至驱动程序并通过识别IRP中的PDO来识别是发送给哪一个设备的。另外,在驱动程序的加载方面WDM既不靠驱动程序名称也不靠一个具有某种特殊意义的ID,而是依靠一个128位的GUID来识别驱动程序(Windows下许多东西都是靠此进行识别的)。
更多精彩
赞助商链接