Compartir a través de


Depuración de controladores de pantalla indirectos

Los controladores de pantallas indirectas (IDD) son controladores UMDF. Es un buen punto de partida empezar con la documentación sobre depuración de UMDF, como Cuáles son las razones por las que el controlador UMDF no se puede cargar o el dispositivo UMDF no se puede iniciar. En esta página se da toda la información sobre la depuración específica de controladores de pantalla indirectos.

Control del Registro

La Indirect Display Driver Class eXtension (IddCx) tiene algunos parámetros de registro que se pueden usar para depurar controladores de pantalla indirectos. Todos los valores del Registro se encuentran en la clave HKLM\System\CurrentControlSet\Control\GraphicsDrivers.

Nombre del valor Detalles
TerminateIndirectOnStall Con un valor cero, se deshabilita el guardián que finaliza el proceso del controlador si no procesa ningún fotograma en 10 segundos a partir de que el fotograma esté disponible. Cualquier otro valor hace que se habilite el guardián.
IddCxDebugCtrl Campo de bits que habilita diferentes aspectos de la depuración de IddCx. Consulte la tabla siguiente.

Nota

Si se usa el valor de registro TerminateIndirectOnStall para deshabilitar el guardián, las pruebas de HLK no se completarán.

Valores IddCxDebugCtrl

Bit en IddCxDebugCtrl Significado
0x0001 Entrar en el depurador cuando IddCx detecta un error
0x0002 Entrar en el depurador cuando se ha cargado el IddCx
0x0004 Entrar en el depurador cuando no se ha cargado el IddCx
0x0008 Entrar en el depurador cuando se llama a DriverEntry en IddCx
0x0010 Entrar en el depurador cuando se llama a la conexión del controlador
0x0020 Entrar en el depurador cuando se llama al inicio del controlador
0x0040 Entrar en el depurador cuando se llama a la desconexión del controlador
0x0080 Deshabilita el guardián de DDI que hace que termine el proceso del controlador si tarda mucho tiempo en la llamada de DDI.
0x0100 No usado
0x0200 Habilitar la superposición de la depuración; consulte la nota siguiente
0x0400 Superponer caja alfa de color sobre rectángulos sucios en el fotograma; se debe usar 0x0200
0x0800 Superponer estadísticas de rendimiento en el cuadro
0x2000 IddCx consultará los valores de registro de fotogramas de captura en cada fotograma; se debe usar 0x0200.

Nota

Para que cualquiera de las funciones de superposición funcione, el dispositivo Direct3D creado por el controlador y pasado a IddCxSwapChainSetDevice debe crearse con el indicador D3D11_CREATE_DEVICE_BGRA_SUPPORT.

Seguimientos de WPP en IddCx

Iddcx usa la infraestructura de WPP para registrar la información de depuración. La información de WPP se puede capturar en un archivo y, mientras que esta captura está en curso, se puede mostrar en el depurador de kernel.

Captura de seguimiento de WPP en IddCx

Hay varias maneras de habilitar el seguimiento de WPP. Una forma cómoda consiste n utilizar el programa integrado en logman.exe. Si copia las siguientes líneas en un archivo por lotes y lo ejecuta a través del símbolo del sistema con privilegios elevados, recopilará los seguimientos de WPP en IddCx en el archivo 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

Control de lo que se captura

El parámetro Flags de logman.exe (0x4f4 en este caso) controla los mensajes de WPP que registra IddCx. El significado de las Flags ha cambiado en la versión 19041 de Windows y en posteriores.

Marcas que significan para la compilación 19041 de Windows y versiones posteriores

El parámetro Flags es un campo de bits, donde cada bit controla si se captura ese tipo de mensaje.

Bit de flags Tipo de mensaje capturado
0x001 No usado
0x002 No usado
0x004 Errores
0x008 Errores leves, por ejemplo, cuando se habilitan las superposiciones de depuración sin crear D3D11_CREATE_DEVICE_BGRA_SUPPORT
0x010 Objetos IddCx
0x020 El marco de UMDF realiza llamadas a IddCx
0x040 Llamadas de DDI de IddCx al controlador
0x080 Llamadas de baja frecuencia del controlador a IddCx
0x100 Llamadas relacionadas con fotogramas de alta frecuencia del controlador a IddCx
0x200 Llamadas relacionadas con cursores de alta frecuencia del controlador a IddCx
0x400 Llamadas de kernel a IddCx
0x800 Llamadas de IddCx al kernel

