Patrick Patrick - 5 months ago 23
C Question

How exactly does the windows spooler decide what data type it's going to send to the print processor?

For example if you want to be spooling in EMF, usually what works is ticking "Advanced printing features". However, I've noticed that on some printer drivers this does not work (which is not unexpected, it's not mandatory for v3 drivers to support it). Indeed, I've noticed on one driver that a device-dependent setting (i.e. in the extra end chunk of the DEVMODE structure) was what determined whether the spool file came out in EMF. So how does the print spooler determine which datatype to pass down?

I've looked through the print driver DDI functions and structures and can't find anything pertaining to this. In

DrvDeviceCapabilities
there is a
DC_EMF_COMPLIANT
flag, however that is only for Windows 95. How does the spooler do it on later systems?

Answer Source

After much searching I have found a sufficient (but perhaps not necessary) condition for the driver to force the spooler to use RAW. If DrvEscape is called querying support for METAFILE_DRIVER and the driver returns 0, then the spooler will spool straight to raw no matter what. This is the case for the driver I had found that does this.