Aracılığıyla paylaş


Dolaylı görüntü sürücülerinde hata ayıklama

Dolaylı Görüntüler sürücüleri (IDD) UMDF sürücüleridir. Bu nedenle, UMDF hata ayıklama belgeleri, UMDF Sürücüsünün Neden Yüklenemediğini veya UMDF Cihazının Neden Başlatılamadığını Belirleme gibi, iyi bir başlangıç noktasıdır. Bu sayfa, dolaylı görüntüye özgü hata ayıklama bilgileri sağlar.

Kayıt defteri denetimi

Dolaylı Görüntü Sürücüsü Sınıfı eXtension (IddCx), IDD'lerin hata ayıklamasına yardımcı olmak için kullanılabilecek bazı kayıt defteri ayarlarına sahiptir. Tüm kayıt defteri değerleri HKLM\System\CurrentControlSet\Control\GraphicsDrivers kayıt defteri anahtarı altında bulunur.

Değer Adı Ayrıntılar
TerminateIndirectOnStall Sıfır değeri, kullanılabilir olan çerçevenin 10 saniye içinde bir çerçeveyi işlememesi durumunda sürücüyü sonlandıran watchdog'un devre dışı bırakılmasını sağlar. Diğer tüm değerler watchdog'un etkin olduğunu gösterir.
IddCxDebugCtrl IddCx'in farklı hata ayıklama yönlerini etkinleştiren bit alanı. Aşağıdaki tabloya bakın.

Uyarı

Watchdog'u devre dışı bırakmak için TerminateIndirectOnStall kayıt defteri değeri kullanılırsa, HLK testleri başarısız olur.

IddCxDebugCtrl değerleri

IddCxDebugCtrl'un içindeki bit Anlamı
0x0001 IddCx bir hata algıladığında hata ayıklayıcıya girme
0x0002 IddCx yüklendiğinde hata ayıklayıcıya girme
0x0004 IddCx kaldırıldığında hata ayıklayıcıya girme
0x0008 IddCx DriverEntry çağrıldığında hata ayıklayıcıya girme
0x0010 Sürücü bağlama çağrıldığında hata ayıklayıcıyı başlat
0x0020 Sürücü başlatma çağrıldığında hata ayıklayıcıya giriş
0x0040 Sürücü unbind çağrıldığında hata ayıklayıcıya bölün
0x0080 DDI çağrısında sürücünün çok uzun sürdüğünü sonlandıran DDI watchdog'u devre dışı bırakır
0x0100 Kullanılmamış
0x0200 Hata ayıklama katmanını etkinleştirin, aşağıdaki nota bakın
0x0400 Çerçevedeki kirli dikdörtgenlerin üzerine renkli alfa kutusu katmanı yerleştir; 0x0200 ayarlanmasını gerektirir
0x0800 Performans istatistiklerini çerçeveye yerleştir
0x2000 IddCx, yakalama çerçevesi kayıt defteri değerlerini her karede sorgular; 0x0200 ayarlanmasını gerektirir

Uyarı

Katman işlevlerinden herhangi birinin çalışması için, sürücü tarafından oluşturulan ve IddCxSwapChainSetDevice'e geçirilen Direct3D cihazının D3D11_CREATE_DEVICE_BGRA_SUPPORT bayrağıyla oluşturulması gerekir.

IddCx WPP izlemeleri

Iddcx, hata ayıklama bilgilerini günlüğe kaydetmek için WPP altyapısını kullanır. WPP bilgileri bir dosyaya kaydedilebilir ve bu kayıt devam ederken çekirdek hata ayıklayıcısında görüntülenebilir.

IddCx WPP izlemesini yakalama

WPP izlemeyi etkinleştirmenin birkaç yolu vardır. Derlemeyi logman.exe programda kullanmak kullanışlı bir yoldur. Aşağıdaki satırları bir toplu iş dosyasına kopyalayıp yükseltilmiş bir komut isteminden çalıştırırsanız IddCx WPP izlemelerini IddCx.etl dosyasına toplar.

