硬件资源是可分配的可寻址总线路径,允许外围设备和系统处理器相互通信。 硬件资源通常包括 I/O 端口地址、中断向量和总线相对内存地址块。
在系统能够与 设备实例通信之前,PnP 管理器必须根据知道哪些资源可用以及哪些设备实例能够使用的资源将硬件资源分配给设备实例。 资源分配给 设备树 中的每个设备节点(假设表示的设备需要资源和这些资源可用)。 PnP 管理器使用与设备节点关联的列表跟踪硬件资源。 它使用两种类型的列表:
资源要求列表
设备通常设计为在资源分配范围内运行。 例如,设备可能只需要一个中断向量,但它可能能够使用任意一个矢量范围。 对于每个设备实例,PnP 管理器维护资源 要求列表 ,该列表指定设备可以运行的所有硬件资源范围。 列表的名称源于在将资源分配给设备时,需要 PnP 管理器从此列表中选择资源。
内核模式代码使用 IO_RESOURCE_REQUIREMENTS_LIST 结构来指定资源需求列表,既可以作为系统例程的输入,也可以用于响应 I/O 请求包(IRP)。 用户模式代码使用 PnP 配置管理器结构 作为 PnP 配置管理器函数 的输入来指定资源需求列表。
资源列表
当 PnP 管理器将资源分配给设备时,它会通过为每个设备实例创建分配的资源列表来跟踪这些分配。 这些列表可以称为 资源分配列表,但该名称通常缩写为 资源列表。 PnP 管理器可以更改资源列表内容,因为设备被添加到系统或从系统中删除,随后将重新分配资源。 (资源也可以由 PnP BIOS 分配。此外,使用 INF 文件或用户输入的安装软件可以强制 PnP 管理器将特定资源分配给设备。
内核模式代码通过使用 CM_RESOURCE_LIST 结构(作为系统例程的输入或响应 IRP)来指定资源列表。 用户模式代码使用 PnP 配置管理器结构 指定资源列表作为 PnP 配置管理器函数的输入。
PnP 管理器将资源要求列表和资源列表存储在注册表中,可以使用 Regedit.exe查看它们。 驱动程序可以通过即插即用例程和即插即用次要IRP间接访问这些列表。 用户模式应用程序可以使用 PnP 配置管理器函数。 (驱动程序和应用程序不得使用注册表函数直接访问这些列表,因为存储格式在将来的版本中可能会更改。
逻辑配置
资源要求列表和资源列表都包含一个或多个 逻辑配置。 每个逻辑配置都标识一系列可接受的资源,或一组特定 设备实例的特定资源。 此外,设备实例的每个逻辑配置都属于 逻辑配置类型之一。 下面列出了配置类型。 可以为每个设备实例分配多个相同或不同类型的逻辑配置。
资源要求列表的逻辑配置类型
基本配置
资源要求列表,用于标识即插即用设备提供的资源范围。 驱动程序在收到 IRP_MN_QUERY_RESOURCE_REQUIREMENTS IRP 时应返回此列表。 (可以在 INF 文件中描述非 PnP 设备的基本配置。在这种情况下,设备安装软件读取 INF 文件并调用 PnP 配置管理器函数 来创建要求列表。
筛选的配置
驱动程序堆栈接收到的资源需求列表,可能经过修改后,由驱动程序堆栈返回,以响应 IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP。 PnP 管理器使用生成的筛选配置作为分配资源的基础。
替代配置
替代基本配置的资源要求列表。 通常,如果设备的 INF 文件包含 INF DDInstall.LogConfigOverride 节,设备安装程序会创建替代配置。 如果设备被从系统中物理移除,替代配置仍然不会被删除。
资源列表的逻辑配置类型
启动配置
一个资源列表,用于标识在启动系统时分配给设备实例的资源。 (对于 PnP 设备,这是 BIOS 提供的配置;对于非 PnP 设备,这些资源可能由卡片上的跳线选择。驱动程序在收到 IRP_MN_QUERY_RESOURCES IRP 时应返回此资源列表。 (如果 BIOS 无法确定设备使用的所有资源,启动配置可能部分为空。如果删除或重启设备,PnP 管理器可以修改此列表。 对于非 PnP 设备,可以使用此配置类型而不是强制配置,在这种情况下,其配置优先级低于等效的强制配置。 每个设备实例只能存在一个启动配置。
强制配置
标识设备实例必须使用的资源的资源列表。 强制配置可防止 PnP 管理器将其他资源分配给设备实例。 设备安装程序可能会根据 INF 中包含的信息或从用户接收的信息创建强制配置。 如果其设备从系统中物理移除,强制配置仍不会被删除。 每个设备实例只能存在一个强制配置。
已分配的配置
标识设备实例当前正在使用的资源的资源列表。 每个设备实例只能存在一个分配的配置。
设备驱动程序负责确定与 PnP 兼容的设备的基本配置、筛选的配置和启动配置,以及返回该信息以响应 PnP 管理器发送的 IRP。 (有关详细信息,请参阅 将 PnP 设备添加到正在运行的系统。驱动程序安装软件可以为非 PnP 设备创建替代配置、强制配置以及启动配置。 PnP 管理器维护每个设备实例的分配配置。
创建每个配置时,将为其分配优先级。 如果 PnP 管理器发现设备实例已分配了同一类型的多个逻辑配置,则尝试先使用优先级最高的配置。 如果该配置导致资源冲突,它会尝试具有下一个较低优先级的配置。 (有关配置优先级的列表,请参阅 CM_Add_Empty_Log_Conf。