当今的外围设备必须 可配置硬件,并且其驱动程序必须 可配置软件。
如果设备可以接受系统硬件资源(例如 I/O 端口号)的不同分配,而不进行物理修改,则设备可进行硬件配置。 例如,如果在独立磁盘(RAID)配置的冗余阵列中连接了一组可热插即用磁盘,则用户可以在系统运行时交换磁盘。 如果设备是硬件可配置的,则其驱动程序不能包含设备硬件资源的硬编码的系统依赖值。
驱动程序是可软件配置的,如果:
它可以动态接收和更改其设备的硬件资源。
支持即插即用的驱动程序不包含设备的硬件资源的硬编码值,驱动程序也不会轮询设备以确定其资源分配。 相反,系统将资源动态分配给设备,然后将资源值提供给驱动程序。
它的设计不对在其驱动程序堆栈中可能位于其上方或下方的其他驱动程序做出任何假设。
例如,磁盘的较低级别设备驱动程序的设计必须足够灵活,以支持多个高级文件系统驱动程序(可能位于单个计算机上)实现的多个文件系统。
此外,如果计算机有足够的大容量存储容量,则同一较低级别的磁盘驱动程序不得干扰中间驱动程序对容错的支持(作为镜像分区、条带集或卷集实现)在文件系统中。
PnP 管理器和每个 PnP 硬件总线驱动程序协同工作,为特定类型的 I/O 总线和系统的软件提供平台硬件之间的接口。 PnP 管理器生成 设备树,其中包含表示系统上所有设备的节点,包括总线。 对于每个设备,PnP 管理器维护两个列表:
设备能够使用 的硬件资源 列表。
实际分配给设备的硬件资源的列表。
设备驱动程序可帮助 PnP 管理器创建这些列表,这些列表在注册表中维护。 当设备添加到系统并从中删除时,PnP 管理器会根据需要重新分配资源并更新列表。
系统的硬件抽象层(HAL)组件(实现为动态链接库)负责为系统的其他组件(包括内核模式驱动程序)提供所需的硬件级别的、特定于平台的支持。