表11对驱动程序设备综合的PnP能力级 PnP驱动程序 非PnP驱动程序 PnP设备 完全PnP 无PnP 非PnP设备 可能的部分PnP 无PnP 任何支持PnP的设备在其驱动程序里都应该有PnP支持。 如果一个非PP设备被一个PnP驱动程序驱动的话,它能够有一些PnP能力。举例来说, 个ISA声卡和一个EISA网卡可手工安装,然后PnP驱动程序能象一个PnP设备一样对待该卡。 如果一驱动程序不支持PnP,它的设备表现为非PnP设备而不管任何硬件PnP支持。一个非 PnP驱动程序能够约束整个系统的PnP和电源管理能力 在OS支持PnP之前编写的早期驱动程序继续如从前一样工作,但没有任何PnP能力。新的 驱动程序应该包括PnP支持 12什么是电源管理? 电源管理是系统范围的、集成的方法来使用和保存电源,包括电源管理的软硬件支持的计算 机系统提供以下功能 最小的启动和关机延迟 系统能在低电力状态时休眠,在这种状态下无须完全的重新引导系统就能恢复操作。从用户 的角度来看,唤醒一休眠的计算机大致可象开关电视机一样。 更强大的电源效率和电池生命期 仅仅当设备传输功能给用户时电源才启用于设备,如果一个设备未使用,按照命令,电源可 被断开,而后再加电 更安静的操作 断开未被使用的设备电源可降低噪音,此外,硬件和软件能够管理电流装载和热装载,其结 果是计算机休眠时几乎听不到声音。 工业界 On Now Initiative定义了电源管理的硬件和软件需求,细节参看电源管理的工业萌芽。 在 Windows,2000、 Windows98和其他支持电源管理的操作系统里,计算机和其他外部设备被 维持在完成手头任务所需的最低可行的电平上,驱动程序与操作系统协作来管理它们的设备电源。 如果所有的驱动程序支持电源管理,操作系统能够在系统范围基础上管理电力消耗,这样,电力 保存、电力切断和快速恢复,及需要时再次唤醒都可被管理 这些集成的电源管理方法-包括在操作系统、系统硬件、设备驱动程序和设备硬件里,产生 如下的结果: 更智能的电源管理决定。在每一电平,被最优通知的组件指导电力使用 更高的可靠性。更好的电源管理决定减少了不适当的时间关机和数据丢失的可能 平台的独立性。操作系统在不同的硬件平台之间使用一种可控制的、单独的方法来管理电源, 允许电力在不同的设备上最大保存 更好的设备集成。符合工业界规范的设备驱动程序确保最大的电力保存而不管其硬件平台 综合而言,这些优点导致保存更多电能和更有效地利用电能,这在以前是不可能的
21 表 1.1 对驱动程序/设备综合的 PnP 能力级 PnP 驱动程序 非 PnP 驱动程序 PnP 设备 完全 PnP 无 PnP 非 PnP 设备 可能的部分 PnP 无 PnP 任何支持 PnP 的设备在其驱动程序里都应该有 PnP 支持。 如果一个非 PnP 设备被一个 PnP 驱动程序驱动的话,它能够有一些 PnP 能力。举例来说,一 个 ISA 声卡和一个 EISA 网卡可手工安装,然后 PnP 驱动程序能象一个 PnP 设备一样对待该卡。 如果一驱动程序不支持 PnP,它的设备表现为非 PnP 设备而不管任何硬件 PnP 支持。一个非 PnP 驱动程序能够约束整个系统的 PnP 和电源管理能力。 在 OS 支持 PnP 之前编写的早期驱动程序继续如从前一样工作,但没有任何 PnP 能力。新的 驱动程序应该包括 PnP 支持。 1.2 什么是电源管理? 电源管理是系统范围的、集成的方法来使用和保存电源,包括电源管理的软硬件支持的计算 机系统提供以下功能: ◼ 最小的启动和关机延迟 系统能在低电力状态时休眠,在这种状态下无须完全的重新引导系统就能恢复操作。从用户 的角度来看,唤醒一休眠的计算机大致可象开关电视机一样。 ◼ 更强大的电源效率和电池生命期 仅仅当设备传输功能给用户时电源才启用于设备,如果一个设备未使用,按照命令,电源可 被断开,而后再加电。 ◼ 更安静的操作 断开未被使用的设备电源可降低噪音,此外,硬件和软件能够管理电流装载和热装载,其结 果是计算机休眠时几乎听不到声音。 工业界 OnNow Initiative 定义了电源管理的硬件和软件需求,细节参看电源管理的工业萌芽。 在 Windows2000、Windows98 和其他支持电源管理的操作系统里,计算机和其他外部设备被 维持在完成手头任务所需的最低可行的电平上,驱动程序与操作系统协作来管理它们的设备电源。 如果所有的驱动程序支持电源管理,操作系统能够在系统范围基础上管理电力消耗,这样,电力 保存、电力切断和快速恢复,及需要时再次唤醒都可被管理。 这些集成的电源管理方法---包括在操作系统、系统硬件、设备驱动程序和设备硬件里,产生 如下的结果: ◼ 更智能的电源管理决定。在每一电平,被最优通知的组件指导电力使用。 ◼ 更高的可靠性。更好的电源管理决定减少了不适当的时间关机和数据丢失的可能。 ◼ 平台的独立性。操作系统在不同的硬件平台之间使用一种可控制的、单独的方法来管理电源, 允许电力在不同的设备上最大保存。 ◼ 更好的设备集成。符合工业界规范的设备驱动程序确保最大的电力保存而不管其硬件平台。 综合而言,这些优点导致保存更多电能和更有效地利用电能,这在以前是不可能的
12.1电源管理的最初含义 On Now Initiative描述了电源管理所需的硬件和软件支持 高级配置和电源管理接口规范的 On Now Initiative部分,描述了一个硬件级接口,该接口能 让操作系统以一种一致的、平台独立的方式实现电源管理。 设备类电源管理参考规范对每个普通的设备类是可行的,如声频或通信设备。每一个规范描 述了一个设备类的电源管理要求。驱动程序的编写者应该参考这些规范,也可通过微软的网站来 获得设备相关的细节 122电源管理的支持级别 支持PP的驱动程序必须支持电源管理,支持电源管理的驱动程序也必须支持PnP,电源管 理和PnP是被集成而互不独立的。 电源管理有两个工作层次:整个系统和单个设备。 电源管理器,是操作系统内核的一部分,管理着整个系统的电源级别。如果系统中所有的驱 动程序都支持电源管理,电源管理器能在系统范围的基础上管理电源消耗,不只利用全开或全关 的状态,也有多种中间的系统休眠状态。 在操作系统支持支持电源管理之前编写的早期驱动程序能如从前一样继续工作。然而,包括 早期驱动程序的系统不能够进入任何中间的系统休眠状态:它们只能象过去一样在全开或全关的 状态下操作 驱动程序处理设备电源管理。一个支持电源管理的驱动程序能够在需要时打开它的设备,不 用时关闭设备。如果设备有硬件能力允许这么做,设备能够进入中间的电源状态。当前系统中早 期的驱动程序没有影响更新的驱动程序管理它们设备电源的能力 123全系统范围的电源管理的总览 电源管理需要得到系统、设备硬件和系统软件、驱动程序的支持。如在“电源管理的最初含 义”部分描述的一样,必要的硬件支持包括在工业规范里。这一部分包括了软件支持,特别地 驱动程序该做什么来遵照操作系统的要求,并正常的管理它们的设备电源 图1.2给出了全系统范围的电源管理总览 分别通过APⅠ和控制面板,应用程序和用户已经分别地输入了电源管理决定。用户可通过控 制面板设置一定的电源选项,包括设备专用的GUID控制选项,这个选项是如果响应的驱动程序 支持它时,用户界面将会提供。通过WM,控制面板通知电源管理器和驱动程序GUID控制里的 电源管理器管理全系统的电源策略,这些策略包括管理系统电源使用的规则。(细节参见第3 章第3部分的系统电源管理。)使用从控制面板和得到的信息,电源管理器能够决定什么时候应用 程序在使用,或者可能需要使用不同的设备,这样它能够适当调整系统的电源策略
22 1.2.1 电源管理的最初含义 OnNow Initiative 描述了电源管理所需的硬件和软件支持。 高级配置和电源管理接口规范的 OnNow Initiative 部分,描述了一个硬件级接口,该接口能 让操作系统以一种一致的、平台独立的方式实现电源管理。 设备类电源管理参考规范对每个普通的设备类是可行的,如声频或通信设备。每一个规范描 述了一个设备类的电源管理要求。驱动程序的编写者应该参考这些规范,也可通过微软的网站来 获得设备相关的细节。 1.2.2 电源管理的支持级别 支持 PnP 的驱动程序必须支持电源管理,支持电源管理的驱动程序也必须支持 PnP,电源管 理和 PnP 是被集成而互不独立的。 电源管理有两个工作层次:整个系统和单个设备。 电源管理器,是操作系统内核的一部分,管理着整个系统的电源级别。如果系统中所有的驱 动程序都支持电源管理,电源管理器能在系统范围的基础上管理电源消耗,不只利用全开或全关 的状态,也有多种中间的系统休眠状态。 在操作系统支持支持电源管理之前编写的早期驱动程序能如从前一样继续工作。然而,包括 早期驱动程序的系统不能够进入任何中间的系统休眠状态;它们只能象过去一样在全开或全关的 状态下操作。 驱动程序处理设备电源管理。一个支持电源管理的驱动程序能够在需要时打开它的设备,不 用时关闭设备。如果设备有硬件能力允许这么做,设备能够进入中间的电源状态。当前系统中早 期的驱动程序没有影响更新的驱动程序管理它们设备电源的能力。 1.2.3 全系统范围的电源管理的总览 电源管理需要得到系统、设备硬件和系统软件、驱动程序的支持。如在“电源管理的最初含 义”部分描述的一样,必要的硬件支持包括在工业规范里。这一部分包括了软件支持,特别地, 驱动程序该做什么来遵照操作系统的要求,并正常的管理它们的设备电源。 图 1.2 给出了全系统范围的电源管理总览 分别通过 API 和控制面板,应用程序和用户已经分别地输入了电源管理决定。用户可通过控 制面板设置一定的电源选项,包括设备专用的 GUID 控制选项,这个选项是如果响应的驱动程序 支持它时,用户界面将会提供。通过 WMI,控制面板通知电源管理器和驱动程序 GUID 控制里的 改变。 电源管理器管理全系统的电源策略,这些策略包括管理系统电源使用的规则。(细节参见第 3 章第 3 部分的系统电源管理。)使用从控制面板和得到的信息,电源管理器能够决定什么时候应用 程序在使用,或者可能需要使用不同的设备,这样它能够适当调整系统的电源策略
电源管理器也提供一个驱动程序接口,该接口主要包括Powx例程、电源管理IRP和必要的 驱动程序入口点 当电源管理器请求系统电源状态的变化时,驱动程序通过放置它们设备在适当的设备电源状 态来响应。此外,驱动程序能发现是否设备闲置,并设置未用的设备处于休眠状态。总线专用的 机制报告设备电源能力、设置并报告设备状态及改变设备电源。怎样和何时确切地改变设备电源 取决于设备类型和设备硬件的能力。 尽管ACPⅠ硬件意识到了最大地电力储存,该硬件不需要为在驱动程序里生效的电源管理而 遵从ACPI规范。 124电源状态 电源状态指示了系统或单个设备的电平消耗,也指示了枚举活动的范围。电源管理器设定整 个系统的电源状态,而设备驱动程序设置它们单个设备的电源状态 ACPI规范定义了系统和单个设备的不连续电源状态。系统电源状态被引用为Sx,这里x是0 到5之间的一个状态数,设备状态被引用为Dx,这里x是0到3之间的一个状态数。状态数与电 力消耗呈反相关:越高的状态数使用越少的电力,状态S0和D0是最高的电力,也是最具功能的, 是最完全的状态,状态S5和D3是最低的电力状态并有最长的唤醒时间 严格定义的电源状态允许不同制造商的许多设备能一致地、可预测地一起工作。举例来说 当电源管理器设置系统为S3状态时,其能依靠支持电源管理器的驱动程序设置它们设备相应的 设备状态,并能以一种可测的形式返回工作状态。 11设备树 OS维持一个能保留系统里的设备踪迹的设备树。图1.3给出了系统配置的设备树的一个例子。 设备树保留着存在于系统中的设备信息,当机器引导时,通过使用从驱动程序和其他组件获 得的信息,OS构建此树,并当设备被添加或删除时更新此树。设备树是分级的,总线上的设备 代表着总线适配器或控制器的“子级”。你可参看设备管理器的使用来了解设备树的设备分级(选 择“view”,然后选择“ Devices by connection”) 设备树的每一个节点是一个设备节点( devnode),一个 devnode包括设备驱动程序的设备对 象加上由OS所保留的内部信息。参看1.4.3部分来获取更多的信息。 图1.3PnP设备树例子 设备树的分级反映了机器里设备附着的结构,当OS管理设备时它使用该分级。例如,如果 用户请求从图1.3所示机器里拔掉USB控制器,PnP管理器从设备树上决定该行为也将导致另 外的三个设备被拔掉(USB集线器、操纵杆和镜头)。当PnP管理器就USB控制器询问驱动程序 删除控制器是否安全时,PP管理器同样地就控制器(USB集线器、操纵杆和镜头)的任何子代 而查询驱动程序。 除过在设备树里给出的分级关系外,机器设备之间有其他的关系,这里包括删除和抽出的关 系。为了更多的信息,参见《 Windows2000驱动程序开发参考》的卷一参考页里的 IRP MN QUERY DEVICE RELATIONS
23 电源管理器也提供一个驱动程序接口,该接口主要包括 PoXxx 例程、电源管理 IRP 和必要的 驱动程序入口点。 当电源管理器请求系统电源状态的变化时,驱动程序通过放置它们设备在适当的设备电源状 态来响应。此外,驱动程序能发现是否设备闲置,并设置未用的设备处于休眠状态。总线专用的 机制报告设备电源能力、设置并报告设备状态及改变设备电源。怎样和何时确切地改变设备电源 取决于设备类型和设备硬件的能力。 尽管 ACPI 硬件意识到了最大地电力储存,该硬件不需要为在驱动程序里生效的电源管理而 遵从 ACPI 规范。 1.2.4 电源状态 电源状态指示了系统或单个设备的电平消耗,也指示了枚举活动的范围。电源管理器设定整 个系统的电源状态,而设备驱动程序设置它们单个设备的电源状态。 ACPI 规范定义了系统和单个设备的不连续电源状态。系统电源状态被引用为 Sx,这里 x 是 0 到 5 之间的一个状态数,设备状态被引用为 Dx,这里 x 是 0 到 3 之间的一个状态数。状态数与电 力消耗呈反相关:越高的状态数使用越少的电力,状态 S0 和 D0 是最高的电力,也是最具功能的, 是最完全的状态,状态 S5 和 D3 是最低的电力状态并有最长的唤醒时间。 严格定义的电源状态允许不同制造商的许多设备能一致地、可预测地一起工作。举例来说, 当电源管理器设置系统为 S3 状态时,其能依靠支持电源管理器的驱动程序设置它们设备相应的 设备状态,并能以一种可测的形式返回工作状态。 1.1 设备树 OS维持一个能保留系统里的设备踪迹的设备树。图1.3给出了系统配置的设备树的一个例子。 设备树保留着存在于系统中的设备信息,当机器引导时,通过使用从驱动程序和其他组件获 得的信息,OS 构建此树,并当设备被添加或删除时更新此树。设备树是分级的,总线上的设备 代表着总线适配器或控制器的“子级”。你可参看设备管理器的使用来了解设备树的设备分级(选 择“View”,然后选择“Devices by connection”)。 设备树的每一个节点是一个设备节点(devnode),一个 devnode 包括设备驱动程序的设备对 象加上由 OS 所保留的内部信息。参看 1.4.3 部分来获取更多的信息。 图 1.3PnP 设备树例子 设备树的分级反映了机器里设备附着的结构,当 OS 管理设备时它使用该分级。例如,如果 一用户请求从图 1.3 所示机器里拔掉 USB 控制器,PnP 管理器从设备树上决定该行为也将导致另 外的三个设备被拔掉(USB 集线器、操纵杆和镜头)。当 PnP 管理器就 USB 控制器询问驱动程序 删除控制器是否安全时,PnP 管理器同样地就控制器(USB 集线器、操纵杆和镜头)的任何子代 而查询驱动程序。 除过在设备树里给出的分级关系外,机器设备之间有其他的关系,这里包括删除和抽出的关 系 。 为 了 更 多 的 信 息 , 参 见 《 Windows2000 驱 动 程 序 开 发 参 考 》 的 卷 一 参 考 页 里 的 IRP_MN_QUERY_DEVICE_RELATIONS
1.3驱动程序层次和设备对象 I/O系统提供一个分层的驱动程序体系结构,这一部分从支持PnP和电源管理的驱动程序的 角度讨论了体系结构,讨论包括各种驱动程序、驱动程序层次和设备对象 13.1驱动程序种类 从PnP的角度,有三种驱动程序: 总线驱动程序--驱动IO总线并提供设备间独立的每个插槽功能 功能驱动程序-驱动一个单个的设备 过滤器驱动程序-过滤一个设备、设备类或总线的I/O请求 在本书中,总线是物理的、逻辑的或虚拟的设备所能附着的任何设备:总线包括传统的总线, 如SCSI和PCl,也有并口、串口和i8042端口 对一个驱动程序编程人员来说,知道不同的PnP驱动程序种类和他们正在编写哪一类驱动程 序是重要的。例如,是否一个驱动程序处理每个 PnP IrP和怎样处理这个IRP取决于正在编写哪 类的驱动程序(一个总线驱动程序、功能驱动程序还是过滤器驱动程序)。 图14给出了一个设备的总线驱动程序、功能驱动程序和过滤器驱动程序之间的关系。 每个设备典型地有一个父IO总线的总线驱动程序管理,一个设备的功能驱动程序,零个或 多个设备的过滤器驱动程序。需要许多过滤器驱动程序的驱动程序设计不能产生最佳的执行 图14里的驱动程序如下 1.总线驱动程序服务于一个总线控制器、适配器和电桥。总线驱动程序是必须的驱动程序:在 一个机器上,每个类型的总线有一个驱动程序。微软为大多数通用总线提供了总线驱动程序 IHV和OEM则提供了其他的总线驱动程序 2.总线过滤器驱动程序典型地给一总线增加值,它由微软或系统OEM提供,对一个总线来说, 可以有任何数目的总线过滤器驱动程序 3.低层过滤器驱动程序典型地修改了设备硬件的行为,它们是可选择的且典型地由IHV提供, 对一个设备来说,可以有任何数目的低层过滤器驱动程序 图14可能的驱动程序层次 4.功能驱动程序是主要的设备驱动程序,一个功能驱动程序典型地由且必须由设备商来编写(除 非设备使用原始模式) 5.顶层过滤器驱动程序典型地提供设备的增值特征,它们是可选择的且典型地由IHV提供。 下面各部分描述了驱动程序的总体类型(总线驱动程序、功能驱动程序和过滤器驱动程序)。 1311总线驱动程序 总线驱动程序服务一个总线控制器,适配器,或者电桥(参看图14),微软为大多数通用总 线提供总线驱动程序,例如PCI, PnpISA,SCSI和USB。其他的总线驱动程序由IV和OEM提 供。总线驱动程序是必须的驱动程序;在一个机器里,每一类总线有一个总线驱动程序。如果机
24 1.3 驱动程序层次和设备对象 I/O 系统提供一个分层的驱动程序体系结构,这一部分从支持 PnP 和电源管理的驱动程序的 角度讨论了体系结构,讨论包括各种驱动程序、驱动程序层次和设备对象。 1.3.1 驱动程序种类 从 PnP 的角度,有三种驱动程序: ◼ 总线驱动程序---驱动 I/O 总线并提供设备间独立的每个插槽功能 ◼ 功能驱动程序---驱动一个单个的设备 ◼ 过滤器驱动程序---过滤一个设备、设备类或总线的 I/O 请求 在本书中,总线是物理的、逻辑的或虚拟的设备所能附着的任何设备;总线包括传统的总线, 如 SCSI 和 PCI,也有并口、串口和 i8042 端口。 对一个驱动程序编程人员来说,知道不同的 PnP 驱动程序种类和他们正在编写哪一类驱动程 序是重要的。例如,是否一个驱动程序处理每个 PnP IRP 和怎样处理这个 IRP 取决于正在编写哪 一类的驱动程序(一个总线驱动程序、功能驱动程序还是过滤器驱动程序)。 图 1.4 给出了一个设备的总线驱动程序、功能驱动程序和过滤器驱动程序之间的关系。 每个设备典型地有一个父 I/O 总线的总线驱动程序管理,一个设备的功能驱动程序,零个或 多个设备的过滤器驱动程序。需要许多过滤器驱动程序的驱动程序设计不能产生最佳的执行。 图 1.4 里的驱动程序如下: 1. 总线驱动程序服务于一个总线控制器、适配器和电桥。总线驱动程序是必须的驱动程序;在 一个机器上,每个类型的总线有一个驱动程序。微软为大多数通用总线提供了总线驱动程序, IHV 和 OEM 则提供了其他的总线驱动程序。 2. 总线过滤器驱动程序典型地给一总线增加值,它由微软或系统 OEM 提供,对一个总线来说, 可以有任何数目的总线过滤器驱动程序。 3. 低层过滤器驱动程序典型地修改了设备硬件的行为,它们是可选择的且典型地由 IHV 提供, 对一个设备来说,可以有任何数目的低层过滤器驱动程序。 图 1.4 可能的驱动程序层次 4. 功能驱动程序是主要的设备驱动程序,一个功能驱动程序典型地由且必须由设备商来编写(除 非设备使用原始模式)。 5. 顶层过滤器驱动程序典型地提供设备的增值特征,它们是可选择的且典型地由 IHV 提供。 下面各部分描述了驱动程序的总体类型(总线驱动程序、功能驱动程序和过滤器驱动程序)。 1.3.1.1 总线驱动程序 总线驱动程序服务一个总线控制器,适配器,或者电桥(参看图 1.4),微软为大多数通用总 线提供总线驱动程序,例如 PCI,PnpISA,SCSI 和 USB。其他的总线驱动程序由 IHV 和 OEM 提 供。总线驱动程序是必须的驱动程序;在一个机器里,每一类总线有一个总线驱动程序。如果机
器里有不止一个同类的总线,则一个总线驱动程序能服务不止一个总线。 总线驱动程序的主要任务是: 枚举其总线上的设备 响应PnP和电源管理IRP 总线的多路访问(对某些总线) 总体上管理其总线上的设备 在枚举过程中,一个总线驱动程序识别它的总线上的设备并为它们产生设备对象。总线驱动 程序用来标识相连接的设备方法取决于特别的总线。 总线驱动程序代表其总线上的设备来执行一定的操作,包括访问设备寄存器来物理地改变设 备的电源状态。例如,当设备休眠时,总线驱动程序设置设备寄存器来给设备适当的电源状态 但要注意,总线驱动程序不能够处理其总线上的设备的读和写请求,一个设备的读和写请求 由设备功能驱动程序处理(看14.1.2部分)。仅仅当设备以原始模式使用时,父总线驱动程序处 理设备的读和写 总线驱动程序为控制器,适配器,或者电桥起着功能驱动程序的作用,并因此为控制器,适 配器,或者电桥管理设备电源策略。 总线驱动程序能够作为一个驱动程序/小驱动程序对来执行,即以SCSI端口/微端口对驱动 个 SCSI HBA(主机总线适配器)的方法。在这样的驱动程序对里,小驱动程序与次一级驱动程 序(它是一个DL)相链接 1312功能驱动程序 功能驱动程序是设备的主要驱动程序(参见图1.4)。一个功能驱动程序典型地由设备厂商且 必须由设备厂商来编写(除非设备使用原始模式)。PnP管理器为一个设备至少装载一个功能驱动 程序,功能驱动程序能服务一个或多个设备。 功能驱动程序为它的设备提供操作接口,典型地,功能驱动程序处理设备的读和写并管理设 备电源策略 个设备的功能驱动程序能够被作为一个驱动程序/小驱动程序对来执行,例如一个端口/微 端口或一个类微类对。在这样的驱动程序对里,小驱动程序与次一级驱动程序(其是一个DLL) 相链接。 如果以原始模式驱动一个设备,它没有功能驱动程序和顶层或低层过滤器驱动程序。所有的 原始模型IO通过总线驱动程序和可选择的总线过滤器驱动程序来实现 1.313过滤器驱动程序 过滤器驱动程序是可选择的驱动程序,该驱动程序给设备增加值或修改设备的行为。过滤器 驱动程序能服务于一个或多个设备。 总线过滤器驱动程序 总线过滤器驱动程序典型地给总线添加数值,它由微软或系统OEM提供(看图1.4)。总线 过滤器驱动程序是可选择的,对一个总线来说,可以有任何数目的总线过滤器驱动程序 举例来说,总线过滤器驱动程序能够实现标准总线硬件的特性增强 对 ACPI BIOS所描述的设备,电源管理在每个这样的设备的总线驱动程序之上插入微软提供 的一个ACPⅠ过滤程序(总线过滤器驱动程序)。ACPI过滤程序执行设备电源策略,并打开和关
25 器里有不止一个同类的总线,则一个总线驱动程序能服务不止一个总线。 总线驱动程序的主要任务是: ◼ 枚举其总线上的设备 ◼ 响应 PnP 和电源管理 IRP ◼ 总线的多路访问(对某些总线) ◼ 总体上管理其总线上的设备 在枚举过程中,一个总线驱动程序识别它的总线上的设备并为它们产生设备对象。总线驱动 程序用来标识相连接的设备方法取决于特别的总线。 总线驱动程序代表其总线上的设备来执行一定的操作,包括访问设备寄存器来物理地改变设 备的电源状态。例如,当设备休眠时,总线驱动程序设置设备寄存器来给设备适当的电源状态。 但要注意,总线驱动程序不能够处理其总线上的设备的读和写请求,一个设备的读和写请求 由设备功能驱动程序处理(看 1.4.1.2 部分)。仅仅当设备以原始模式使用时,父总线驱动程序处 理设备的读和写。 总线驱动程序为控制器,适配器,或者电桥起着功能驱动程序的作用,并因此为控制器,适 配器,或者电桥管理设备电源策略。 总线驱动程序能够作为一个驱动程序/小驱动程序对来执行,即以 SCSI 端口/微端口对驱动一 个 SCSI HBA(主机总线适配器)的方法。在这样的驱动程序对里,小驱动程序与次一级驱动程 序(它是一个 DLL)相链接。 1.3.1.2 功能驱动程序 功能驱动程序是设备的主要驱动程序(参见图 1.4)。一个功能驱动程序典型地由设备厂商且 必须由设备厂商来编写(除非设备使用原始模式)。PnP 管理器为一个设备至少装载一个功能驱动 程序,功能驱动程序能服务一个或多个设备。 功能驱动程序为它的设备提供操作接口,典型地,功能驱动程序处理设备的读和写并管理设 备电源策略。 一个设备的功能驱动程序能够被作为一个驱动程序/小驱动程序对来执行,例如一个端口/微 端口或一个类/微类对。在这样的驱动程序对里,小驱动程序与次一级驱动程序(其是一个 DLL) 相链接。 如果以原始模式驱动一个设备,它没有功能驱动程序和顶层或低层过滤器驱动程序。所有的 原始模型 I/O 通过总线驱动程序和可选择的总线过滤器驱动程序来实现。 1.3.1.3 过滤器驱动程序 过滤器驱动程序是可选择的驱动程序,该驱动程序给设备增加值或修改设备的行为。过滤器 驱动程序能服务于一个或多个设备。 总线过滤器驱动程序 总线过滤器驱动程序典型地给总线添加数值,它由微软或系统 OEM 提供(看图 1.4)。总线 过滤器驱动程序是可选择的,对一个总线来说,可以有任何数目的总线过滤器驱动程序。 举例来说,总线过滤器驱动程序能够实现标准总线硬件的特性增强。 对 ACPI BIOS 所描述的设备,电源管理在每个这样的设备的总线驱动程序之上插入微软提供 的一个 ACPI 过滤程序(总线过滤器驱动程序)。ACPI 过滤程序执行设备电源策略,并打开和关