Anexando um depurador ao serviço de pipeline de filtro de impressão
Importante
A plataforma de impressão moderna é o meio preferido do Windows para se comunicar com as impressoras. Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft juntamente com PSA (Aplicativos de Suporte à Impressão) para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.
Para obter mais informações, consulte Plataformade impressão moderna e o Guia de design do aplicativo de suporte de impressão.
Os filtros de driver XPSDrv são hospedados pelo serviço de pipeline de filtro de impressão (printfilterpipelinesvc.exe). Se você quiser anexar o WinDbg (Depurador do Microsoft Windows) ao serviço de pipeline de filtro de impressão, há duas maneiras básicas de fazer isso:
Use o WinDbg na linha de comando para iniciar o processo.
Anexe o WinDbg a um processo existente.
O host do pipeline de filtro deve ser iniciado pelo spooler de impressão, portanto, você deve usar a segunda opção para anexar o WinDbg ao processo. No entanto, o host do pipeline de filtro pode não ser persistente. Uma nova instância do serviço é iniciada quando um aplicativo envia um trabalho para a fila de impressão e o serviço é encerrado logo após a conclusão do trabalho. Pode ser difícil anexar o WinDbg ao printfilterpipelinesvc.exe depois que o trabalho de impressão é enviado, mas antes que o filtro que você está tentando depurar comece a ser executado, especialmente se você quiser depurar o código de inicialização ou inicialização do filtro.
Para contornar esse problema, você pode modificar a quantidade de tempo que printfilterpipelinesvc.exe persiste após a conclusão de um trabalho de impressão. Esse valor é controlado pelo valor PipelineHostTimeout de HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print registry key.
Use estas etapas para alterar o valor de tempo limite do serviço de pipeline de filtro:
Execute o Editor do Registro da Microsoft (RegEdit) e navegue até HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print.
Adidione um valor PipelineHostTimeout REG_DWORD à chave, se ela ainda não estiver presente.
Defina PipelineHostTimeout como o valor de tempo limite, em milissegundos. Defina um valor grande o suficiente para ter tempo suficiente para anexar o processo e definir pontos de interrupção. Por exemplo, se você quiser um valor de tempo limite de 1,5 minutos, defina PipelineHostTimeout como 90000.
Depois de definir o valor PipelineHostTimeout , use o seguinte procedimento para anexar o WinDbg ao serviço de filtro de pipeline:
Execute o WinDbg com privilégios elevados, mas não o anexe a um processo.
Envie um trabalho de impressão para o driver e aguarde a conclusão. O serviço de pipeline de filtro continua em execução para o valor de tempo limite especificado.
No menu Arquivo WinDbg, selecione Anexar a um Processo.
Na caixa de diálogo Anexar ao Processo, selecione printfilterpipelinesvc.exe e clique em OK. Se o processo estiver listado como "Acesso negado", isso provavelmente significa que o WinDbg não está sendo executado com privilégios elevados.
Defina pontos de interrupção, conforme apropriado.
Envie o trabalho de impressão novamente.
O processo de host de filtro deve entrar no depurador no primeiro ponto de interrupção ou na primeira parada do verificador, o que ocorrer primeiro. A partir daí, você poderá executar o código em etapas, examinar variáveis e assim por diante.