Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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