@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

Yakalananları denetleme

logman.exeflags parametresi (bu örnekte 0x4f4), IddCx tarafından günlüğe alınan WPP iletilerini denetler. Windows derlemesi 19041 ve sonraki sürümlerde Bayraklar'ın anlamı değişti.

Windows derlemesi 19041 ve üzeri için parametreler

Flags parametresi, her bitin bu ileti türünün yakalanıp yakalanmadığını denetlediği bir bit alanıdır.

Bayrak biti Yakalanan ileti türü
0x001 Kullanılmamış
0x002 Kullanılmamış
0x004 Hatalar
0x008 Örneğin hata ayıklama katmanlarının D3D11_CREATE_DEVICE_BGRA_SUPPORT ayarlanmadan etkinleştirilmesi gibi zararsız hatalar
0x010 IddCx nesneleri
0x020 UMDF çerçevesi, IddCx'e çağrılar yapar.
0x040 IddCx'ten sürücüye DDI çağrıları
0x080 Sürücüden IddCx'e düşük frekanslı çağrılar
0x100 Sürücüden IddCx'e yüksek frekanslı çerçeveyle ilgili çağrılar
0x200 Sürücüden IddCx'e yüksek frekanslı imleçle ilgili çağrılar
0x400 Çekirdekten IddCx'e çağrılar
0x800 IddCx'ten çekreğe yapılan çağrılar

normal bir 0x0f4 günlüğü senaryosu iyi bir başlangıç noktasıdır. Çerçeve başına bilgileri görüntülemek istiyorsanız, 0x1f4 iyi bir başlangıç noktasıdır.

Windows derlemesi 19041'in öncesinde anlamına gelen bayraklar

Bayraklar bir düzey olarak ele alınmıştı ve her artan düzey, önceki düzeylerdeki tüm iletilerle birlikte yeni bir ileti türü ekledi.

Bayrak düzeyi değeri Yakalanan ileti türü
1 Kullanılmıyor
2 Hatalar
3 Uyarılar
4 Bilgi
5 Ağır dilli

IddCx WPP izleme kodunu çözme

Tüm WPP izleri gibi, WPP bilgileri de pdb dosyalarında depolanır. Bu nedenle, kodu çözmek için bu bilgilerle pdb dosyalarına erişim gereklidir. Windows derlemesi 19560'tan başlayarak, ortak sembol sunucusundaki IddCx.pdb , WPP iletilerinin kodunu çözmek için gereken WPP bilgilerini içerir. Windows 19560 derlemesinden önce, ortak sembol sunucusundaki IddCx.pdb , WPP kodunu çözmeyi etkinleştirmek için gerekli WPP bilgilerini* içermez.

Standart WPP kod çözme araçlarından herhangi biri iletilerin kodunu çözmek ve görüntülemek için kullanılabilir.

IddCx hatalarını ayıklama

IDD geliştirirken, IddCx bir hata algıladığında ek bilgi almak genellikle yararlıdır. Daha önce açıklandığı gibi, IddCx hata algıladığında hata ayıklayıcıya girmek için IddCx'i yapılandırabilirsiniz, ancak hatanın bağlamını anlamak için son birkaç izleme iletisinde IddCx hata iletisini görüntülemek de yararlıdır.

Önceki bölümü kullanarak ,logman.exe kullanarak WPP izlemeyi etkinleştirebilirsiniz ve aşağıdaki bilgilerle hata noktasında çekirdek hata ayıklayıcısında bellek içi WPP arabelleği görüntüleyebilirsiniz.

Uyarı

Bunun çalışması için, hata ayıklayıcının WPP kod çözme bilgilerini içeren IddCx.pdb dosyasını alabilmesi için bir çekirdek hata ayıklayıcısı (kullanıcı modu hata ayıklayıcısı değil) ve Windows derlemesi 19560 veya üzerini kullanıyor olmanız gerekir.

