V4 driver manifest

Important

The modern print platform is Windows' preferred means of communicating with printers. 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 Modern print platform and 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 with a v4 print driver INF file, as part of the setup 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 supports 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'll 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 can't 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 wil not 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 that 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 optional attributes associated with the driver.

NotShareable: This flag specifies that the driver isn't 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 isn't 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 that 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:

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

False: The driver's local DataFile won't 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's 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 is 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 is 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