Lo más recomendable es registrar 0x0f4 como punto de partida. Si desea ver información por fotograma, 0x1f4 es un buen punto de partida.

Significado de las flags antes de la versión 19041 de Windows

Las flags se contemplaban por niveles. Cada nivel superior añadía un nuevo tipo de mensaje junto con todos los mensajes de los niveles anteriores.

Valor de nivel de flags Tipo de mensaje capturado
1 No se usa
2 Errores
3 Advertencias
4 Información
5 Verbose

Descodificación de seguimiento de WPP en IddCx

Al igual que todos los seguimientos de WPP, la información de WPP se almacena en archivos pdb. Por lo tanto, es necesario acceder a los archivos pdb con esa información para decodificar. A partir de la compilación 19560 de Windows, el iddCx.pdb en el servidor de símbolos públicos contiene la información de WPP necesaria para descodificar mensajes de WPP. Antes de la versión 19560 de Windows, el IddCx.pdb en el servidor de símbolos públicos no* contenía la información de WPP necesaria para habilitar la descodificación de WPP.

Cualquiera de las herramientas de descodificación de WPP estándar se puede usar para descodificar y mostrar los mensajes.

Depuración de errores de IddCx

Al desarrollar un IDD, a menudo resulta útil obtener información adicional cuando IddCx detecta un error. Tal como se ha explicado anteriormente, puede configurar IddCx para que entre en el depurador al detectar un error, pero también sirve para mostrar el mensaje de error de IddCx en los mensajes de seguimiento más recientes y así conocer el contexto del error.

En la sección anterior, puede habilitar el seguimiento de WPP mediante logman.exe y con la siguiente información se muestra el búfer de WPP en memoria en el depurador del kernel en el momento del error.

Nota

Para que funcione, debe usar un depurador de kernel (no un depurador en modo de usuario) y Windows la compilación 19560 o posterior para que el depurador obtenga el IddCx.pdb que contiene la información de descodificación de WPP.

En el ejemplo siguiente, un IDD llama a IddCxMonitorArrival. Como parte del procesamiento, IddCx llama al DDI EvtIddCxMonitorQueryTargetModes del controlador. En este ejemplo, el controlador devolvió un modo con DISPLAYCONFIG_VIDEO_SIGNAL_INFO. AdditionalSignalInfo.vSyncFreqDivider establecido en cero que no es válido y produce un error.

Esta es una lista de los comandos del depurador que se utilizan:

Get-Help Significado
!wmitrace.bufdump Aquí figuran todos los búferes de registro junto con el nombre; IddCx es el nombre del nuestro, que procede de la línea de comandos logman.exe.
!wmitrace.logdump LogBufferName Descodifica y muestra el contenido del búfer de registro especificado, que es IddCx en el ejemplo siguiente.

Este es el resultado del depurador para este ejemplo:

0: kd> !wmitrace.bufdump
(WmiTrace) BufDump
    LoggerContext Array @ 0xFFFFE6055EB0AC40 [64 Elements]

 Logger Context  Number Available   Size    NPP Usage   PP Usage
