为从这时开始操作系统的新的即插即用的功能在某种程度上可以自动地识别和
配置硬件设备了。可是作为一个硬件设备驱动开发者,你或许还得为你尚未升级
到新系统的用户准备一个实模式的驱动。与此同时 Windows NT 也发展到了 3.5,
4.0。为了支持这些系统,“第三个驱动[A2]”是必须的,而且之前你的开发经
验大都并不适用于这些系统。
一个设备需要三个驱动,这真的太多了。为此 Microsoft 设计了一种新的设
备驱动,Windows 驱动模型(WDM),并在 Windows 95 的后继者 Windows 98 和
Windows Me 中加入了这种新特性。同时 Microsoft 也使 Windows NT 4.0 的后继
者 Windows XP 和 Windows 2000 支持了这种新的驱动。在 Windows Me 中,MS-DOS
的存在仅仅是出于“礼貌”而已,对硬件制造商来说再也不必为他们的硬件准备
实模式驱动了。因为 WDM——至少从设计的初衷来看,在所有的平台上几乎是一
样的,这样使得只须写一个驱动成为可能。
就在今天,我们依然可以感受到早期的个人电脑的架构和第一版的 MS-DOS
带来的影响。今天的用户偶尔还是会打开他们的电脑,安装一些扩展卡。但是和
以前相比,今天的电脑总线已经发生了很大的变化,功能强劲多了。即插即用和
互联外围设备总线[A3](PCI)的存在基本上可以让用户无须过问 I/0,内存和
中断请求的使用情况。当然 BIOS2[2]还在,但是它的主要工作是负责启动系统,
并将在这个过程检测到的配置情况通知操作系统(Windows XP 或 Windows Me)。
最后,WDM 驱动程序的后缀名还是沿用第一个实模式驱动的后缀名,.SYS。
概述驱动开发者眼中的操作系统
Windows 驱动模型(WDM)为设备驱动提供了一个框架,使它们可以同时运行
在两种不同的系统中——Windows 98/Windows Me 和 Windows 2000/Windows XP。
正如上面的设备驱动的发展的简要回顾中提到的一样,这两套系统是两条产品线
的并行发展的产物。在下面的章节中,我用“98/Me”来表示前一对系统,用 XP
表示后一对系统。尽管对普通用户来说,这两种系统看上起差不多,但其实它们
内部的工作方式有很大的不同。在本节中,我将对这两种系统作一个简要的概述。
Windows XP 概述
图 1-1 是关于 Windows XP 操作系统的相当简单的功能图,描述了我认为对驱
动开发者来说很重要的特性。在每一个 Windows XP 运行的平台上都支持两种执
行模式,应用程序要么运行在用户模式,要么就是运行在核心模式。如果一个用
户模式的程序想从一个设备读取数据,就会调用一个相应的应用程序编程接口
3[3](API),比如 ReadFile。而另一个子系统,就象 KERNEL32.DLL 通过调用一
2[2] 基本输入/输出系统
3[3] application programming interface
Commented [A2]: 所谓第三个驱动指的是实模式驱动,
VxD 驱动和 NT 下面的驱动
Commented [A3]: Peripheral Component Interconnect