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}