首页 > 解决方案 > PnP 管理器如何确定合适的功能驱动程序?

问题描述

我正在学习 Windows 驱动程序的加载过程。
但我无法理解以下文章的一部分。

https://docs.microsoft.com/ja-jp/windows-hardware/drivers/install/step-3--the-driver-for-the-device-is-installed

在这篇文章中,有以下描述。

“4. PnP 管理器为设备加载适当的功能驱动程序和任何可选的过滤器驱动程序。”

我对上述描述有疑问。
PnP 管理器如何确定合适的功能驱动程序?

例如,
当 USB 存储器插入 Windows PC 时,PnP 管理器将在加载与 USB 相关的驱动程序后加载 disk.sys。
在这种情况下,我想知道为什么PnP管理器可以判断设备对应于disk.sys。
(在注册表中的某个地方看到?向总线驱动程序发送一些请求?等等..)

标签: windowsusbdriverwdm

解决方案


当总线驱动程序检测并报告PDOIRP_MJ_PNP设备 PnP 管理器向PDO设备发送几个。包括IRP_MN_QUERY_ID获取设备标识字符串

然后在表单中格式化注册表项路径

\REGISTRY\MACHINE\SYSTEM\CurrentControlSet\Enum\<BusQueryDeviceID>\<BusQueryInstanceID>

设备返回的就地<BusQueryDeviceID>字符串 forBusQueryDeviceID和设备<BusQueryInstanceID>返回的就地字符串 for BusQueryInstanceID( Parameters.QueryId.IdType)

此密钥已打开或创建。然后是查询BusQueryHardwareIDsand BusQueryCompatibleIDs。此查询的结果保存在HardwareIDCompatibleIDs REG_MULTI_SZ值中。

然后 PnP 管理器Service REG_SZ在此键下查找值 - 如果它已经存在 - 已\REGISTRY\MACHINE\SYSTEM\CurrentControlSet\Services\<Service>加载驱动程序 () 并AddDevice使用此PDO调用它。如果此值尚未设置 - 通过系统中已安装的 inf 文件搜索 - 以获得最佳匹配HardwareIDCompatibleIDs. 如果找到驱动程序 - 结果保存在Service REG_SZ价值之下,下次不搜索


推荐阅读