V4 Driver Manifest

Important

We recommend that you use Microsoft's IPP inbox class driver, along with Print Support Apps (PSA), to customize the print experience in Windows 10 and 11 for printer device development.

For more information, see the Print support app design guide.

The v4 print driver manifest is a text file that contains all the printer-specific setup directives. A v4 print driver manifest is used in conjunction with a v4 print driver INF file, as part of the set up for a printer-specific v4 print driver.

The directives in a manifest are organized into sections:

DriverConfig Section

The following table shows the directives that are used in the DriverConfig section.

Directive Restrictions Usage

RequiredFiles

Includes files from ntprint.inf or ntprint4.inf.

The RequiredFiles directive will support the following value in Windows 10:

PWGRRenderFilter.dll: Adds the Microsoft PWG Raster rendering filter to the driver's dependent files list.

The PWG Raster rendering filter render filter requires that the driver use a PrintDeviceCapabilities file for configuration.

Unidrv.dll, pscript5.dll, and mxdwdrv.dll should be omitted from this list. They will be resolved automatically.

Examples:

RequiredFiles=

UNIRES.DLL,STDNAMES.GPD,

V3HOSTINGFILTER.DLL

RequiredClass

Causes this driver to include all files from a defined class driver using the driver/friendly name of the device and its GUID as key. This is the mechanism for linking a printclass driver to a model specific driver.

The RequiredClass directive cannot be used by a class driver. When you use RequiredClass, you should avoid file name collisions between the printer driver and the Print Class driver to which you're linking.

Although files with similar names won't overwrite each other, it may be difficult during troubleshooting, to distinguish between the class driver package file and the file from the v4 printer driver.

Example:

RequiredClass=

"Fabrikam PCL5e Class Driver",{9343720D-B67E-4451-B93F-6F721C439771}

DriverFile

This points to the rendering binary. Mxdwdrv is the default, but class drivers may alternatively specify unidrv.dll or pscript5.dll. This is functionally identical to the same directive in a v3 INF.

Can only be set in a class driver. Valid choices are unidrv.dll or pscript5.dll. V4 print drivers either inherit from a RequiredClass or default to mxdwdrv.dll

DriverFile=

unidrv.dll

DataFile

This defines the primary GPD or PPD for this driver. This is functionally identical to the same directive in a v3 INF.

In Windows 10, v4 print drivers may continue to specify a GPD or PPD DataFile, however, they may also describe a DataFile which is in the PrintDeviceCapabilities format.

Required.

Examples:

DataFile=FAPDL.gpd

DataFile=FAPDL.xml

DataFileType

The DataFileType must be used when describing a PrintDeviceCapabilities file as the DataFile, and may also be used with a GPD or PPD-based DataFile as well.

Required for PrintDeviceCapabilities file.

Example:

DataFileType=

"application/vnd.ms-PrintDeviceCapabilities+xml"

Flags

This is used to specify additional, optional attributes associated with the driver.

NotShareable: This flag specifies that the driver is not shareable. This is appropriate for virtual drivers such as the Microsoft XPS Document Writer. SoftResetOnJobCancellation: This flag specifies that the device requires a USB soft reset (IOCTL_USBPRINT_SOFT_RESET) on print job cancellation. ArchiveEnabled The v4 driver uses this flag to request archive-optimized XPS as a spool file.

None.

Examples:

Flags=

NotShareable,

SoftResetOnJobCancellation

Flags=

ArchiveEnabled,NotShareable

PrinterDriverID

This is a unique ID that describes the print driver. If two drivers specify the same PrinterDriverID, then they must be compatible for sharing and support the same printer extensions.

Required.

PrinterDriverID=

{guid}

PropertyBag

Specifies a driver property bag for this driver. This is a compiled file generated by DriverPropertyBagTool.exe or Visual Studio.

None.

PropertyBag=

FAProperty.dpb

ResourceFile

Defines the name of the driver's string resource DLL.

In Windows 10, drivers may specify a ResourceFile using .resx format.

None.

Examples:

