Indirect display device 01 что это
Перейти к содержимому

Indirect display device 01 что это

  • автор:

Обзор драйвера непрямого отображения

Модель драйвера непрямого дисплея (IDD) предоставляет простую модель драйвера в пользовательском режиме для поддержки мониторов, которые не подключены к традиционным выводам дисплея GPU. Например, для аппаратного ключа, подключенного к компьютеру через USB с обычным монитором (VGA, DVI, HDMI, DP и т. д.), требуется идентификатор IDD.

Реализация IDD

IdD — это сторонний драйвер UMDF для устройства. IdD разрабатывается с использованием функциональных возможностей, предоставляемых IddCx (класс eXtension непрямого драйвера дисплея) для взаимодействия с графическими подсистемами Windows следующими способами:

  • Создание графического адаптера, представляющего устройство непрямого отображения
  • Мониторы отчетов подключены и отключены от системы
  • Укажите описания подключенных мониторов
  • Предоставление доступных режимов отображения
  • Поддержка других функций отображения, таких как аппаратный курсор мыши, гамма, связь I2C и защищенное содержимое
  • Обработка изображений рабочего стола для отображения на мониторе

Поскольку IDD является драйвером UMDF, он также отвечает за реализацию всех функций UMDF , таких как обмен данными с устройствами, управление питанием, plug and play и т. д.

IdD выполняется в сеансе 0 без каких-либо компонентов, запущенных в сеансе пользователя, поэтому любая нестабильность драйвера не влияет на стабильность системы в целом.

На следующей схеме представлен обзор архитектуры.

Схема, показывающая драйвер непрямого отображения в архитектуре UMDF.

Модель пользовательского режима

IdD — это модель только в пользовательском режиме без поддержки компонентов режима ядра. Таким образом, драйвер может использовать любые API DirectX для обработки образа рабочего стола. На самом деле IddCx предоставляет образ рабочего стола для кодирования в области DirectX.

Драйвер не должен вызывать API пользовательского режима, которые не подходят для использования драйверами, такие как GDI, API оконной обработки, OpenGL или Vulkan.

IdD следует создавать как универсальный драйвер Windows , чтобы его можно было использовать на нескольких платформах Windows.

Во время сборки:

  • IdD UMDF объявляет версию IddCx, для нее была создана.
  • Операционная система гарантирует, что при загрузке драйвера будет загружена правильная версия IddCx.

Соглашения о обратном вызове IddCx и именовании функций

Prefix Тип Примечания
EVT_IDD_CX_XXX Функция обратного вызова IDD IdD реализуют как обратные вызовы IddCx, такие как EVT_IDD_CX_ADAPTER_COMMIT_MODES, так и соответствующие обратные вызовы WDF, такие как EVT_WDF_DEVICE_D0_EXIT.
IddCxXxx Функция Предоставляемые системой функции расширения класса IddCx, которые могут вызывать идентификаторы IDD; например , IddCxAdapterInitAsync.
PFN_IDDCX_XXX Указатели на функции IddCx Идентификаторы не используют эти указатели. Вместо этого драйверы должны использовать эквивалентные функции IddCxXxx .

Образец кода

Корпорация Майкрософт предоставляет пример реализации IDD на сайте GitHub с примерами драйверов Для Windows. В этом примере показано, как подключить монитор, как реагировать на набор режимов и как получать кадры.

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Windows driver documentation

Отладка драйверов непрямого отображения

Драйверы косвенных дисплеев (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 Наложение статистики pref в кадр
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 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]::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-файла со следующим форматом имени файла:

SSession Id, zero for console>_AdHex value of ID adapter LUID>_THex Value of ID target Idx>_FrameFrame 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 

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Windows driver documentation

Windows 10: Controlador Virtual «Indirect display device 01»

Discus and support Controlador Virtual «Indirect display device 01» in Windows 10 Drivers and Hardware to solve the problem; ¿Alguien sabe que es este dispositivo? he indagado un poco y no hay mucha información, pero he visto que es parte de huawei, pero la verdad me da. Discussion in ‘Windows 10 Drivers and Hardware’ started by Alberto Baker, Dec 1, 2022 .

