Отладка Co-Installer установки устройства
Некоторые пакеты установки устройств оборудования включают DLL-файлы, известные как со-установщики, которые помогают при установке устройства.
Вы не можете выполнить отладку совместного установщика так же, как и другие модули. Это связано с уникальным способом загрузки совместного установщика, а также из-за того, что многие сценарии установки происходят автоматически, не предоставляя разработчику возможность пробиться в выполняемый процесс.
Эту проблему можно устранить, установив устройство программным способом. Присоединение отладчика к приложению, которое устанавливает устройство, позволяет получить доступ к самому совместному установщику. Самый простой способ сделать это — установить или переустановить устройство с помощью средства DevCon , входящего в состав пакета драйверов Windows (WDK). Затем можно выполнить отладку совместного установщика с помощью WinDbg.
Для выполнения этой задачи используйте следующую процедуру. В этой процедуре предполагается, что вы разработали рабочий пакет установки драйверов для устройства, который использует совместный установщик. Также предполагается, что у вас есть последняя копия WDK. Сведения о разработке драйверов, пакетов установки драйверов и совместного установки драйверов см. в документации по WDK.
Отладка совместного установщика с помощью DevCon и WinDbg
Подключите аппаратное устройство.
Отмена мастера обнаружения нового оборудования .
Запустите WinDbg.
Выберите Открыть исполняемый файл в меню Файл WinDbg.
В диалоговом окне Открыть исполняемый файл выполните следующие действия.
В текстовом поле выделения файла выберите средство DevCon (Devcon.exe). Для этого перейдите в папку установки WDK, откройте средства подкаталога, затем откройте подкаталог devcon, затем откройте подкаталог, соответствующий архитектуре процессора вашего компьютера, и выберите Devcon.exe. Щелкните только один раз на Devcon.exe и еще не нажимайте кнопку Открыть.
В текстовом поле Аргументы введите следующий текст, где INFFile — это имя файла сведений об установке устройства (INF), а HardwareID — это идентификатор оборудования устройства:
update INFFile HardwareID
В текстовом поле Каталог начального запуска введите путь к пакету установки устройства.
Нажмите кнопку Открыть.
Начнется процесс отладки, и WinDbg войдет в процесс DevCon, прежде чем DevCon установит драйвер.
Настройте отладчик для прерывания процесса совместного установщика при его загрузке. Это можно сделать с помощью любого из следующих методов:
В окне Команда отладчика используйте команду sxe (Set Exceptions), а затем ld: и имя файла совместного установщика, за исключением расширения файла. После двоеточия не должно быть пробела. Например, если имя совместного установщика mycoinst.dll, используйте следующую команду:
sxe ld:mycoinst
Выберите Фильтры событий в меню Отладка WinDbg. В диалоговом окне Фильтры событий выберите Загрузить модуль. В разделе Выполнение выберите Включено. В разделе Продолжить выберите Не обработано. Нажмите кнопку Аргумент , а затем в текстовом поле введите имя файла совместного установщика, за исключением расширения файла (например, введите "mycoinst" для mycoinst.dll). Нажмите кнопку ОК , а затем кнопку Закрыть.
Возобновите выполнение, нажав клавишу F5 или введя команду g (Go) в окне Команда отладчика.
При загрузке совместного установщика выполнение снова переходит в отладчик. На этом этапе можно задать любые необходимые дополнительные точки останова.
Ограничения этой процедуры
В некоторых случаях выполнение пакета установки устройства в DevCon может привести к немного другому поведению, чем при установке PnP, из-за разных маркеров безопасности и т. п. Если вы пытаетесь отладить определенную проблему в совместном установщике, возможно, эта проблема не будет реплицироваться, если используется DevCon. Поэтому перед использованием этого метода следует использовать DevCon для установки драйвера без подключенного отладчика, чтобы убедиться, что эта проблема существует как в сценариях PnP, так и в DevCon.
Если проблема исчезает всякий раз, когда DevCon инициирует установку, вам придется выполнить отладку совместного установщика без использования DevCon. Одним из способов этого является использование средства TList с параметром /m , чтобы определить, какой процесс загружает модуль совместного установщика, а затем подключить отладчик к этому процессу.