Compartilhar via


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:

  1. Use o WinDbg na linha de comando para iniciar o processo.

  2. 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:

  1. Execute o Editor do Registro da Microsoft (RegEdit) e navegue até HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print.

  2. Adidione um valor PipelineHostTimeout REG_DWORD à chave, se ela ainda não estiver presente.

  3. 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:

  1. Execute o WinDbg com privilégios elevados, mas não o anexe a um processo.

  2. 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.

  3. No menu Arquivo WinDbg, selecione Anexar a um Processo.

  4. 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.

  5. Defina pontos de interrupção, conforme apropriado.

  6. 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.