Freigeben über


Debuggen von indirekten Anzeigetreibern

Indirekte Displays-Treiber (IDDs) sind UMDF-Treiber, sodass die UMDF-Debugdokumentation, z. B . Ermitteln, warum der UMDF-Treiber nicht geladen werden kann oder das UMDF-Gerät nicht gestartet werden kann, ein guter Ausgangspunkt ist. Diese Seite enthält indirekte anzeigespezifische Debuginformationen.

Registrierungssteuerung

Die Indirekte Anzeigetreiberklasse eXtension (IccDx) verfügt über einige Registrierungseinstellungen, die zum Debuggen von IDDs verwendet werden können. Alle Registrierungswerte befinden sich unter dem Registrierungsschlüssel HKLM\System\CurrentControlSet\Control\GraphicsDrivers .

Wertname Details
TerminateIndirectOnStall Ein Nullwert deaktiviert den Watchdog, der den Treiber beendet, wenn er einen Frame nicht innerhalb von 10 Sekunden verarbeitet, nachdem der Frame verfügbar ist. Jeder andere Wert lässt den Watchdog aktiviert.
IddCxDebugCtrl Bitfeld, das verschiedene Debugaspekte von IddCx aktiviert hat. Siehe Tabelle unten.

Hinweis

Wenn der Registrierungswert TerminateIndirectOnStall verwendet wird, um den Watchdog zu deaktivieren, schlagen HLK-Tests fehl.

IddCxDebugCtrl-Werte

Bit in IddCxDebugCtrl Bedeutung
0x0001 Unterbrechen des Debuggers, wenn IddCx einen Fehler erkennt
0x0002 Unterbrechen des Debuggers beim Laden von IddCx
0x0004 Unterbrechen des Debuggers beim Entladen von IddCx
0x0008 Unterbrechen des Debuggers beim Aufrufen von IddCx DriverEntry
0x0010 Unterbrechen des Debuggers, wenn die Treiberbindung aufgerufen wird
0x0020 Unterbrechen des Debuggers beim Aufrufen des Treiberstarts
0x0040 Unterbrechen des Debuggers, wenn die Bindung des Treibers aufgerufen wird
0x0080 Deaktiviert den DDI-Watchdog, der den Treiber beendet, dauert im DDI-Aufruf zu lange.
0x0100 Nicht verwendet
0x0200 Aktivieren der Debugüberlagerung, siehe unten
0x0400 Farbiges Alphafeld über modifiziert Rects im Rahmen überlagern; erfordert, dass 0x0200 festgelegt werden muss
0x0800 Überlagern von Pref-Statistiken in einen Frame
0x2000 IddCx fragt die Registrierungswerte für den Erfassungsrahmen bei jedem Frame ab. erfordert, dass 0x0200 festgelegt wird.

Hinweis

Damit eine der Überlagerungsfunktionen funktioniert, muss das vom Treiber erstellte und an IddCxSwapChainSetDevice übergebene Direct3D-Gerät mit dem flag D3D11_CREATE_DEVICE_BGRA_SUPPORT erstellt werden.

IddCx-WPP-Ablaufverfolgungen

Iddcx verwendet die WPP-Infrastruktur , um Debuginformationen zu protokollieren. WPP-Informationen können in einer Datei erfasst werden, und während diese Erfassung ausgeführt wird, können sie im Kerneldebugger angezeigt werden.

Erfassen der IddCx-WPP-Ablaufverfolgung

Es gibt mehrere Möglichkeiten, die WPP-Ablaufverfolgung zu aktivieren. Eine bequeme Möglichkeit ist die Verwendung des Build in logman.exe Programm. Wenn Sie die folgende Zeile in eine Batchdatei kopieren und von einer Eingabeaufforderung mit erhöhten Rechten ausführen, werden IddCx-WPP-Ablaufverfolgungen in der Datei IddCx.etl erfasst.

@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

Steuern, was erfasst wird

