硬件资源

硬件资源是可分配的可寻址总线路径,允许外围设备和系统处理器相互通信。 硬件资源通常包括 I/O 端口地址、中断向量和总线相对内存地址块。

在系统能够与 设备实例通信之前,PnP 管理器必须根据知道哪些资源可用以及设备实例能够使用哪些资源,将硬件资源分配给设备实例。 资源分配给 设备树 中的每个设备节点 (假定表示的设备需要资源,并且这些资源) 可用。 PnP 管理器使用与设备节点关联的列表跟踪硬件资源。 它使用两种类型的列表:

资源要求列表
设备通常设计为在资源分配范围内运行。 例如,设备可能只需要一个中断向量,但它可能能够使用任意一个向量范围。 对于每个设备实例,PnP 管理器维护 一个资源要求列表 ,该列表指定设备可以运行的所有硬件资源范围。 列表的名称源于这样一个事实:在将资源分配给设备时,PnP 管理器需要从此列表中选择资源。

内核模式代码使用 IO_RESOURCE_REQUIREMENTS_LIST 结构指定资源要求列表, (作为系统例程的输入或响应 IRP) 。 用户模式代码使用 PnP 配置管理器结构作为 PnP 配置管理器函数的输入来指定资源要求列表。

资源列表
当 PnP 管理器将资源分配给设备时,它会通过为每个设备实例创建分配的资源列表来跟踪这些分配。 这些列表可以称为 资源分配列表,但该名称通常缩写为 资源列表。 在系统添加或删除设备时,PnP 管理器可以更改资源列表内容,随后会重新分配资源。 (资源也可以由 PnP BIOS 分配。此外,安装软件(使用 INF 文件或用户输入)可以强制 PnP 管理器将特定资源分配给 device.)

内核模式代码通过使用 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 设备添加到正在运行的 System。) 驱动程序安装软件可以创建替代配置、强制配置,对于非 PnP 设备,可以创建启动配置。 PnP 管理器维护每个设备实例的已分配配置。

创建每个配置时,都会为其分配优先级。 如果 PnP 管理器发现已为设备实例分配了多个相同类型的逻辑配置,它会先尝试使用优先级最高的逻辑配置。 如果该配置导致资源冲突,它会尝试具有下一个较低优先级的配置。 (有关配置优先级的列表,请参阅 CM_Add_Empty_Log_Conf.)