Débogage des pilotes d’affichage indirect
Les pilotes d’affichage indirect (IDD) étant des pilotes UMDF, la documentation de débogage UMDF, telle que Détermination de la raison pour laquelle le pilote UMDF échoue à charger ou le démarrage de l’appareil UMDF, est un bon point de départ. Cette page fournit des informations de débogage spécifiques à l’affichage indirect.
Contrôle du Registre
La classe de pilote d’affichage indirect eXtension (IccDx) a certains paramètres de Registre qui peuvent être utilisés pour faciliter le débogage des IDD. Toutes les valeurs de Registre se trouvent sous la clé de Registre HKLM\System\CurrentControlSet\Control\GraphicsDrivers .
Nom de la valeur | Détails |
---|---|
TerminateIndirectOnStall | Une valeur zéro désactive l’agent de surveillance qui arrête le pilote s’il ne traite pas une image dans les 10 secondes qui suivent la disponibilité de l’image. Toute autre valeur laissera le chien de garde activé. |
IddCxDebugCtrl | Champ de bits qui a activé différents aspects de débogage d’IddCx. Consultez le tableau ci-dessous. |
Notes
Si la valeur de Registre TerminateIndirectOnStall est utilisée pour désactiver le chien de garde, les tests HLK échouent.
Valeurs IddCxDebugCtrl
Bit dans IddCxDebugCtrl | Signification |
---|---|
0x0001 | Entrer dans le débogueur quand IddCx détecte une erreur |
0x0002 | Entrer dans le débogueur quand IddCx est chargé |
0x0004 | Entrer dans le débogueur quand IddCx est déchargé |
0x0008 | Entrer dans le débogueur quand IddCx DriverEntry est appelé |
0x0010 | Entrer dans le débogueur lorsque la liaison de pilote est appelée |
0x0020 | Entrer dans le débogueur lorsque le démarrage du pilote est appelé |
0x0040 | Entrer dans le débogueur lorsque le pilote unbind est appelé |
0x0080 | Désactive le chien de garde DDI qui arrête le pilote prend trop de temps dans l’appel DDI |
0x0100 | Inutilisé |
0x0200 | Activer la superposition de débogage, voir ci-dessous |
0x0400 | Zone alpha de couleur superposée sur sale rects dans le cadre ; nécessite la définition de 0x0200 |
0x0800 | Superposer les statistiques préliminaires dans le cadre |
0x2000 | IddCx interroge les valeurs de registre de trames de capture à chaque image ; nécessite la définition de 0x0200 |
Notes
Pour que l’une des fonctions de superposition fonctionne, le périphérique Direct3D créé par le pilote et passé à IddCxSwapChainSetDevice doit être créé avec l’indicateur D3D11_CREATE_DEVICE_BGRA_SUPPORT .
Suivis WPP IddCx
Iddcx utilise l’infrastructure WPP pour consigner les informations de débogage. Les informations WPP peuvent être capturées dans un fichier et, pendant que cette capture est en cours, elles peuvent être affichées dans le débogueur du noyau.
Capture du suivi WPP IddCx
Il existe plusieurs façons d’activer le suivi WPP. Un moyen pratique consiste à utiliser la build dans logman.exe programme. Si vous copiez la ligne suivante dans un fichier batch et que vous exécutez à partir d’une invite de commandes avec élévation de privilèges, il collecte les traces WPP IddCx dans le fichier IddCx.etl .
@echo off
echo Starting WPP tracing....
logman create trace IddCx -o IddCx.etl -ets -ow -mode sequential -p {D92BCB52-FA78-406F-A9A5-2037509FADEA} 0x4f4 0xFF
echo Tracing enabled
pause
echo Stopping WPP tracing....
logman -stop IddCx -ets
Contrôle de ce qui est capturé
Le paramètre Flags de logman.exe (0x4f4 dans ce cas) contrôle les journaux des messages WPP IddCx. La valeur de signification de cela a changé dans Windows build 19041 et versions ultérieures.
Signification d’indicateurs pour Windows build 19041 et versions ultérieures
Les indicateurs sont un champ de bits, où chaque bit contrôle si ce type de message est capturé.
Bits d’indicateurs | Type de message capturé |
---|---|
0x001 | Inutilisé |
0x002 | Inutilisé |
0x004 | Erreurs |
0x008 | Erreurs bénignes, par exemple lorsque la superposition de débogage est activée sans D3D11_CREATE_DEVICE_BGRA_SUPPORT définie |
0x010 | Objets IddCx |
0x020 | Appels de l’infrastructure UMDF dans IddCx |
0x040 | Appels DDI d’IddCx vers le pilote |
0x080 | Appels à basse fréquence du pilote vers IddCx |
0x100 | Appels liés aux images à haute fréquence du pilote vers IddCx |
0x200 | Appels liés au curseur à haute fréquence du pilote vers IddCx |
0x400 | Appels du noyau à IddCx |
0x800 | Appels d’IddCx vers le noyau |
Un scénario de journalisation normal de 0x0f4 est un bon point de départ. Si vous souhaitez afficher les informations par image, 0x1f4 est un bon point de départ.
Signification d’indicateur antérieure à windows build 19041
Les indicateurs ont été traités comme un niveau, chaque niveau croissant ajoutant un nouveau type de message ainsi que tous les messages des niveaux précédents.
Valeur de niveau des indicateurs | Type de message capturé |
---|---|
1 | Non utilisé |
2 | Erreurs |
3 | Avertissements |
4 | Information |
5 | Commentaires |
Décodage du suivi WPP IddCx
Comme toutes les traces WPP, les informations WPP sont stockées dans des fichiers pdb et, par conséquent, l’accès aux pdbs avec ces informations est nécessaire pour décoder. À compter de la build Windows 19560, iddCx.pdb sur le serveur de symboles publics contient les informations WPP nécessaires pour décoder les messages WPP. Avant la build Windows 19560, iddCx.pdb sur le serveur de symboles publics ne contient pas les informations WPP nécessaires pour activer le décodage WPP.
Tous les outils de décodage WPP standard peuvent être utilisés pour décoder et afficher les messages.
Débogage des erreurs IddCx
Lors du développement d’un pilote d’affichage indirect, il est souvent utile d’obtenir des informations supplémentaires quand IddCx détecte une erreur. Comme décrit ci-dessus, vous pouvez configurer IddCx pour qu’il entre dans le débogueur quand IddCx détecte une erreur, mais il est également utile d’afficher le message d’erreur IddCx dans les derniers messages de trace pour comprendre le contexte de l’erreur.
À l’aide de la section ci-dessus, vous pouvez activer le suivi WPP à l’aide delogman.exe et, avec les informations suivantes, affichez la mémoire tampon WPP en mémoire dans le débogueur du noyau au point de la défaillance.
Notes
Pour que cela fonctionne, vous devez utiliser un débogueur de noyau (et non un débogueur en mode utilisateur) et une build Windows 19560 ou ultérieure pour que le débogueur puisse obtenir l’IddCx.pdb qui contient les informations de décodage WPP.
Dans l’exemple ci-dessous, un pilote d’affichage indirect appelle IddCxMonitorArrival. Dans le cadre du traitement, IddCx appelle le DDI EvtIddCxMonitorQueryTargetModes du pilote. Dans cet exemple, le pilote a retourné un mode avec DISPLAYCONFIG_VIDEO_SIGNAL_INFO. AdditionalSignalInfo.vSyncFreqDivider défini sur zéro, ce qui n’est pas valide et provoque une erreur.
Voici la liste des commandes de débogueur utilisées :
Commande | Signification |
---|---|
!wmitrace.bufdump | Répertorier toute la mémoire tampon de journalisation ainsi que le nom, IddCx est le nom du nôtre, provient de la ligne de commande logman.exe |
!wmitrace.logdump LogBufferName | Décode et affiche le contenu de la mémoire tampon de journalisation spécifiée, qui est IddCx dans l’exemple ci-dessous |
Voici la sortie du débogueur pour cet exemple :
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
La dernière ligne indique la raison de l’échec.
Fonctionnalité de débogage de capture d’écran d’affichage indirecte
À compter de la build Windows 25164, IddCx a la possibilité de vider le cadre de bureau qu’IddCx transmet au pilote. Cette fonctionnalité peut être utilisée pour déboguer des problèmes visuels. Il peut être combiné avec les superpositions de débogage telles que le ombrage sale régions d’un cadre.
Comme IddCx recherche les modifications apportées au paramètre de Registre de débogage pour la capture d’images sur chaque image, il existe une valeur de contrôle master dans IddCxDebugCtrl qui contrôle si IddCx case activée la valeur du Registre de capture chaque image. Cela garantit qu’il n’y a aucune pénalité de performances en cas de désactivation.
Notes
Cette fonctionnalité est désactivée lorsque l’interface OPM est active pour le pilote.
Valeurs de Registre qui contrôlent la capture
Les valeurs de Registre suivantes se trouvent dans HKLM\System\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture. Ce dossier de Registre doit être créé avant que la valeur IddCxDebugCtrl soit définie.
Nom | Par défaut en cas d’absence | Signification |
---|---|---|
TriggerUniqueness | 0 | Lorsque chaque swapchain IddCx est appelé pour acquérir une nouvelle trame, il lit cette valeur. Si TriggerUniqueness n’est pas égal à zéro et diffère de la valeur précédemment lue, les valeurs ci-dessous sont lues et la capture d’images est activée. |
Masque cible | 0xffff | Masque de bits, un bit pour chaque index cible sur l’adaptateur qui contrôle si la chaîne d’échange de cette cible doit faire partie de cette séquence de capture. |
CaptureCount | 10 | Nombre d’images que chaque chaîne d’échange IddCx activée pour la capture doit capturer. |
SkipFrames | 0 | Nombre d’images à ignorer entre chaque image capturée. |
CaptureSessionID | 0 | Session dans laquelle la capture d’images sera activée. La valeur zéro signifie toujours la session de console. |
Scalefactor | 100 | Contrôle le facteur d’échelle utilisé pour déterminer les dimensions du fichier capturé, valeurs valides 1 à 100 |
CaptureFolder | c :\IddCxImages | Dossier dans lequel les fichiers de capture seront écrits. Un dossier c :\IddCxImages est créé s’il n’existe pas. |
Les paramètres de capture sont stockés par cible, ce qui permet à une session de capture d’étendre un changement de mode sur une cible donnée.
Si une nouvelle valeur TriggerUniqueness autre que zéro est détectée alors qu’un objet de surveillance capture toujours des images d’une capture précédente, elle arrête la capture actuelle et démarre la capture qui vient d’être déclenchée.
Utilisation de fichiers REG pour contrôler la capture d’images
Les fichiers REG sont un bon moyen de contrôler les captures d’images. Un fichier peut définir les valeurs initiales et un autre peut mettre à jour TriggerUniqueness.
Fichier REG pour définir les valeurs initiales
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
Fichier REG pour mettre à jour TriggerUniqueness
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"TriggerUniqueness"=dword:1
Nom et format du fichier
Les images capturées seront au format de fichier PNG avec le format de nom de fichier suivant :
ID de session S<, zéro pour la console>_Ad<valeur hexadécimal de l’adaptateur d’ID LUID>_T<valeur hexadécimal de l’ID cible Idx>_Frame<numéro de trame de IDDCX_METADATA. PresentationFrameNumber>_<Date in mmddyy format>_<Time in hhmmss>.png
Voici quelques exemples de noms de fichiers :
- S0_Ad8ade_T3_Frame2343_020422_173434.png
- S0_Ad8ade_T3_Frame2344_020422_173434.png
- S0_Ad8ade_T3_Frame2345_020422_173435.png
Journalisation WPP
Pour chaque nouvelle session de capture démarrée, les messages WPP sont consignés pour chaque valeur lue à partir du Registre ou définies par défaut.
Chaque fois qu’une image est capturée et écrite dans un fichier, IddCx ajoute un message WPP qui contient le nom de fichier complet du fichier image.
Exemple de paramètre de capture
Capturer des images à partir du moment où un moniteur est connecté pour la première fois
Voici les valeurs de Registre nécessaires pour capturer les 20 premières images de la première connexion d’un moniteur, suivies du fichier REG.
Entrée de Registre | Valeur | Notes |
---|---|---|
CaptureCount | 20 | Définir 20 images plutôt que 10 par défaut |
TriggerUniqueness | 1 | Toute valeur autre que zéro fonctionne car l’objet cible commence par zéro en tant qu’unicité de magasin |
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"CaptureCount"=dword:00000014
"TriggerUniqueness"=dword:00000001
Démarrer la capture pendant que le moniteur est actif
Étant donné que les chaînes d’échange case activée pour une nouvelle valeur d’unicité lorsque le pilote acquiert chaque image, vous devez définir l’entrée TriggerUniqueness en dernier pour vous assurer que tous les paramètres sont lus comme prévu. L’exemple suivant réduit également de moitié la résolution de fichiers afin d’économiser de l’espace et écrit les fichiers de capture dans le dossier c :\frames .
Entrée de Registre | Valeur | Notes |
---|---|---|
CaptureCount | 100 | Définir 100 images plutôt que 10 par défaut |
Scalefactor | 50 | Définir une résolution de 50 % pour économiser de l’espace |
CaptureFolder | c :\frames | Définir le dossier de sortie |
TriggerUniqueness | 1 | Toute valeur autre que zéro fonctionnera car l’objet cible commence par zéro en tant qu’unicité de magasin |
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
Capturer 10 images à partir de la deuxième cible dans la session distante 3 avec 5 images entre chaque capture
Cette capture utilise également la superposition de débogage pour mettre en évidence les régions sale pour chacune des images.
Entrée de Registre | Valeur | Notes |
---|---|---|
IddCxDebugCtrl | Bit 0x0400 également défini | 0x0400 permet sale mise en surbrillance de région, 0x2200 bits également requis |
CaptureSessionID | 3 | Active la capture dans la session distante 3 |
Masque cible | 0x2 | Bit 1 correspond à l’IDx 1 cible |
SkipFrames | 5 | Ignorer la capture de 5 images entre chaque capture |
TriggerUniqueness | 1 | Toute valeur autre que zéro fonctionne car l’objet cible commence par zéro en tant qu’unicité de magasin |
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