Der Flags-Parameter von logman.exe (in diesem Fall 0x4f4) steuert, welche WPP-Nachrichten IddCx-Protokolle protokolliert. Der Bedeutungswert hat sich in Windows Build 19041 und höher geändert.

Flags für Windows Build 19041 und höher

Die Flags sind ein Bitfeld, in dem jedes Bit steuert, ob dieser Nachrichtentyp erfasst wird.

Flags-Bit Erfasster Nachrichtentyp
0x001 Nicht verwendet
0x002 Nicht verwendet
0x004 Errors
0x008 Gutartige Fehler, z. B. wenn Debugüberlagerungen aktiviert sind, ohne dass D3D11_CREATE_DEVICE_BGRA_SUPPORT festgelegt ist
0x010 IddCx-Objekte
0x020 UMDF-Framework ruft IddCx auf
0x040 DDI ruft von IddCx an den Treiber auf.
0x080 Niedrigfrequenzaufrufe vom Treiber an IddCx
0x100 Hochfrequenz-Frame-bezogene Aufrufe vom Treiber an IddCx
0x200 Hochfrequenzcursor-bezogene Aufrufe vom Treiber an IddCx
0x400 Aufrufe vom Kernel an IddCx
0x800 Aufrufe von IddCx an den Kernel

Ein normales Protokollierungsszenario mit 0x0f4 ist ein guter Ausgangspunkt. Wenn Sie Informationen pro Frame anzeigen möchten, ist 0x1f4 ein guter Ausgangspunkt.

Flags, die vor Windows Build 19041 bedeuten

Flags wurden als Ebene behandelt, wobei jede steigende Ebene einen neuen Nachrichtentyp zusammen mit allen Nachrichten aus den vorherigen Ebenen hinzugefügt hat.

Wert der Flags-Ebene Erfasster Nachrichtentyp
1 Nicht verwendet
2 Errors
3 Warnungen
4 Information
5 Ausführlich

Decodierung der IddCx-WPP-Ablaufverfolgung

Wie alle WPP-Ablaufverfolgungen werden die WPP-Informationen in PDB-Dateien gespeichert, sodass der Zugriff auf pdbs mit diesen Informationen erforderlich ist, um zu decodieren. Ab Windows Build 19560 enthält iddCx.pdb auf dem öffentlichen Symbolserver die zum Decodieren von WPP-Nachrichten erforderlichen WPP-Informationen. Vor Windows Build 19560 enthält iddCx.pdb auf dem öffentlichen Symbolserver nicht die erforderlichen WPP-Informationen, um die WPP-Decodierung zu aktivieren.

Jedes der standardmäßigen WPP-Decodierungstools kann zum Decodieren und Anzeigen der Meldungen verwendet werden.

Debuggen von IddCx-Fehlern

Bei der Entwicklung eines Indirekten Anzeigetreibers ist es häufig hilfreich, zusätzliche Informationen zu erhalten, wenn IddCx einen Fehler erkennt. Wie oben beschrieben, können Sie IddCx so konfigurieren, dass der Debugger unterbrochen wird, wenn IddCx einen Fehler erkennt. Es ist jedoch auch hilfreich, die IddCx-Fehlermeldung in den letzten Ablaufverfolgungsmeldungen anzuzeigen, um den Kontext des Fehlers zu verstehen.

Mithilfe des obigen Abschnitts können Sie die WPP-Ablaufverfolgung mithilfe vonlogman.exe aktivieren und mit den folgenden Informationen den In-Memory-WPP-Puffer im Kerneldebugger zum Zeitpunkt des Fehlers anzeigen.

Hinweis

Damit dies funktioniert, müssen Sie einen Kerneldebugger (nicht den Benutzermodusdebugger) und Windows-Build 19560 oder höher verwenden, damit der Debugger iddCx.pdb erhält, die die WPP-Decodierungsinformationen enthält.

Im folgenden Beispiel ruft ein Indirekter Anzeigetreiber IddCxMonitorArrival auf. Im Rahmen der Verarbeitung ruft IddCx die EvtIddCxMonitorQueryTargetModes-DDI des Treibers auf. In diesem Beispiel hat der Treiber einen Modus mit DISPLAYCONFIG_VIDEO_SIGNAL_INFO zurückgegeben. AdditionalSignalInfo.vSyncFreqDivider auf null festgelegt, was ungültig ist und einen Fehler verursacht.

Im Folgenden finden Sie eine Liste der verwendeten Debuggerbefehle:

Get-Help Bedeutung
!wmitrace.bufdump Listen Sie den gesamten Protokollierungspuffer zusammen mit dem Namen auf. IddCx ist der Name von uns, stammt aus der logman.exe Befehlszeile.
!wmitrace.logdump LogBufferName Decodiert und zeigt den Inhalt des angegebenen Protokollierungspuffers an, der im folgenden Beispiel iddCx ist.

Hier sehen Sie die Debuggerausgabe für dieses Beispiel:

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

Die letzte Zeile gibt den Grund für den Fehler an.

Debugfunktionen für die bildschirmerfassung indirekte Anzeige

Ab Windows Build 25164 hat IddCx die Möglichkeit, den Desktopframe, den IddCx an den Treiber übergibt, abzuspeichern. Diese Funktionalität kann zum Debuggen von visuellen Problemen verwendet werden. Es kann mit den Debugüberlagerungen wie Schattierung modifiziert Bereichen eines Frames kombiniert werden.

Da IddCx nach Änderungen in der Debugregistrierungseinstellung für die Frameerfassung für jeden Frame sucht, gibt es in IddCxDebugCtrl einen master Steuerelementwert, der steuert, ob IddCx den Erfassungsregistrierungswert für jeden Frame überprüft. Dadurch wird sichergestellt, dass bei der Deaktivierung keine Leistungseinbußen auftreten.

Hinweis

Diese Funktionalität ist deaktiviert, wenn die OPM-Schnittstelle für den Treiber aktiv ist.

Registrierungswerte, die die Erfassung steuern

Die folgenden Registrierungswerte befinden sich in HKLM\System\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture. Dieser Registrierungsordner sollte erstellt werden, bevor der IddCxDebugCtrl-Wert festgelegt wird.

Name Standard, wenn fehlt Bedeutung
TriggerUniqueness 0 Wenn jede IddCx-Swapchain aufgerufen wird, um einen neuen Frame zu erhalten, liest sie diesen Wert. Wenn TriggerUniqueness ungleich 0 ist und sich vom zuvor gelesenen Wert unterscheidet, werden die folgenden Werte gelesen, und die Frameerfassung wird aktiviert.
TargetMask 0xffff Bitmaske, ein Bit für jeden Zielindex auf dem Adapter, der steuert, ob die Swapchain für dieses Ziel Teil dieser Erfassungssequenz sein soll.
CaptureCount 10 Anzahl der Frames, die jede IddCx-Swapchain für enabled-for-capture erfassen soll.
SkipFrames 0 Anzahl der Frames, die zwischen den einzelnen erfassten Frames übersprungen werden sollen.
CaptureSessionID 0 Die Sitzung, in der die Frameerfassung aktiviert wird. Der Wert 0 (null) bedeutet immer die Konsolensitzung.
ScaleFactor 100 Steuert den Skalierungsfaktor, der verwendet wird, um zu entscheiden, welche Dimensionen der erfassten Datei, gültige Werte 1-100
CaptureFolder c:\IddCxImages Ordner, in den Aufzeichnungsdateien geschrieben werden. Wenn er nicht vorhanden ist, wird ein Ordner c:\IddCxImages erstellt.

Die Erfassungsparameter werden pro Ziel gespeichert, sodass eine Aufzeichnungssitzung eine Modusänderung auf einem bestimmten Ziel umfassen kann.

Wenn ein neuer TriggerUniqueness-Wert ungleich 0 (null) erkannt wird, während ein Monitorobjekt noch Frames aus einer vorherigen Erfassung erfasst, wird die aktuelle Erfassung beendet und die neu ausgelöste Aufzeichnung gestartet.

Verwenden von REG-Dateien zum Steuern der Frameaufnahme