Aşağıdaki örnekte bir IDD, IddCxMonitorArrival'ı çağırır. İşlemenin bir parçası olarak IddCx, sürücünün EvtIddCxMonitorQueryTargetModes DDI'sini çağırır. Bu örnekte, sürücü DISPLAYCONFIG_VIDEO_SIGNAL_INFO ile bir mod döndürdü. AdditionalSignalInfo.vSyncFreqDivider, geçersiz olan ve hataya neden olan sıfır olarak ayarlandı.

Kullanılan hata ayıklayıcı komutlarının listesi aşağıdadır:

Komut Anlamı
!wmitrace.bufdump IddCx adıyla birlikte tüm günlük arabelleğinin yanı sıra listeleyin, logman.exe komut satırından gelir
!wmitrace.logdump LogBufferName Aşağıdaki örnekte IddCx olan belirtilen günlük arabelleğinin kodunu çözer ve görüntüler

Bu örnekte hata ayıklayıcı çıktısı aşağıda verilmiştir:

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

Son satır hatanın nedenini verir.

Dolaylı ekran görüntüsü yakalama hata ayıklama işlevi

Windows derlemesi 25164'ten itibaren IddCx, sürücüye aktardığı masaüstü görüntüsünü dökebilme yeteneğine sahiptir. Bu işlev, görsel sorunlarında hata ayıklamak için kullanılabilir. Bir çerçevenin kirli bölgelerini gölgelendirme gibi hata ayıklama katmanlarıyla birleştirilebilir.

IddCx, her karede kare yakalama için hata ayıklama kayıt defteri ayarındaki değişiklikleri kontrol eder. Bu nedenle , IddCxDebugCtrl içinde bu davranışı denetleen bir ana denetim değeri vardır. Bu ayar devre dışı bırakıldığında performans cezası olmamasını sağlar.

Uyarı

BU işlev, OPM arabirimi sürücüde etkin olduğunda devre dışı bırakılır.

Yakalamayı denetleen kayıt defteri değerleri

Aşağıdaki kayıt defteri değerleri HKLM\System\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture konumunda bulunur. IddCxDebugCtrl değeri ayarlanmadan önce bu kayıt defteri klasörü oluşturulmalıdır.

İsim Eksikse varsayılan Anlamı
TriggerUniqueness 0 Her IddCx takas zinciri yeni bir çerçeve almak için çağrıldığında, bu değeri okur. TriggerUniqueness sıfırdan farklıysa ve daha önce okunan değerden farklıysa aşağıdaki değerler okunur ve çerçeve yakalama etkinleştirilir.
TargetMask 0xffff Bit maskesi, bağdaştırıcıdaki her hedef dizin için bir bit, bu hedef için takas zincirinin bu yakalama dizisinin parçası olup olmayacağını denetler.
CaptureCount 10 Yakalama için etkinleştirilmiş her IddCx takas zincirinin yakalaması gereken kare sayısı.
SkipFrames 0 Yakalanan her çerçeve arasında atlanacak çerçeve sayısı.
CaptureSessionID 0 Çerçeve yakalamanın etkinleştirileceği oturum. Sıfır değeri her zaman konsol oturumu anlamına gelir.
ScaleFactor 100 Yakalanan dosyanın boyutlarını, geçerli değerleri 1-100 olarak belirlemek için kullanılan ölçek faktörünü denetler
CaptureFolder c:\IddCxImages Yakalama dosyalarının yazılacağı klasör. c:\IddCxImages klasörü yoksa oluşturulacaktır.

Yakalama parametreleri hedef başına depolanır ve bu da yakalama oturumunun belirli bir hedefte mod değişikliğine yayılmasına olanak tanır.

Bir izleyici nesnesi önceki bir yakalamadan kareleri yakalamaya devam ederken sıfır olmayan yeni bir TriggerUniqueness değeri algılanırsa, geçerli yakalamayı durdurur ve yeni tetikleneni başlatır.

