Depurando drivers de impressora XPSDrv
Importante
A plataforma de impressão moderna é o meio preferencial 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.
As filas de impressão com drivers de impressora XPSDrv são hospedadas no processo spoolsv.exe. Entretanto, ao contrário dos drivers de impressora baseados em GDI, os filtros de um driver de impressora XPSDrv são hospedados no processo printfilterpipelinesvc.exe, que é separado do spoolsv.exe. Como resultado, é necessário anexar o depurador ao processo printfilterpipelinesvc.exe para depurar os filtros em um driver de impressora XPSDrv.
Configuração do tempo limite do processo printfilterpipelinesvc.exe
O processo printfilterpipelinesvc.exe é iniciado quando um trabalho de impressão é enviado para uma fila de impressão com um driver de impressora XPSDrv. O processo é encerrado depois de ficar inativo por um período de tempo definido por um valor no registro. A natureza intermitente do processo de printfilterpipelinesvc.exe dificulta a anexação de um depurador ao printfilterpipelinesvc.exe para depurar os filtros em um driver de impressora XPSDriv.
Entretanto, é possível configurar o período de tempo limite de inatividade no registro. O valor PipelineHostTimeout na subchave HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print no registro define o tempo limite do processo printfilterpipelinesvc.exe em milissegundos. É possível aumentar esse valor para facilitar a depuração de um driver de impressora XPSDrv. Perceba que o processo de printfilterpipelinesvc.exe é iniciado para analisar o arquivo de configuração para que, mesmo que não haja filtros definidos para o driver, o processo ainda seja iniciado.
Configuração do sistema para depuração
Para depurar um driver de impressora XPSDrv, é necessário:
Atribuir a fila de impressão que usa o driver que você deseja depurar para imprimir em uma porta de arquivo.
Definir o valor PipelineHostTimeout como um valor que concederá a você tempo suficiente para depurar o problema.
Enviar um trabalho de impressão para a fila de impressão criada na etapa 1 a fim de iniciar o processo Printfilterpipelinesvc.exe.
Anexar o depurador ao processo Printfilterpipelinesvc.exe e começar a depuração.
Depois de anexar o depurador, é possível definir pontos de interrupção nos módulos de filtro e começar a depurar o driver da impressora.
Se o driver de impressora que você deseja depurar fizer com que o processo printfilterpipelinesvc.exe seja encerrado antes que seja possível anexar o depurador, você poderá fazer o seguinte:
Criar um driver de impressora XPSDrv que não tenha nenhum filtro definido no arquivo de configuração.
Criar uma fila de impressão com o driver de impressora criado na etapa anterior.
Atribuir a fila de impressão que usa o driver que você deseja depurar para imprimir em uma porta de arquivo.
Definir o valor PipelineHostTimeout como um valor que concederá a você tempo suficiente para depurar o problema.
Enviar um trabalho de impressão para a fila de impressão criada na etapa 2.
Anexar o depurador ao processo Printfilterpipelinesvc.exe.
Definir pontos de interrupção no driver de impressora que você deseja depurar.
Imprimir na fila de impressão com o driver que você deseja depurar.