Partager via


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