ResourceFile=

FARC.dll

ConstraintScript

Defines the name of the driver's JavaScript constraint file.

None.

ConstraintScript=

FAConst.js

DriverCategory

Defines the category of the device between one of several options. Valid options are as follows:

PrintFax.Fax PrintFax.Printer PrintFax.Printer.3D PrintFax.Printer.File PrintFax.Printer.Service PrintFax.Printer.Virtual

Required.

DriverCategory=

PrintFax.Printer

For more information about other driver categories, see Printer INF File Entries.

PrinterExtensionUrl

Specifies a URL for the user to obtain a copy of the Printer extension app. Used in printer sharing.

None.

PrinterExtensionUrl=

"https://www.fabrikam.com/files/setup.exe";

DevModeMap

Specifies the Devmode mapping file. This is an XML file that is used with PrintTicket to DEVMODE conversion in JavaScript code.

None.

DevModeMap=

fadmmap.xml

EventFile

Specifies the Driver Event XML file.

None.

EventFile=

faevents.xml

QueueProperties

Specifies the format of a queue property bag. This is an XML file and must NOT be compiled.

None.

QueueProperties=

faQueueProps.xml

BidiUSBStatusInterface

Specifies a list of hardware IDs that match one or more device interfaces to be used for USB Bidi communications.

None, but should only be supported if status is done over a USB interface that is not the print interface.

BidiUSBStatusInterface=

"USB\vid_1234&pid_1234",

"USB\vid_1234&pid_4567"

UserPropertyBagScope

This directive specifies the scope of the user property bag as either Queue or Manufacturer.

If this directive is omitted, then Queue is the default value. Valid options for this directive are as follows:

Queue: This is the default configuration, and it matches the Windows 8 behavior. Manufacturer: All queues which use the same Manufacturer string in the INF use the same user property bag.

None.

UserPropertyBagScope=

Manufacturer

RetrievePrintDeviceCapabilitiesFromDevice

v4 drivers may specify that they must retrieve a PrintDeviceCapabilities file from WS-Print v2.0 printers, as long as they set a PrintDeviceCapabilities file as the driver's DataFile and the DataFileType also indicates that the DataFile is of MIME type "application/vnd.ms-PrintDeviceCapabilities+xml". Valid options:

Valid options:

True: Allows the driver's local DataFile to be replaced with the PrintDeviceCapabilities file from the device.

False: The driver's local DataFile will not be replaced with the PrintDeviceCapabilities file from the device.

If not specified, the default value of this directive is false.

None.

Example:

RetrievePrintDeviceCapabilitiesFromDevice=

true

BidiFiles Section

The BidiFiles section is used to define Bidi extension files. It is identical to the Windows 7 format for TCP and WSD. The USB keywords are new.

The following table shows the directives that are used in the BidiFiles section.

Directive Restrictions Usage

BidiSPMFile

This defines the Bidi extension file for a TCP/IP-based printer.

None.

BidiSPMFile=FaBidiSPM.xml

BidiWSDFile

This defines the Bidi extension file for a WSD-based printer.

None.

BidiWSDFile=FABidiWSD.xml

BidiUSBFile

This defines the Bidi extension for USB.

None.

BidiUSBFile=FABidiUSB.xml

BidiUSBJSFile

This defines the JavaScript extension for USB.

None.

BidiUSBJSFile=FABidiUSBJS.js

DriverRender Section

The following table shows the directives that are used in the DriverRender section.

Directive Restrictions Usage

PageOutputQuality.[OptionName]

Changes the image compression based on the value in the job PrintTicket for PageOutputQuality

OptionName must be a name specified in the standard PrintSchema namespace.

PageOutputQuality.Draft=

MxdcImageType.JPEGHigh

PageOutputQuality.Normal=

MxdcImageType.JPEGMedium

PageOutputQuality.High=

MxdcImageType.PNG

XpsFormat

Changes the XPS format generated by the print system for this driver. Multiple values may be specified, and the order represents the driver's preference.

Not available for use in class drivers that use Unidrv/PScript rendering.

