调试设备安装包中的辅助安装程序

某些硬件设备安装包包括称为 共同安装程序的 DLL 文件,这些文件有助于安装设备。

不能以与其他模块相同的方式调试共同安装程序。 这是因为加载共同安装程序的独特方式,并且许多安装方案会自动发生,而不会为开发人员提供进入正在运行的进程的机会。

可以通过以编程方式安装设备来解决此问题。 将调试器附加到安装设备的应用程序允许访问共同安装程序本身。 实现此目的的最简单方法是使用 Windows 驱动程序工具包 (WDK) 中包含的 DevCon 工具安装或重新安装设备。 然后,可以使用 WinDbg 调试共同安装程序。

使用以下过程完成此任务。 此过程假定你已为使用共同安装程序的设备开发了一个工作驱动程序安装包。 它还假定你拥有 WDK 的最新副本。 有关开发驱动程序、驱动程序安装包和驱动程序安装共同安装程序的信息,请参阅 WDK 文档。

使用 DevCon 和 WinDbg 调试共同安装程序

  1. 插入硬件设备。

  2. 取消“ 查找新硬件 ”向导。

  3. 启动 WinDbg。

  4. 从 WinDbg 的“文件”菜单中选择“打开可执行文件”。

  5. 在“ 打开可执行文件 ”对话框中,执行以下操作:

    1. 在文件选择文本框中,选择 DevCon 工具 (Devcon.exe) 。 为此,请浏览到 WDK 安装文件夹,打开子目录工具,打开子目录 devcon,然后打开与计算机的处理器体系结构匹配的子目录,然后选择“Devcon.exe”。 在 Devcon.exe 上仅单击一次,并且尚未按 “打开”。

    2. 在“ 参数 ”文本框中,输入以下文本,其中 INFFile 是设备安装信息 (INF) 文件的文件名, HardwareID 是设备的硬件 ID:

      update INFFile HardwareID 
      
    3. “开始目录 ”文本框中,输入设备安装包的路径。

    4. 单击 “打开”

  6. 调试过程将开始,WinDbg 将在 DevCon 安装驱动程序之前进入 DevCon 进程。

  7. 配置调试器,使其在加载时进入共同安装程序进程。 可以通过以下任一方法执行此操作:

    • 在“调试器命令”窗口中,使用 sxe (设置异常) 命令,后跟 ld: ,然后使用共同安装程序的文件名(不包括文件扩展名)。 冒号后应没有空格 例如,如果共同安装程序的名称 mycoinst.dll,请使用以下命令:

      sxe ld:mycoinst 
      
    • 从 WinDbg 的“调试”菜单中选择“事件筛选器”。 在“ 事件筛选器 ”对话框中,选择“ 加载模块”。 在“ 执行”下,选择“ 已启用”。“继续”下,选择“ 未处理”。 单击“ 参数 ”按钮,然后在文本框中输入共同安装程序的文件名(例如,不包括文件扩展名 (为 mycoinst.dll) 。 单击 “确定 ”,然后单击“ 关闭”。

  8. 按 F5 或在“调试器命令”窗口中输入 g (Go) 命令以继续执行。

  9. 加载共同安装程序时,执行将中断到调试器中。 此时,可以设置所需的任何其他断点。

此过程的限制

在某些情况下,在 DevCon 下运行设备安装包可能会导致与 PnP 安装的行为略有不同,因为安全令牌等不同。 如果尝试调试共同安装程序中的特定问题,则如果涉及 DevCon,则此问题可能不会复制。 因此,在使用此方法之前,应使用 DevCon 在未附加调试器的情况下安装驱动程序,以验证 PnP 和 DevCon 方案中是否存在此问题。

如果问题在 DevCon 启动安装时消失,则必须在不使用 DevCon 的情况下调试共同安装程序。 执行此操作的一种方法是将 TList 工具与 /m 选项配合使用,以确定哪个进程正在加载共同安装程序模块,然后将调试器附加到该进程。