================ ====== ========= ======== =========== ==========
ffffe6055ee6c800      4         2     4096       16384             Circular Kernel Context Logger
ffffe6055eaa8640      2         2    65536      131072             Eventlog-Security
ffffe6055eb83a00      2         1    65536      131072             DefenderApiLogger
ffffe6055ebb6a00      2         2    65536      131072             DefenderAuditLogger
ffffe6055eb74040      2         1    16384       32768             DiagLog
ffffe6055eb74640      4         2    65536      262144             Diagtrack-Listener
ffffe6055eaa8040      2         2    65536                 131072  EventLog-Application
ffffe6055eb7c040      2         1    65536      131072             EventLog-System
ffffe6055eb7c640      5         3    65536      327680             LwtNetLog
ffffe6055eb85040      4         2    65536      262144             Microsoft-Windows-Rdp-Graphics-RdpIdd-Trace
ffffe6055eb85680      8         6   131072     1048576             NetCore
ffffe6055eb89040      4         4     4096       16384             NtfsLog
ffffe6055eb89640      8         6   131072     1048576             RadioMgr
ffffe605683ef040      3         2     4096                  12288  WindowsUpdate_trace_log
ffffe6055eb8f640      2         2     2048        4096             UBPM
ffffe6055eb108c0      4         2    16384       65536             WdiContextLog
ffffe6055eb968c0      4         2    81920      327680             WiFiSession
ffffe60567e8a6c0      5         3     8192       40960             IddCx
ffffe605658379c0     10         9     3072       30720             umstartup
ffffe605659d4840     10         9   131072     1310720             SCM
ffffe605655af9c0      2         1    65536      131072             UserNotPresentTraceSession
ffffe605659d6840      2         1     4096        8192             COM
ffffe60565925080     10         8    20480      204800             Terminal-Services-LSM
ffffe60565956080     10         9    20480      204800             Terminal-Services-RCM
ffffe6055eba39c0     50        49     3072      153600             UserMgr
ffffe60567388280      2         2    32768       65536             WFP-IPsec Diagnostics
ffffe605678a3040      5         3     4096       20480             MpWppTracing-20200424-092923-00000003-ffffffff
ffffe60567e35080      2         1    65536      131072             ScreenOnPowerStudyTraceSession
ffffe605655e0a00      5         3     4096       20480             SHS-04242020-092951-7-7f
ffffe605692054c0      4         4     8192       32768             RdpIdd
ffffe60567f597c0      4         3    65536      262144             SgrmEtwSession
ffffe605678a9a00      4         4     8192       32768             DispBrok-DeskSrv
ffffe60569286680      4         4     8192       32768             DispBrok-Desk
ffffe605668026c0      4         4     8192       32768             DispBrok
================ ====== ========= ======== =========== ==========
                    195       159             6651904     143360