Controlador Virtual «Indirect display device 01»

Controlador Virtual «Indirect display device 01» — Similar Threads — Controlador Virtual Indirect

Controladores Incompatibles

in Windows 10 Gaming

Controladores Incompatibles: Hola buenas, la Seguridad de Windows ya lleva dias diciendome que tengo estos controladores como dañados o que son incompatibles:Y he visto un par de soluciones pero son demasiado complejas, asi que necesito ayuda «rapida» y sencilla porfavor.

Controladores Incompatibles

in Windows 10 Software and Apps

Controladores Incompatibles: Hola buenas, la Seguridad de Windows ya lleva dias diciendome que tengo estos controladores como dañados o que son incompatibles:Y he visto un par de soluciones pero son demasiado complejas, asi que necesito ayuda «rapida» y sencilla porfavor.

Controlador Virtual «Indirect display device 01»

in Windows 10 Gaming

Controlador Virtual «Indirect display device 01»: ¿Alguien sabe que es este dispositivo? he indagado un poco y no hay mucha información, pero he visto que es parte de huawei, pero la verdad me da ansiedad ver eso cada que apago y prendo mi matebookmi dispositivo es un Huawei Matebook D 16.

Controlador Virtual «Indirect display device 01»

in Windows 10 Software and Apps

Controlador Virtual «Indirect display device 01»: ¿Alguien sabe que es este dispositivo? he indagado un poco y no hay mucha información, pero he visto que es parte de huawei, pero la verdad me da ansiedad ver eso cada que apago y prendo mi matebookmi dispositivo es un Huawei Matebook D 16.

controladores incompatibles

in Windows 10 Gaming

controladores incompatibles: alguien sabe a que se debe esto?, como puedo solucionar el problema con el controlador.realmente seria de gran ayuda. https://answers.microsoft.com/en-us/windows/forum/all/controladores-incompatibles/074dbcd9-a753-4a73-a4da-849cf56d7959

controladores incompatibles

in Windows 10 Software and Apps

controladores incompatibles: alguien sabe a que se debe esto?, como puedo solucionar el problema con el controlador.realmente seria de gran ayuda. https://answers.microsoft.com/en-us/windows/forum/all/controladores-incompatibles/074dbcd9-a753-4a73-a4da-849cf56d7959

Is there any way to get display without capturing mouse using IDD Indirect display driver??

in Windows 10 Drivers and Hardware

Is there any way to get display without capturing mouse using IDD Indirect display driver??: Hello.I am now using IDD. https://docs.microsoft.com/en-us/windows-hardware/drivers/display/indirect-display-driver-model-overviewAnd I found I can’t get display data without capturing mouse. Is there any way not capturing mouse? Or please let me know another driver instead.

CONTROLADOR GRAFICA

in Windows 10 BSOD Crashes and Debugging

CONTROLADOR GRAFICA: estas ultimas semanas he estado presentando problemas con el comntrolador de mi grafica. segun me informaron elultimo controlador o los dos ultimos tienen demasiados errores con mi version de windows. Quisiera saber si este problema se puede arreglar o si hay alguna solucion.

Any software to create a virtual display monitor device?

in Windows 10 Ask Insider

Any software to create a virtual display monitor device?: I need a virtual monitor device for my laptop so that I can use Chrome Remote Desktop properly when the laptop’s lid is closed. Now if the lid is closed the Intel Graphic Driver won‘t detect any screen and many program windows won’t be rendered properly . submitted by.

Драйверы на видеокарты Citrix

Драйверы на видеокарты Citrix собраны с официальных сайтов компаний-производителей и других проверенных источников. Официальное ПО от разработчиков поможет исправить ошибки и неполадки в работе техники и устройств видеокарты Citrix. Скачать последние версии драйверов на видеокарты Citrix для Windows 11, 10, 8 и 7 (32-х и 64-битных версий).

Веб-версия DriverHub может содержать не все драверы Citrix. Установите DriverHub, чтобы получить доступ к полной базе драйверов.

Веб-версия DriverHub для Windows
Полный каталог драйверов
Автоматическая установка драйверов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *