windows显示驱动开发-调试间接显示驱动程序(一)
间接显示驱动程序 (IDD) 是 UMDF 驱动程序,因此 UMDF 调试文档(例如 确定 UMDF 驱动程序加载失败的原因或 UMDF 设备无法启动)是一个很好的起点。注意本文使用windbg进行调试。
注册表控件
Indirect Display Driver Class eXtension (IccDx) 具有一些可用于帮助调试 IDD 的注册表设置。 所有注册表值都位于 HKLM\System\CurrentControlSet\Control\GraphicsDrivers 注册表项下。
值名称 | 详细信息 |
---|---|
TerminateIndirectOnStall | 如果监视器在帧可用后 10 秒内未处理帧,则零值将禁用终止驱动程序的监视器。 任何其他值都将使监视器保持启用状态。 |
IddCxDebugCtrl | 启用 IddCx 的不同调试方面的位字段。 请参阅下表。 |
IddCxDebugCtrl 值
IddCxDebugCtrl 中的位 | 含义 |
---|---|
0x0001 | 当 IddCx 检测到错误时中断调试器 |
0x0002 | 加载 IddCx 时中断调试器 |
0x0004 | 卸载 IddCx 时中断调试器 |
0x0008 | 调用 IddCx DriverEntry 时中断调试器 |
0x0010 | 调用驱动程序绑定时中断调试器 |
0x0020 | 调用驱动程序启动时中断调试器 |
0x0040 | 调用驱动程序取消绑定时中断调试器 |
0x0080 | 禁用 DDI 监视器,该监视器终止驱动程序在 DDI 调用中花费的时间过长 |
0x0100 | 未使用 |
0x0200 | 启用调试覆盖,请参阅下文 |
0x0400 | 在框架中的脏凹槽上覆盖彩色 alpha 框;需要设置0x0200 |
0x0800 | 将 pref 统计信息叠加到帧中 |
0x2000 | IddCx 将查询每个帧的捕获帧注册表值;需要设置0x0200 |
若要运行任何覆盖函数,必须使用 D3D11_CREATE_DEVICE_BGRA_SUPPORT 标志创建由驱动程序创建并传递给 IddCxSwapChainSetDevice 的 Direct3D 设备。
IddCx WPP 跟踪
Iddcx 使用 WPP 基础结构 来记录调试信息。 WPP 信息可以捕获到文件中,当此捕获正在进行时,它可以显示在内核调试器中。
捕获 IddCx WPP 跟踪
可通过多种方式启用 WPP 跟踪。 一种便捷方法是在 logman.exe 程序中使用 生成。 如果将以下行复制到批处理文件并从提升的命令提示符运行,则会将 IddCx WPP 跟踪收集到 IddCx.etl 文件中。
@echo off
echo Starting WPP tracing....
logman create trace IddCx -o IddCx.etl -ets -ow -mode sequential -p {D92BCB52-FA78-406F-A9A5-2037509FADEA} 0x4f4 0xFF
echo Tracing enabled
pause
echo Stopping WPP tracing....
logman -stop IddCx -ets