0: kd> !wmitrace.logdump IddCx
(WmiTrace) LogDump for Logger Id 0x13
Found Buffers: 5 Messages: 537, sorting entries
[1]0EF8.0CF0::04/24/2020-09:43:36.894 [cx][IddCx]DriverEntry: Enter
[1]0EF8.0CF0::04/24/2020-09:43:36.897 [cx][IddCx]?IddCxLibraryInitialize@@YAJXZ: Enter
[1]0EF8.0CF0::04/24/2020-09:43:36.897 [cx][IddCx]?IddCxLibraryInitialize@@YAJXZ: Exit
[1]0EF8.0CF0::04/24/2020-09:43:36.897 [cx][IddCx]DriverEntry: Exit, status=STATUS_SUCCESS
[0]0EF8.0CF0::04/24/2020-09:43:36.904 [cx][IddCx]?IddCxLibraryBindClient@@YAJPEAU_WDF_CLASS_BIND_INFO@@PEAPEAX@Z: Enter
[0]0EF8.0CF0::04/24/2020-09:43:36.904 [cx][IddCx]?IddCxLibraryBindClient@@YAJPEAU_WDF_CLASS_BIND_INFO@@PEAPEAX@Z: Exit, status=STATUS_SUCCESS
[0]0EF8.0CF0::04/24/2020-09:43:36.910 [cx][IddCx]IddCxImplDeviceInitConfig: Enter
[0]0EF8.0CF0::04/24/2020-09:43:36.910 [cx][IddCx]IddCxImplDeviceInitConfig: Exit, status=STATUS_SUCCESS
[0]0EF8.0CF0::04/24/2020-09:43:36.910 [cx][IddCx]IddCxImplGetVersion: Enter
[0]0EF8.0CF0::04/24/2020-09:43:36.910 [cx][IddCx]IddCxImplGetVersion: Exit, status=STATUS_SUCCESS
[0]0EF8.0CF0::04/24/2020-09:43:36.911 [cx][IddCx]IddCxImplDeviceInitialize: Enter
[0]0EF8.0CF0::04/24/2020-09:43:36.912 [cx][IddCx]IddCxImplDeviceInitialize: New IddDevice 0x000001642F5E0770 created
[0]0EF8.0CF0::04/24/2020-09:43:36.912 [cx][IddCx]IddCxImplDeviceInitialize: Exit, status=STATUS_SUCCESS
[0]0EF8.0CF0::04/24/2020-09:43:36.917 [cx][IddCx]IddCxImplAdapterInitAsync: Enter
[0]0EF8.0CF0::04/24/2020-09:43:36.917 [cx][IddCx]?Init@IddAdapter@@QEAAXPEAUIDDCX_ADAPTER__@@PEAVIddDevice@@PEAUIDDCX_ADAPTER_CAPS@@@Z: New IddAdapter 0x000001642F5E77D0 created, API object 0xFFFFFE9BD0A18978, IddDevice 0x000001642F5E0770
[0]0EF8.0CF0::04/24/2020-09:43:36.917 [cx][IddCx]?SendUserModeMessage@IddAdapter@@QEAAJIPEAXI0W4DXGK_IDD_ESCAPE_CODE@@PEAI@Z: Sending escape 0x0 to kernel
Unknown( 76): GUID=ac5ec775-ccdb-3c2c-6150-28b4eacacbc4 (No Format Information found).
[0]0EF8.0CF0::04/24/2020-09:43:36.917 [cx][IddCx]IddCxImplAdapterInitAsync: Exit, status=STATUS_SUCCESS
[0]0EF8.0558::04/24/2020-09:43:36.935 [cx][IddCx]?HandleKernelModeMessage@IddAdapter@@QEAAXIPEAXI0PEAI@Z: IddAdapter 0x000001642F5E77D0, processing command START_ADAPTER_COMPLETE from KMD
[0]0EF8.0558::04/24/2020-09:43:36.935 [cx][IddCx]?HandleKernelModeMessage@IddAdapter@@QEAAXIPEAXI0PEAI@Z: IddAdapter 0x000001642F5E77D0, Successful adapter start, Wddm Luid = 0xe6e90, Adapter caps 0x0, Session Id 0, Terminal Luid 0x0
[0]0EF8.0558::04/24/2020-09:43:36.935 [cx][IddCx]?HandleKernelModeMessage@IddAdapter@@QEAAXIPEAXI0PEAI@Z: Exit
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]<lambda_e42696d61f3ea0fd0d39fdb90d856b7b>::operator(): DDI: Calling EvtIddCxAdapterInitFinished DDI, IddAdapter 0xFFFFFE9BD0A18978
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]IddCxImplMonitorCreate: Enter
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]IddCxImplMonitorCreate: New IddMonitor 0x000001642F5EF720 created, API object 0xFFFFFE9BD0A11A38, IddAdapter 0x000001642F5E77D0
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]IddCxImplMonitorCreate: Exit, status=STATUS_SUCCESS
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]IddCxImplMonitorArrival: Enter
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?ParseMonitorDescription@IddDevice@@QEAAXUIDDCX_MONITOR_DESCRIPTION@@AEAV?$vector@UIDDCX_MONITOR_MODE@@V?$allocator@UIDDCX_MONITOR_MODE@@@std@@@std@@AEAI@Z: DDI: Calling EvtIddCxParseMonitorDescriptio DDI to get mode count, Device 0x000001642F5E0770
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?ParseMonitorDescription@IddDevice@@QEAAXUIDDCX_MONITOR_DESCRIPTION@@AEAV?$vector@UIDDCX_MONITOR_MODE@@V?$allocator@UIDDCX_MONITOR_MODE@@@std@@@std@@AEAI@Z: DDI: Return successfully from EvtIddCxParseMonitorDescriptio DDI to get mode count, mode count 23
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?ParseMonitorDescription@IddDevice@@QEAAXUIDDCX_MONITOR_DESCRIPTION@@AEAV?$vector@UIDDCX_MONITOR_MODE@@V?$allocator@UIDDCX_MONITOR_MODE@@@std@@@std@@AEAI@Z: DDI: Calling EvtIddCxParseMonitorDescriptio DDI to get modes, Device 0x000001642F5E0770
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?ParseMonitorDescription@IddDevice@@QEAAXUIDDCX_MONITOR_DESCRIPTION@@AEAV?$vector@UIDDCX_MONITOR_MODE@@V?$allocator@UIDDCX_MONITOR_MODE@@@std@@@std@@AEAI@Z: DDI: Return successfully from EvtIddCxParseMonitorDescriptio DDI to get modes
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?AddMonitorModes@IddMonitor@@AEAAXAEAV?$vector@UTARGET_MONITOR_MODE@@V?$allocator@UTARGET_MONITOR_MODE@@@std@@@std@@@Z: IddMonitor 0x000001642F5EF720, parseMonitorDescription returned 23 modes.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?QueryModes@IddMonitor@@AEAAXAEAV?$vector@UIDDCX_TARGET_MODE@@V?$allocator@UIDDCX_TARGET_MODE@@@std@@@std@@@Z: DDI: Calling EvtIddCxMonitorQueryTargetModes DDI for mode count, IddMonitor 0x000001642F5EF720
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?QueryModes@IddMonitor@@AEAAXAEAV?$vector@UIDDCX_TARGET_MODE@@V?$allocator@UIDDCX_TARGET_MODE@@@std@@@std@@@Z: DDI: Return successfully from EvtIddCxMonitorQueryTargetModes DDI, mode count = 0x23
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?QueryModes@IddMonitor@@AEAAXAEAV?$vector@UIDDCX_TARGET_MODE@@V?$allocator@UIDDCX_TARGET_MODE@@@std@@@std@@@Z: DDI: Calling EvtIddCxMonitorQueryTargetModes DDI to get modes, IddMonitor 0x000001642F5EF720
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?QueryModes@IddMonitor@@AEAAXAEAV?$vector@UIDDCX_TARGET_MODE@@V?$allocator@UIDDCX_TARGET_MODE@@@std@@@std@@@Z: DDI: Return successfully from EvtIddCxMonitorQueryTargetModes DDI
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?AddTargetModes@IddMonitor@@AEAAXAEAV?$vector@UTARGET_MONITOR_MODE@@V?$allocator@UTARGET_MONITOR_MODE@@@std@@@std@@@Z: IddMonitor 0x000001642F5EF720, queryTargetModes returned 23 modes.
[0]0EF8.1588::04/24/2020-09:43:55.341 [cx][IddCx] Throwing error (Status 0xc000000d(STATUS_INVALID_PARAMETER)) from function Validate in onecoreuap\windows\core\dxkernel\indirectdisplays\classext\cx\ddivalidation.cpp:412, Msg DISPLAYCONFIG_VIDEO_SIGNAL_INFO.AdditionalSignalInfo.vSyncFreqDivider cannot be zero for target mode
Total of 537 Messages from 5 Buffers

