windows - PnP 管理器如何确定合适的功能驱动程序?
问题描述
我正在学习 Windows 驱动程序的加载过程。
但我无法理解以下文章的一部分。
在这篇文章中,有以下描述。
“4. PnP 管理器为设备加载适当的功能驱动程序和任何可选的过滤器驱动程序。”
我对上述描述有疑问。
PnP 管理器如何确定合适的功能驱动程序?
例如,
当 USB 存储器插入 Windows PC 时,PnP 管理器将在加载与 USB 相关的驱动程序后加载 disk.sys。
在这种情况下,我想知道为什么PnP管理器可以判断设备对应于disk.sys。
(在注册表中的某个地方看到?向总线驱动程序发送一些请求?等等..)
解决方案
当总线驱动程序检测并报告PDOIRP_MJ_PNP
设备 PnP 管理器向PDO设备发送几个。包括IRP_MN_QUERY_ID
获取设备标识字符串
然后在表单中格式化注册表项路径
\REGISTRY\MACHINE\SYSTEM\CurrentControlSet\Enum\<BusQueryDeviceID>\<BusQueryInstanceID>
设备返回的就地<BusQueryDeviceID>
字符串 forBusQueryDeviceID
和设备<BusQueryInstanceID>
返回的就地字符串 for BusQueryInstanceID
( Parameters.QueryId.IdType
)
此密钥已打开或创建。然后是查询BusQueryHardwareIDs
and BusQueryCompatibleIDs
。此查询的结果保存在HardwareID
和CompatibleIDs
REG_MULTI_SZ
值中。
然后 PnP 管理器Service
REG_SZ
在此键下查找值 - 如果它已经存在 - 已\REGISTRY\MACHINE\SYSTEM\CurrentControlSet\Services\<Service>
加载驱动程序 () 并AddDevice
使用此PDO调用它。如果此值尚未设置 - 通过系统中已安装的 inf 文件搜索 - 以获得最佳匹配HardwareID
和CompatibleIDs
. 如果找到驱动程序 - 结果保存在Service
REG_SZ
价值之下,下次不搜索
推荐阅读
- php - SOAP 请求适用于本地,但不适用于服务器
- xgboost - XGBoost 对所有测试数据显示相同的预测
- javascript - 自定义日期和时间输入,日期为“今天”,为餐厅添加一天
- ruby-on-rails - Rails 循环遍历参数数据
- java - 使用Zxing库连续扫描二维码,打开相机失败
- nsdate - NSDateFormatter 始于 2000 年,但 NSDate 始于 2001 年
- lambda - AWS CodePipeline:将 Lambda 函数输出传递给 CloudFormation
- python - 构建 Keras 项目
- python - 如何取回 keras 损失函数(张量)的错误值
- algorithm - 用于捆绑制作问题的算法