即使启用了假脱机文件池,如何find具有给定ID的作业的假脱机文件?

我想将给定的Windows打印作业的假脱机数据复制到磁盘上的任意位置。

我有打印后台处理程序API的打印作业的作业ID。 我知道这个工作已经完成假脱机。 我知道,在我有时间完成我需要做的事情之前,这个工作不会被删除。

如果文件池被禁用,我可以通过在spool目录中查找格式为“xxxxx.spl”的文件来做到这一点,其中xxxxx是0填充的作业ID。

如果启用文件池,我该如何做到这一点?

如果有一种方法取得工作ID并返回了假脱机数据stream,我会很高兴,但在这一点上似乎不大可能。 据说类似的东西也许可以使用OpenPrinter的“PrinterName,Job xxxx”和ReadPrinter 这里logging ,但到目前为止我还没有能够得到它的工作 ,即使我这样做,它看起来像它加载数据到内存,我不知道这将如何处理大的假脱机文件(> 1 GB是不寻常的)。

我的第二个select是传入ID并返回磁盘上假脱机数据的文件位置(不pipe文件池设置)。

我的第三个select是将一个池文件(“FPyyyyy.spl”)映射到它的作业ID。

这些都是可行的吗?还是有人对如何解决这个问题有更好的了解?

(编辑添加,因为我们不清楚是否知道这个选项):我们的退步是要求我们的客户通过编辑每个打印机的registry来禁用假脱机文件池,但我们宁愿避免这种情况。

我想清楚为什么我的OpenPrinter调用失败了,我已经成功地使用OpenPrinterReadPrinter读取了假脱机数据,这很好的解决了我们的问题。

尽管如此,我仍然会把奖金奖给那些提出更好解决方案的人。

你读过这个吗?

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

它似乎有你需要的一切:)

特别是To Turn Off Spool File Pooling on a Per Printer Queue-Basis

这里也有关于假脱机文件格式的文章http://www.codeproject.com/Articles/9720/The-Windows-NT-print-spool-shadow-file-format但是看起来你已经知道格式了这可能不会有任何帮助。