REG-Dateien sind eine gute Möglichkeit, die Frameerfassungen zu steuern. Eine Datei kann die Anfangswerte festlegen, und eine andere kann TriggerUniqueness aktualisieren.

REG-Datei zum Festlegen von Anfangswerten

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-Datei zum Aktualisieren von TriggerUniqueness

Windows Registry Editor Version 5.00

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

Dateiname und Format

Die erfassten Frames haben das PNG-Dateiformat mit dem folgenden Dateinamenformat:

S-Sitzungs-ID<, Null für Konsole>_Ad<Hex-Wert des ID-Adapters LUID>_T<Hex-Wert des ID-Ziels Idx>_Frame<Framenummer von IDDCX_METADATA. PresentationFrameNumber>_<Date in mmddyy format>_<Time in hhmmss>.png

Im Folgenden finden Sie einige Beispieldateinamen:

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

WPP-Protokollierung

Für jede neue Erfassungssitzung, die gestartet wird, werden WPP-Meldungen für jeden Wert protokolliert, der aus der Registrierung eingelesen oder standardmäßig festgelegt wird.

Jedes Mal, wenn ein Frame erfasst und in eine Datei geschrieben wird, fügt IddCx eine WPP-Nachricht hinzu, die den vollständigen Dateinamen der Bilddatei enthält.

Beispielerfassungseinstellung

Erfassen von Frames ab dem Zeitpunkt, an dem ein Monitor zum ersten Mal verbunden ist

Im Folgenden werden die Registrierungswerte aufgeführt, die zum Erfassen der ersten 20 Frames erforderlich sind, wenn ein Monitor zum ersten Mal angeschlossen ist, gefolgt von der REG-Datei.

Registrierungseintrag Wert Hinweise
CaptureCount 20 Festlegen von 20 Frames anstelle der Standardmäßigen 10
TriggerUniqueness 1 Jeder Nicht-Null-Wert funktioniert, wenn das Zielobjekt mit 0 beginnt, da der Speicher eindeutig ist.
Windows Registry Editor Version 5.00

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

Starten der Erfassung, während der Monitor aktiv ist

Da die Swapchains nach einem neuen Eindeutigkeitswert suchen, wenn der Treiber jeden Frame abruft, sollten Sie den TriggerUniqueness-Eintrag zuletzt festlegen, um sicherzustellen, dass alle Parameter wie erwartet gelesen werden. Im folgenden Beispiel wird auch die Dateiauflösung halbiert, um Speicherplatz zu sparen, und die Aufzeichnungsdateien werden in den Ordner c:\frames geschrieben.

Registrierungseintrag Wert Hinweise
CaptureCount 100 Legen Sie 100 Frames anstelle der Standard-10 fest.
ScaleFactor 50 Festlegen einer Auflösung von 50 %, um Platz zu sparen
CaptureFolder c:\frames Festlegen des Ausgabeordners
TriggerUniqueness 1 Jeder Wert ungleich 0 funktioniert, wenn das Zielobjekt mit 0 als Speicher-Eindeutigkeit beginnt.
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

Erfassen von 10 Frames vom zweiten Ziel in Remotesitzung 3 mit 5 Frames zwischen jeder Aufnahme

Diese Erfassung verwendet auch Debugüberlagerung, um die modifiziert Regionen für die einzelnen Frames hervorzuheben.

Registrierungseintrag Wert Hinweise
IddCxDebugCtrl Bit 0x0400 auch festgelegt 0x0400 ermöglicht modifiziert Bereichsmarkierung, 0x2200 Bits ebenfalls erforderlich sind
CaptureSessionID 3 Aktiviert die Erfassung in Remotesitzung 3
TargetMask 0x2 Bit 1 entspricht Ziel-IDX 1
SkipFrames 5 Überspringen der Erfassung von 5 Frames zwischen den einzelnen Aufzeichnungen
TriggerUniqueness 1 Jeder Wert ungleich 0 funktioniert als Zielobjekt beginnt mit Null als Speicher-Eindeutigkeit.
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