Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"CaptureCount"=dword:00000014
"TriggerUniqueness"=dword:00000001
间接显示屏幕捕获调试功能
从 Windows 内部版本 25164开始,IddCx 能够转储 IddCx 传递给驱动程序的桌面帧。 此功能可用于调试视觉问题。 它可以与调试覆盖(如着色脏框架区域)结合使用。
由于 IddCx 将在每个帧上查找帧捕获的调试注册表设置中的更改, 因此 IddCxDebugCtrl中有一个主控件值,用于控制 IddCx 是否将为每个帧检查捕获注册表值。 这可确保禁用时不会造成性能损失(当 OPM 接口对驱动程序处于活动状态时,将禁用此功能)。
控制捕获的注册表值
以下注册表值位于 HKLM\System\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture 中。 应在设置 IddCxDebugCtrl 值之前创建此注册表文件夹。
名称 | 缺少默认值 | 含义 |
---|---|---|
TriggerUniqueness | 0 | 调用每个 IddCx 交换链以获取新帧时,它将读取此值。 如果 TriggerUniqueness 为非零且不同于以前的读取值,则将读取以下值并启用帧捕获。 |
TargetMask | 0xffff | 位掩码:适配器上每个目标索引的一位,用于控制该目标的交换链是否应成为此捕获序列的一部分。 |
CaptureCount | 10 | 每个 enabled-for-capture IddCx 交换链应捕获的帧数。 |
SkipFrames | 0 | 要在每个捕获的帧之间跳过的帧数。 |
CaptureSessionID | 0 | 将在其中启用帧捕获的会话。 值为零始终表示控制台会话。 |
ScaleFactor | 100 | 控制用于确定捕获文件尺寸的比例系数,有效值 1-100 |
CaptureFolder | c:\IddCxImages | 将写入捕获文件的文件夹。 如果 c:\IddCxImages 文件夹不存在,则会创建该文件夹。 |
捕获参数按目标存储,这样捕获会话就可以跨给定目标上的模式更改。
如果在监视对象仍在从以前的捕获捕获中捕获帧时检测到新的非零 TriggerUniqueness 值,则会停止当前捕获并启动新触发的捕获。
使用 REG 文件控制帧捕获
REG 文件是控制帧捕获的好方法。 一个文件可以设置初始值,另一个文件可以更新 TriggerUniqueness。
用于设置初始值的 REG 文件
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers]
"IddCxDebugCtrl"=dword:2200
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"TriggerUniqueness"=dword:0
用于更新 TriggerUniqueness 的 REG 文件
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"TriggerUniqueness"=dword:1
文件名和格式
捕获的帧采用 PNG 文件格式,文件名格式如下:
S<会话 ID,主机 >为零_Ad<ID 适配器 LUID > 的十六进制值_T<ID 目标 Idx > 的十六进制值_Frame<IDDCX_METADATA 中的帧数。 hhmmss >中 mmddyy format>Time 的 PresentationFrameNumber><<Date.png
下面是一些示例文件名:
- S0_Ad8ade_T3_Frame2343_020422_173434.png
- S0_Ad8ade_T3_Frame2344_020422_173434.png
- S0_Ad8ade_T3_Frame2345_020422_173435.png
WPP 日志记录
对于启动的每个 新 捕获会话,将为从注册表中读取或默认设置的每个值记录 WPP 消息。
每次捕获帧并将其写入文件时,IddCx 都会添加一条 WPP 消息,其中包含图像文件的完整文件名。
示例捕获设置
从首次连接监视器时捕获帧
下面是捕获第一次插入任何监视器(后跟 REG 文件)的前 20 帧所需的注册表值。
注册表项 | 值 | 说明 |
---|---|---|
CaptureCount | 20 | 设置 20 帧,而不是默认 10 帧 |
TriggerUniqueness | 1 | 任何非零值都将作为目标对象以零开头作为存储唯一性 |
在监视器处于活动状态时开始捕获
如果交换链在驱动程序获取每个帧时检查新的唯一性值,则应最后设置 TriggerUniqueness 条目,以确保按预期读取所有参数。 以下示例还将文件分辨率减半以节省空间,并将捕获文件写入 c:\frames 文件夹中。
注册表项 | 值 | 说明 |
---|---|---|
CaptureCount | 100 | 设置 100 帧,而不是默认的 10 帧 |
ScaleFactor | 50 | 设置 50% 分辨率以节省空间 |
CaptureFolder | c:\frames | 设置输出文件夹 |
TriggerUniqueness | 1 | 任何非零值都将作为目标对象以零开头作为存储唯一性工作 |
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"CaptureCount"=dword:00000014
"CaptureFolder"="c:\\frames"
"ScaleFactor"=dword:00000032
"TriggerUniqueness"=dword:00000001
从远程会话 3 中的第二个目标捕获 10 帧,每个捕获之间有 5 个帧
此捕获还使用调试覆盖来突出显示每个帧的脏区域。
注册表项 | 值 | 说明 |
---|---|---|
IddCxDebugCtrl | 还设置了位0x0400 | 0x0400启用脏区域突出显示,还需要0x2200位 |
CaptureSessionID | 3 | 启用远程会话 3 中的捕获 |
TargetMask | 0x2 | 位 1 对应于目标 Idx 1 |
SkipFrames | 5 | 跳过每个捕获之间的 5 帧捕获 |
TriggerUniqueness | 1 | 任何非零值都将作为目标对象以零开头作为存储唯一性 |
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers]
"IddCxDebugCtrl"=dword:2600
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"CaptureSessionID"=dword:00000003
"TargetMask"=dword:00000002
"SkipFrames"=dword:00000005
"TriggerUniqueness"=dword:00000001