XpsFormat=XPS

XpsFormat=OpenXPS

XPSFormat=OpenXPS,XPS

XPSFormat=XPS,OpenXPS

OutputFormat

The OutputFormat directive describes a single PDL which is generated by this driver using a MIME type.

This information will be used during the CreateJob or CreateJob2 operation for WSD printers.

None.

Valid usage types include:

OutputFormat=

"application/oxps"

OutputFormat=

"application/vnd.ms-xpsdocument"

OutputFormat=

"image/pwg-raster"

OutputFormat=

"application/vnd.ms-3mfdocument"

Any other valid defined MIME type may also be specified here.

The MxdcImageType keyword for the PageOutputQuality directive has the following allowed values:

MxdcImageType value

MxdcImageType.JPEGHigh

High compression JPEG (smaller files)

MxdcImageType.JPEGMedium

Medium compression JPEG

MxdcImageType.JPEGLow

Low compression JPEG

MxdcImageType.PNG

PNG file type (largest files)

FileSave Section

This section supports the file-save scenario. When a v4 print driver is installed against the new PORTPROMPT port type, this section specifies the file extensions to be shown in the Common File window, and also specifies the localizable resource strings that support the extensions and the dialog box itself.

Directive Restrictions Usage

<FileExtensionName>

This directive describes the FileExtension to be used when saving a file from this driver using the PORTPROMPT port. The value is a resourceID from the driver's ResourceFile. For XPS and OXPS only, a resourceID of 0 may be specified and the print spooler will use its internal resources for these.

None.

<FileExtensionName>=

<resourceID>

Xps=1234

SaveAsTitle

This directive describes the title to be used on the Save File dialog. The value is a resourceID from the driver's ResourceFile.

None.

SaveAsTitle=

<resourceID>

SaveAsTitle=

4321

PrinterExtensions Section

The PrinterExtensions section specifies a printer extension and the invocation modes it supports. For both of these entries, the app will automatically be registered with the print system. In addition, the app will be configured with two different parameters, the PrinterDriverID and the ReasonID, in that order. As a result, each entry must use a different PrinterExtensionID GUID.

The following table shows the directives that are used in the PrinterExtensions section.

Directive Restrictions Usage

DriverEvent

App servicing the DriverEvent mode.

None.

DriverEvent=

app.exe,{extensionID GUID}

PrintPreferences

App servicing the PrintPreferences mode.

None.

PrintPreferences=

app.exe, {extensionID GUID}

The following is a sample of a v4 print driver manifest.

[DriverConfig]
DataFile=FAPDL.xml
RequiredFiles=UNIRES.DLL,STDNAMES.GPD,STDDTYPE.GDL,STDSCHEM.GDL,STDSCHMX.GDL,XPSSVCS.DLL,MSXPSINC.GPD,PWGRRenderFilter.DLL
ResourceFile=FARC.dll
PropertyBag=FAProperty.dpb
PrinterDriverID={GUID}
DriverCategory=PrintFax.Printer
ConstraintScript=faconst.js
EventFile=faevents.xml
PrinterExtensionUrl="https://www.fabrikam.com/download.asp?uiapp=120"
UserPropertyBagScope=Manufacturer
DataFileType="application/vnd.ms-PrintDeviceCapabilities+xml"
RetrievePrintDeviceCapabilitiesFromDevice=true

[BidiFiles]
BidiSPMFile=FABidiSPM.xml
BidiWSDFile=FABidiWSD.xml
BidiUSBFile=FaBidiUSB.xml
BidiUSBJSFile=FABidiUSBJS.js

[DriverRender]
PageOutputQuality.Draft=MxdcImageType.JPEGHigh
PageOutputQuality.Normal=MxdcImageType.JPEGMedium
PageOutputQuality.High=MxdcImageType.PNG
OutputFormat="image/pwg-raster"

[PrinterExtensions]
DriverEvent=FAapp.exe,{GUID}
PrintPreferences=FAapp.exe,{GUID2}

Printer INF File Entries