Подтвердить что ты не робот

Как найти файл спула для задания с заданным ID, даже если включен пул файлов спула?

Я хотел бы скопировать данные спула для заданного задания печати Windows в произвольное место на диске.

У меня есть идентификатор задания задания печати из API диспетчера очереди печати. Я знаю, что эта работа закончилась спулингом. Я знаю, что работа не будет удалена, прежде чем у меня будет время завершить все, что мне нужно.

Если пул файлов отключен, я могу сделать это, посмотрев в каталоге спула для файла с форматом "xxxxx.spl", где xxxxx - это идентификатор задания с заполнением 0.

Как это сделать, если включен пул файлов?

Я был бы рад, если бы был метод, который взял идентификатор задания и вернул поток данных спула, но на данный момент это кажется маловероятным. Предположительно что-то подобное может быть возможно с помощью OpenPrinter с именем "PrinterName, Job xxxx" и ReadPrinter, как описано здесь, но до сих пор я не смогли заставить его работать, и даже если я это сделаю, похоже, что он загружает данные в память, и я не уверен, как это будет работать с большой катушкой файлов ( > 1 ГБ не является необычным).

Мое второе предпочтение было бы способом передать идентификатор и вернуть местоположение файла с данными спула на диске (независимо от настройки пула файлов).

Мое третье предпочтение было бы способом сопоставить объединенный файл ( "FPyyyyy.spl" ) с идентификатором задания для него.

Есть ли какие-либо из этих возможностей или кто-нибудь лучше знает, как решить эту проблему?

(Отредактировано для добавления, поскольку было неясно, что мы знали об этой опции): Наш отказ - потребовать, чтобы наши клиенты отключили пул файлов пула, отредактировав реестр для каждого принтера, но мы бы предпочли избежать этого.

4b9b3361

Ответ 1

I выяснил, почему мои вызовы OpenPrinter терпят неудачу, и я успешно прочитал данные спула, используя OpenPrinter и ReadPrinter, который решает нашу проблему красиво.

Я по-прежнему буду награждать награду тем, кто придумал лучшее решение.

Ответ 2

Вы читали это?

http://www.undocprint.org/winspool/spool_files

Кажется, у вас есть все, что вам нужно:)

В частности To Turn Off Spool File Pooling on a Per Printer Queue-Basis

Также есть статья о формате файлов spool http://www.codeproject.com/Articles/9720/The-Windows-NT-print-spool-shadow-file-format, но, похоже, вы уже знаете формат, и он, вероятно, выиграл не будет никакой помощи.