Çerçeve yakalamayı denetlemek için REG dosyalarını kullanma

REG dosyaları, çerçeve yakalamalarını denetlemenin iyi bir yoludur. Bir dosya başlangıç değerlerini ayarlayabilir ve diğeri TriggerUniqueness'i güncelleştirebilir.

İlk değerleri ayarlamak için REG dosyası

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

TriggerUniqueness'i güncelleştirmek için REG dosyası

Windows Registry Editor Version 5.00

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

Dosya adı ve biçimi

Yakalanan çerçeveler aşağıdaki dosya adı biçiminde PNG dosya biçimindedir:

S<Oturum Kimliği, konsol için sıfır>_Ad<Kimlik bağdaştırıcısı LUID'nin onaltılık değeri>_T<Kimlik hedefi Idx'in onaltılık değeri>_Frame<IDDCX_METADATA içerisindeki çerçeve numarası>_<mmddyy formatında tarih>_<hhmmss formatında saat>.png

Bazı örnek dosya adları şunlardır:

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

WPP günlüğü

Başlatılan her yeni yakalama oturumu için, kayıt defterinden okunan veya varsayılan değerler için WPP mesajları kaydedilecektir.

Her çerçeve yakalanıp dosyaya yazıldıktan sonra IddCx, görüntü dosyasının tam dosya adını içeren bir WPP iletisi ekler.

Örnek yakalama ayarı

Monitör ilk bağlandığında kareleri yakalayın.

Aşağıda, herhangi bir monitörün ilk takıldığında ilk 20 karesini ve ardından REG dosyasını yakalamak için gereken kayıt defteri değerleri yer alır.

Kayıt defteri girdisi Değer Notlar
Yakalama Sayısı 20 Varsayılan 10 yerine 20 kare ayarlama
TriggerBenzersizliği 1 Sıfır olmayan herhangi bir değer, depo benzersizliği sağlamak için sıfırdan başlayan hedef nesne olarak işlev görür.
Windows Registry Editor Version 5.00

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

İzleyici etkinken yakalamayı başlat

Sürücü her çerçeveyi alırken swapchains'in yeni bir benzersizlik değeri olup olmadığını denetlediği düşünüldüğünde, tüm parametrelerin beklendiği gibi okunduğundan emin olmak için TriggerUniqueness girişini en son ayarlamanız gerekir. Aşağıdaki örnek ayrıca alandan tasarruf etmek için dosya çözümlemesini yarıya indirer ve yakalama dosyalarını c:\frames klasörüne yazar.

Kayıt defteri girdisi Değer Notlar
YakalamaSayısı 100 Varsayılan 10 yerine 100 çerçeve ayarlama
ScaleFactor 50 Alandan tasarruf etmek için 50% çözünürlük ayarlayın
CaptureFolder c:\frames Çıkış klasörünü ayarlama
Tetikleyici Eşsizliği 1 Hedef nesne, depolama benzersizliği açısından sıfırla başladığı için sıfır olmayan herhangi bir değer çalışır.
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

Uzak oturum 3'te her yakalama arasında 5 kare ile ikinci hedeften 10 kare yakalama

Bu yakalama ayrıca her çerçevenin kirli bölgelerini vurgulamak için hata ayıklama katmanını kullanır.

Kayıt defteri girdisi Değer Notlar
IddCxDebugCtrl Bit 0x0400 de ayarlanır 0x0400 kirli bölge vurgulama sağlar, 0x2200 bitler de gereklidir
OturumKimliğiYakalama 3 Uzak oturum 3'te yakalamayı etkinleştirir
TargetMask 0x2 Bit 1, idx 1 hedefine karşılık gelir
SkipFrames 5 Her yakalama arasında beş kare yakalamayı atlayın
TetikleyiciEşsizliği 1 Sıfır olmayan herhangi bir değer, depo benzersizliği olarak sıfırdan başlayan hedef nesne olarak çalışır
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