Как диспетчер PnP определяет подходящий функциональный драйвер?

Я изучаю процесс загрузки драйвера Windows.
Но я не могу понять часть следующей статьи.

https://docs.microsoft.com/ja-jp/windows-hardware/drivers/install/step-3--драйвер-для-устройства-установлен

В этой статье есть следующее описание.

"4. Диспетчер PnP загружает соответствующий функциональный драйвер и любые дополнительные драйверы фильтров для устройства".

У меня есть вопрос по приведенному выше описанию.
Как диспетчер PnP определяет соответствующий функциональный драйвер?

Например,
когда USB-накопитель подключен к ПК с Windows, тогда диспетчер PnP загрузит disk.sys после загрузки драйвера, связанного с USB.
В этом случае я хочу знать, почему диспетчер PnP может решить, что устройство соответствует disk.sys.
(видит где-то в реестре? отправляет какие-то запросы водителю шины? и так далее.. )


person Tubasa358    schedule 08.03.2019    source источник


Ответы (1)


когда драйвер шины обнаруживает и сообщает PDO, диспетчер PnP устройства отправляет несколько IRP_MJ_PNP на устройство PDO. включая IRP_MN_QUERY_ID для получения Строки идентификации устройства

затем отформатированный путь к ключу реестра в форме

\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>) загружен и он AddDevice вызывается с этим PDO. если это значение еще не установлено - производился поиск по установленным inf файлам в системе - наилучшее совпадение HardwareID и CompatibleIDs. если найден драйвер - результат сохраняется под значением Service REG_SZ, чтобы в следующий раз не искать

person RbMm    schedule 08.03.2019