La última línea proporciona el motivo del error.

Funcionalidad de depuración de captura de pantalla indirecta

A partir de la versión 25164 de Windows, IddCx tiene la capacidad de volcar el fotograma de escritorio que IddCx pasa al controlador. Esta funcionalidad se puede usar para depurar problemas visuales. Se puede combinar con las superposiciones de depuración, como el sombreado de regiones sucias de un fotograma.

IddCx busca, en cada fotograma, cambios en la configuración del registro de depuración para la captura de fotogramas. Por lo tanto, hay un valor de control maestro en IddCxDebugCtrl que controla este comportamiento. Esta configuración garantiza que no haya ninguna penalización de rendimiento cuando esté deshabilitada.

Nota

Esta funcionalidad está deshabilitada cuando la interfaz de OPM está activa para el controlador.

Valores del Registro que controlan la captura

Los siguientes valores del Registro se encuentran en HKLM\System\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture. Esta carpeta del Registro debe crearse antes de establecer el valor IddCxDebugCtrl.

Nombre Valor predeterminado si no está disponible Significado
TriggerUniqueness 0 Cuando se llama a cada cadena de intercambio IddCx para adquirir un nuevo marco, leerá este valor. Si TriggerUniqueness es distinto de cero y diferente del valor leído anteriormente, se leerán los valores siguientes y se habilitará la captura de fotogramas.
TargetMask 0xffff Máscara de bits, un bit para cada índice de destino en el adaptador que controla si la cadena de intercambio de ese destino debe formar parte de esta secuencia de captura.
CaptureCount 10 Número de fotogramas que cada cadena de intercambio IddCx habilitada para captura debe capturar.
SkipFrames 0 Número de fotogramas que se van a omitir entre cada fotograma capturado.
CaptureSessionID 0 Sesión en la que se habilitará la captura de fotogramas. El valor de cero siempre significa la sesión de la consola.
ScaleFactor 100 Controla el factor de escala usado para decidir cuáles son las dimensiones del archivo capturado, valores válidos 1-100
CaptureFolder c:\IddCxImages Carpeta donde se escribirán los archivos de captura. Se creará una carpeta c:\IddCxImages si no existe.

