Поделиться через


Присоединение отладчика к службе конвейера фильтра печати

Внимание

Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуем использовать драйвер класса "входящий" Microsoft IPP вместе с приложениями поддержки печати (PSA) для настройки параметров печати в Windows 10 и Windows 11 при разработке устройств для печати.

Дополнительные сведения см. в руководстве по проектированию приложений для поддержки печати .

Фильтры драйверов XPSDrv размещаются службой конвейера фильтра печати (printfilterpipelinesvc.exe). Если вы хотите подключить отладчик Microsoft Windows (WinDbg) к службе конвейера фильтра печати, это можно сделать двумя основными способами.

  1. Используйте WinDbg из командной строки, чтобы запустить процесс.

  2. Подключите WinDbg к существующему процессу.

Узел конвейера фильтра должен быть запущен диспетчером печати, поэтому необходимо использовать второй опцию для подключения WinDbg к процессу. Однако хост конвейера фильтрации может не быть устойчивым. Новый экземпляр службы запускается, когда приложение отправляет задание в очередь печати, и служба завершается вскоре после завершения задания. Может быть трудно подключить WinDbg к printfilterpipelinesvc.exe после отправки задания на печать, но до того, как начнет выполняться фильтр, который вы пытаетесь отладить, особенно если вы хотите отладить код запуска или инициализации фильтра.

Чтобы обойти эту проблему, можно изменить продолжительность времени, в течение которого printfilterpipelinesvc.exe активен после завершения задания печати. Это значение управляется значением PipelineHostTimeout раздела реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print.

Чтобы изменить время ожидания службы конвейера фильтра, выполните следующие действия.

  1. Запустите редактор реестра Майкрософт (RegEdit) и перейдите к HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print.

  2. Добавьте значение PipelineHostTimeout REG_DWORD в ключ, если оно еще не присутствует.

  3. Установите PipelineHostTimeout в значение времени ожидания в миллисекундах. Установите достаточно большое значение, чтобы обеспечить себе достаточное время для подключения процесса и установки точек останова. Например, если требуется значение времени ожидания 1,5 минут, задайте для PipelineHostTimeout значение 90000.

После задания значения PipelineHostTimeout используйте следующую процедуру, чтобы подключить WinDbg к службе конвейерного фильтра:

  1. Запустите WinDbg с повышенными привилегиями, но не присоединяйте его к процессу.

  2. Отправьте задание печати водителю и подождите его завершения. Служба конвейера фильтра продолжает работать для указанного значения времени ожидания.

  3. В меню "Файл WinDbg" выберите "Присоединить к процессу".

  4. В диалоговом окне "Подключение к процессу" выберите printfilterpipelinesvc.exe и нажмите кнопку "ОК". Если процесс указан как "Отказано в доступе", вероятно, это означает, что WinDbg не работает с повышенными привилегиями.

  5. Задайте точки останова в соответствии с соответствующими параметрами.

  6. Отправьте задание печати еще раз.

Процесс узла фильтра должен перейти в режим отладки на первой точке прерывания или первой остановке проверяющего средства, в зависимости от того, что произойдёт первым. Оттуда можно выполнить пошаговое изучение кода, проверить переменные и т. д.