我正在研究Windows驱动程序的加载过程。
但我无法理解以下文章的一部分。
在本文中,有以下描述。
“ 4。PnP管理器为设备加载适当的功能驱动程序和任何可选的过滤器驱动程序。”
我对上述说明有疑问。
PnP管理器如何确定适当的功能驱动程序?
例如
当将USB存储器插入Windows PC时,PnP管理器将在加载与USB相关的驱动程序后加载disk.sys。
在这种情况下,我想知道为什么PnP管理器可以判断该设备与disk.sys相对应。
(看到注册表中的某个地方?向总线驱动程序发送一些请求?等等。)
答案 0 :(得分:0)
当总线驱动程序检测并报告 PDO 设备时,PnP管理器将多个IRP_MJ_PNP
发送到 PDO 设备。包括IRP_MN_QUERY_ID
以获得Device Identification Strings
然后使用格式
格式化注册表项路径\REGISTRY\MACHINE\SYSTEM\CurrentControlSet\Enum\<BusQueryDeviceID>\<BusQueryInstanceID>
设备为<BusQueryDeviceID>
返回的位置BusQueryDeviceID
字符串,设备为<BusQueryInstanceID>
(BusQueryInstanceID
)返回的位置Parameters.QueryId.IdType
字符串
此密钥已打开或创建。然后查询BusQueryHardwareIDs
和BusQueryCompatibleIDs
。该查询的结果保存在HardwareID
和CompatibleIDs
REG_MULTI_SZ
值中。
,然后PnP管理器在此键下查找Service
REG_SZ
值-如果已经存在,则加载驱动程序(\REGISTRY\MACHINE\SYSTEM\CurrentControlSet\Services\<Service>
)并用此<{ em> PDO 。如果尚未设置此值-是通过系统中已安装的inf文件搜索-以获得最佳匹配HardwareID
和CompatibleIDs
。如果找到驱动程序-结果保存在Service
REG_SZ
值下,下次不搜索