Attacher un débogueur au service de pipeline de filtre d'impression
Important
La plateforme d’impression moderne est le moyen privilégié de Windows pour communiquer avec les imprimantes. Nous vous recommandons d’utiliser le pilote de classe IPP en boîte de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’impression.
Pour plus d’informations, veuillez consulter les articles Plateforme d’impression moderne et Guide de conception des applications de support d’impression.
Les filtres de pilote XPSDrv sont hébergés par le service de pipeline de filtre d’impression (printfilterpipelinesvc.exe). Si vous souhaitez lier le Débogueur Microsoft Windows (WinDbg) au service de pipeline de filtre d’impression, il existe deux façons basiques de procéder :
Utilisez WinDbg à partir de la ligne de commande pour démarrer le processus.
Liez WinDbg à un processus existant.
L’hôte de pipeline de filtre doit être démarré par le spouleur d’impression. Vous devez donc utiliser la deuxième option pour lier WinDbg au processus. Toutefois, l’hôte de pipeline de filtre peut ne pas être persistant. Une nouvelle instance du service est démarrée lorsqu’une application envoie une tâche à la file d’attente d’impression et que le service est arrêté peu de temps après la fin de la tâche. Il peut être difficile de lier WinDbg à printfilterpipelinesvc.exe après l’envoi de la tâche d’impression, mais avant que le filtre que vous essayez de déboguer commence à s’exécuter, en particulier si vous souhaitez déboguer le code de démarrage ou d’initialisation du filtre.
Pour contourner ce problème, vous pouvez modifier la durée pendant laquelle printfilterpipelinesvc.exe persiste une fois qu’une tâche d’impression est terminée. Cette valeur est contrôlée par la valeur PipelineHostTimeout de la clé de registre HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print.
Procédez comme suit pour modifier la valeur du délai d’expiration du service de pipeline de filtre :
Exécutez l’Éditeur du Registre Microsoft (RegEdit) et accédez à HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print.
Ajoutez une valeur PipelineHostTimeout REG_DWORD à la clé si elle n’est pas déjà présente.
Configurez PipelineHostTimeout sur la valeur de délai d’expiration en millisecondes. Définissez une valeur suffisamment importante pour vous laisser un temps suffisant pour lier le processus et définir des points d’arrêt. Par exemple, si vous souhaitez une valeur de délai d’expiration de 1,5 minute, configurez PipelineHostTimeout sur 90000.
Après avoir configuré la valeur PipelineHostTimeout, utilisez la procédure suivante pour lier WinDbg au service de filtre de pipeline :
Exécutez WinDbg avec des privilèges élevés, mais ne le liez pas à un processus.
Envoyez une tâche d’impression à votre pilote et attendez qu’elle se termine. Le service de pipeline de filtre continue à s’exécuter pendant la valeur de délai d’expiration spécifiée.
Dans le menu Fichier WinDbg, sélectionnez Attacher à un processus.
Dans la boîte de dialogue Attacher à un processus, sélectionnez printfilterpipelinesvc.exe, puis cliquez sur OK. Si le processus est répertorié comme « Accès refusé », cela signifie probablement que WinDbg ne s’exécute pas avec des privilèges élevés.
Configurez les points d’arrêt, le cas échéant.
Envoyez à nouveau la tâche d’impression.
Le processus hôte de filtre doit se décomposer dans le débogueur au premier point d’arrêt ou au premier arrêt du vérificateur, selon ce qui se produit en premier. À ce stade, vous pouvez exécuter pas à pas le code, examiner les variables, etc.