Anfügen eines Debuggers an den Druckfilterpipelinedienst
Wichtig
Die moderne Druckplattform ist die bevorzugte Methode von Windows für die Kommunikation mit Druckern. Wir empfehlen die Verwendung des Microsoft IPP-Treibers für die Posteingangsklasse zusammen mit Print Support Apps (PSA), um das Druckverhalten in Windows 10 und 11 für die Entwicklung von Druckergeräten anzupassen.
Weitere Informationen finden Sie unter Moderne Druckplattform und im Designhandbuch für die Drucksupport-App.
XPSDrv-Treiberfilter werden vom Druckfilterpipelinedienst (printfilterpipelinesvc.exe) gehostet. Wenn Sie den Microsoft Windows-Debugger (WinDbg) an den Druckfilterpipelinedienst anfügen möchten, gibt es zwei grundlegende Möglichkeiten, dies zu tun:
Verwenden Sie WinDbg über die Befehlszeile, um den Prozess zu starten.
Anfügen von WinDbg an einen vorhandenen Prozess.
Der Filterpipelinehost muss vom Druckspooler gestartet werden, daher müssen Sie die zweite Option verwenden, um WinDbg an den Prozess anzufügen. Der Filterpipelinehost ist jedoch möglicherweise nicht dauerhaft. Eine neue Instanz des Diensts wird gestartet, wenn eine Anwendung einen Auftrag an die Druckwarteschlange sendet und der Dienst kurz nach Abschluss des Auftrags beendet wird. Es kann schwierig sein, WinDbg an printfilterpipelinesvc.exe anzufügen, nachdem der Druckauftrag übermittelt wurde, aber bevor der Filter, den Sie debuggen möchten, gestartet wird, insbesondere, wenn Sie den Start- oder Initialisierungscode des Filters debuggen möchten.
Um dieses Problem zu umgehen, können Sie die Zeitspanne ändern, die printfilterpipelinesvc.exe nach Abschluss eines Druckauftrags beibehalten wird. Dieser Wert wird durch den PipelineHostTimeout-Wert des Registrierungsschlüssels HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print gesteuert.
Gehen Sie folgendermaßen vor, um den Timeoutwert des Filterpipelinediensts zu ändern:
Führen Sie den Microsoft Registrierungs-Editor (RegEdit) aus, und navigieren Sie zu HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print.
Fügen Sie dem Schlüssel einen PipelineHostTimeout-REG_DWORD-Wert hinzu, falls er noch nicht vorhanden ist.
Legen Sie PipelineHostTimeout auf den Timeoutwert in Millisekunden fest. Legen Sie einen großen Wert fest, um sich ausreichend Zeit zu geben, um den Prozess anzufügen und Haltepunkte festzulegen. Wenn Sie beispielsweise einen Timeoutwert von 1,5 Minuten benötigen, legen Sie PipelineHostTimeout auf 90000 fest.
Verwenden Sie nach dem Festlegen des PipelineHostTimeout-Werts das folgende Verfahren, um WinDbg an den Pipelinefilterdienst anzufügen:
Führen Sie WinDbg mit erhöhten Rechten aus, fügen Sie sie jedoch nicht an einen Prozess an.
Übermitteln Sie einen Druckauftrag an Ihren Treiber, und warten Sie, bis er abgeschlossen ist. Der Filterpipelinedienst wird für den angegebenen Timeoutwert weiterhin ausgeführt.
Wählen Sie im Dateimenü WinDbg die Option „An einen Prozess anfügen” aus.
Wählen Sie im Dialogfeld „An einen Prozess anfügen” den Prozess printfilterpipelinesvc.exe, und klicken Sie auf OK. Wenn der Prozess als „Zugriff verweigert” aufgeführt ist, bedeutet dies wahrscheinlich, dass WinDbg nicht mit erhöhten Berechtigungen ausgeführt wird.
Legen Sie Haltepunkte entsprechend fest.
Senden Sie den Druckauftrag erneut.
Der Filterhostprozess sollte am ersten Haltepunkt oder beim ersten Prüferstopp in den Debugger unterteilt werden, je nachdem, was zuerst kommt. Von dort aus können Sie schrittweise durch den Code gehen, Variablen untersuchen und so weiter.