Los parámetros de captura se almacenan por destino, lo que permite que una sesión de captura abarque un cambio de modo en un destino determinado.

Si se detecta un nuevo valor distinto de cero TriggerUniqueness mientras un objeto de monitor sigue capturando fotogramas de una captura anterior, se detendrá la captura actual y comenzará la recién activada.

Uso de archivos REG para controlar la captura de fotogramas

Los archivos REG son una buena manera de controlar las capturas de fotogramas. Un archivo puede establecer los valores iniciales y otro puede actualizar TriggerUniqueness.

Archivo REG para establecer valores iniciales

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

Archivo REG para actualizar TriggerUniqueness

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"TriggerUniqueness"=dword:1

Nombre y formato de archivo

Los marcos capturados están en formato de archivo PNG con el siguiente formato de nombre de archivo:

S<ID de sesión, cero para consola>_Ad<Valor hexadecimal de LUID de adaptador de ID>_T<Valor hexadecimal de Idx de destino de ID>_Frame<Número de fotograma de IDDCX_METADATA.PresentationFrameNumber>_<Fecha en formato mm/dd/aa>_<Hora en hh/mm/ss>.png

A continuación se muestran algunos nombres de archivo de ejemplo:

  • S0_Ad8ade_T3_Frame2343_020422_173434.png
  • S0_Ad8ade_T3_Frame2344_020422_173434.png
  • S0_Ad8ade_T3_Frame2345_020422_173435.png

Registro del WPP

En cada nueva sesión de captura que se inicie, se registrarán mensajes de WPP por cada valor leído del registro o establecido por defecto.

Cada vez que se captura y se escribe un fotograma en un archivo, IddCx agrega un mensaje WPP que contiene el nombre de archivo completo de la imagen.

Configuración de captura de ejemplo

Captura de fotogramas desde el momento en que un monitor está conectado por primera vez

A continuación se muestran los valores del Registro necesarios para capturar los primeros 20 fotogramas de cuando se conecta por primera vez cualquier monitor, seguido del archivo REG.

Entrada del Registro Valor Notas
CaptureCount 20 Establecer 20 fotogramas en lugar de los 10 predeterminados
TriggerUniqueness 1 Cualquier valor distinto de cero funciona siempre que el objeto de destino comience con cero para garantizar la unicidad del almacenamiento.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"CaptureCount"=dword:00000014
"TriggerUniqueness"=dword:00000001

Iniciar captura mientras el monitor está activo

Dado que las cadenas de intercambio comprueban si hay un nuevo valor exclusivo cuando el controlador recibe cada fotograma, debe pasar la entrada TriggerUniqueness al final para asegurarse de que se lean todos los parámetros de la forma prevista. En el ejemplo siguiente también se reduce la resolución de archivos para ahorrar espacio y se escriben los archivos de captura en la carpeta c:\frames.

Entrada del Registro Valor Notas
CantidadDeCapturas 100 Establecer 100 fotogramas en lugar de los 10 predeterminados
ScaleFactor 50 Establecer la resolución de 50% para ahorrar espacio
CaptureFolder c:\frames Establecer carpeta de salida
TriggerUniqueness 1 Cualquier valor distinto de cero es válido ya que el objeto de destino comienza con un valor cero, indicando la unicidad del almacén.
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

Capturar 10 fotogramas del segundo destino en la sesión remota 3 con 5 fotogramas entre cada captura

Esta captura también usa la superposición de depuración para resaltar las regiones sucias de cada uno de los fotogramas.

Entrada del Registro Valor Notas
IddCxDebugCtrl También se usa el bit 0x0400 0x0400 permite que se resalten las regiones sucias y también se deben usar los bits 0x2200.
CaptureSessionID 3 Habilita la captura en la sesión remota 3
TargetMask 0x2 Bit 1 corresponde al Idx 1 de destino
OmitirCuadros 5 Omitir la captura de cinco fotogramas entre cada captura
TriggerUniqueness 1 Cualquier valor distinto de cero funciona siempre que el objeto de destino comience con cero como identificador único.
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