Отладка драйверов непрямого отображения
Драйверы непрямых дисплеев (IDD) являются драйверами UMDF, поэтому в документации по отладке UMDF, такой как Определение причины, по которой драйвер UMDF не загружается или устройство UMDF не запускается, является хорошей отправной точкой. На этой странице содержатся сведения об отладке, связанные с косвенным отображением.
Элемент управления реестром
Класс eXtension (IccDx) непрямого драйвера отображения имеет некоторые параметры реестра, которые можно использовать для отладки идентификаторов. Все значения реестра находятся в разделе реестра HKLM\System\CurrentControlSet\Control\GraphicsDrivers .
Имя значения | Сведения |
---|---|
TerminateIndirectOnStall | Нулевое значение отключает наблюдатель, который завершает работу драйвера, если он не обрабатывает кадр в течение 10 секунд после того, как кадр станет доступным. Любое другое значение оставляет сторожевой параметр включенным. |
IddCxDebugCtrl | Битовое поле, включающее различные аспекты отладки IddCx. См. таблицу ниже. |
Примечание
Если параметр реестра TerminateIndirectOnStall используется для отключения наблюдателя, HLK-тесты завершатся ошибкой.
Значения IddCxDebugCtrl
Бит в IddCxDebugCtrl | Значение |
---|---|
0x0001 | Войдите в отладчик, когда IddCx обнаруживает ошибку |
0x0002 | Переход к отладчику при загрузке IddCx |
0x0004 | Прерывание использования отладчика при выгрузке IddCx |
0x0008 | Войдите в отладчик при вызове IddCx DriverEntry |
0x0010 | Прерывание использования отладчика при вызове привязки драйвера |
0x0020 | Прерывание работы отладчика при вызове запуска драйвера |
0x0040 | Прерывание использования отладчика при вызове отмены привязки драйвера |
0x0080 | Отключает функцию наблюдения DDI, которая завершает работу драйвера, занимает слишком много времени в вызове DDI. |
0x0100 | Не используется |
0x0200 | Включение наложения отладки см. ниже |
0x0400 | Наложение цветного альфа-поля на грязное прямоугольника в рамке; требуется, чтобы 0x0200 было задано |
0x0800 | Наложение предварительной статистики в кадр |
0x2000 | IddCx будет запрашивать значения реестра кадра записи каждого кадра; требуется задать 0x0200 |
Примечание
Для работы любой из функций наложения устройство Direct3D, созданное драйвером и переданное в IddCxSwapChainSetDevice , должно быть создано с флагом D3D11_CREATE_DEVICE_BGRA_SUPPORT .
Трассировки WPP IddCx
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
Управление тем, что захватывается
Параметр Flags logman.exe (0x4f4 в данном случае) управляет тем, какие сообщения WPP регистрирует IddCx. Значение этого значения изменилось в сборке Windows 19041 и более поздних версий.
Флаги для сборки Windows 19041 и более поздних версий
Флаги — это битовое поле, где каждый бит определяет, записывается ли сообщение этого типа.
Бит флагов | Захваченный тип сообщения |
---|---|
0x001 | Не используется |
0x002 | Не используется |
0x004 | ошибки |
0x008 | Неопасные ошибки, например, если наложение отладки включено без D3D11_CREATE_DEVICE_BGRA_SUPPORT задано |
0x010 | Объекты IddCx |
0x020 | Вызовы платформы UMDF в IddCx |
0x040 | Вызовы DDI из IddCx в драйвер |
0x080 | Низкочастотные вызовы от драйвера к IddCx |
0x100 | Вызовы, связанные с высокочастотным кадром, от драйвера к IddCx |
0x200 | Высокочастотные вызовы, связанные с курсором, от драйвера к IddCx |
0x400 | Вызовы из ядра в IddCx |
0x800 | Вызовы из IddCx в ядро |
Нормальный сценарий ведения журнала 0x0f4 является хорошей отправной точкой. Если вы хотите просмотреть сведения о кадре, 0x1f4 является хорошей отправной точкой.
Флаги, означающее до сборки Windows 19041
Флаги рассматривались как уровень, каждый увеличивающийся уровень добавлял новый тип сообщения вместе со всеми сообщениями из предыдущих уровней.
Значение уровня флагов | Захваченный тип сообщения |
---|---|
1 | Не используется |
2 | ошибки |
3 | Предупреждения |
4 | Сведения |
5 | Подробный |
Декодирование трассировки IDdCx WPP
Как и все трассировки WPP, данные WPP хранятся в PDB-файлах , поэтому для декодирования необходим доступ к PDB-файламс этой информацией. Начиная со сборки Windows 19560 , iddCx.pdb на сервере открытых символов содержит сведения WPP, необходимые для декодирования сообщений WPP. До сборки Windows 19560 iddCx.pdb на сервере открытых символов не содержал необходимых сведений WPP для включения декодирования WPP.
Для декодирования и отображения сообщений можно использовать любые стандартные средства декодирования WPP.
Ошибки отладки IddCx
При разработке драйвера косвенного отображения часто полезно получить дополнительные сведения, когда IddCx обнаруживает ошибку. Как описано выше, вы можете настроить IddCx для прерывания работы отладчика, когда IddCx обнаруживает ошибку, но также полезно отобразить сообщение об ошибке IddCx в последних нескольких сообщениях трассировки, чтобы понять контекст ошибки.
В приведенном выше разделе вы можете включить трассировку WPP с помощью logman.exe и со следующими сведениями отобразить буфер WPP в памяти в отладчике ядра в точке сбоя.
Примечание
Для этого необходимо использовать отладчик ядра (не отладчик пользовательского режима) и windows сборки 19560 или более поздней версии, чтобы отладчик мог получить iddCx.pdb , содержащий сведения о декодирования WPP.
В приведенном ниже примере драйвер косвенного отображения вызывает IddCxMonitorArrival. В рамках обработки IddCx вызывает драйвер EvtIddCxMonitorQueryTargetModes DDI. В этом примере драйвер вернул режим с DISPLAYCONFIG_VIDEO_SIGNAL_INFO. Параметр AdditionalSignalInfo.vSyncFreqDivider имеет значение 0, что является недопустимым и вызывает ошибку.
Ниже приведен список используемых команд отладчика:
Get-Help | Значение |
---|---|
!wmitrace.bufdump | Перечисление всех буферов ведения журнала вместе с именем, IddCx — это имя нашего, происходит из командной строки logman.exe |
!wmitrace.logdump LogBufferName | Декодирует и отображает содержимое указанного буфера ведения журнала, который является IddCx в приведенном ниже примере. |
Ниже приведены выходные данные отладчика для этого примера:
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
Последняя строка указывает причину сбоя.
Функции отладки непрямого отображения снимка экрана
Начиная со сборки Windows 25164, IddCx имеет возможность дампа кадра рабочего стола, который IddCx передает драйверу. Эту функцию можно использовать для отладки визуальных проблем. Его можно сочетать с отладочными наложениями, такими как заливка грязное областях кадра.
Так как IddCx будет искать изменения в параметре реестра отладки для захвата кадра на каждом кадре, в IddCxDebugCtrl есть значение элемента управления master, которое определяет, будет ли IddCx проверка значение реестра записи для каждого кадра. Это гарантирует отсутствие снижения производительности при отключении.
Примечание
Эта функция отключается, если интерфейс OPM активен для драйвера.
Значения реестра, управляющие записью
Следующие значения реестра находятся в HKLM\System\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture. Эта папка реестра должна быть создана до установки значения IddCxDebugCtrl.
Имя | Значение по умолчанию, если отсутствует | Значение |
---|---|---|
TriggerUniqueness | 0 | При вызове каждой цепочки буферов IddCx для получения нового кадра он считывает это значение. Если значение TriggerUniqueness не равно нулю и отличается от ранее прочитанного значения, то приведенные ниже значения будут считываться, а запись кадра будет включена. |
Целевая маска | 0xffff | Битовая маска— по одному биту для каждого целевого индекса на адаптере, который определяет, должна ли цепочка буферов для этого целевого объекта быть частью этой последовательности захвата. |
CaptureCount | 10 | Количество кадров, которые должна захватывать каждая цепочка буферов 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
REG-файл для обновления TriggerUniqueness
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"TriggerUniqueness"=dword:1
Имя и формат файла
Захваченные кадры будут иметь формат PNG-файла со следующим форматом имени файла:
S<Session Id, zero for console>_Ad<Hex value of ID adapter LUID>_T<Hex Value of ID target Idx>_Frame<Frame number from IDDCX_METADATA. PresentationFrameNumber>_<Date в формате> mmddy_<Time в hhmmss>.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, содержащее полное имя файла изображения.
Пример параметра записи
Запись кадров при первом подключении монитора
Ниже приведены значения реестра, необходимые для записи первых 20 кадров при первом подключении любого монитора, за которым следует REG-файл.
Параметр реестра | Значение | Примечания |
---|---|---|
CaptureCount | 20 | Задайте 20 кадров, а не 10 по умолчанию |
TriggerUniqueness | 1 | Любое ненулевое значение будет работать как целевой объект начинается с нуля как уникальность хранилища |
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"CaptureCount"=dword:00000014
"TriggerUniqueness"=dword:00000001
Запуск записи при активном мониторе
Учитывая, что цепочки буферов проверка для нового значения уникальности, когда драйвер получает каждый кадр, следует задать запись 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
Захват 10 кадров из второго целевого объекта в удаленном сеансе 3 с 5 кадрами между ними
В этом захвате также используется отладочное наложение для выделения грязное регионов для каждого кадра.
Параметр реестра | Значение | Примечания |
---|---|---|
IddCxDebugCtrl | Битовое 0x0400 также задано | 0x0400 позволяет выделять грязное области, 0x2200 битами |
CaptureSessionID | 3 | Включает запись в удаленном сеансе 3 |
Целевая маска | 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