7 Appendix B: Product Behavior

The information in this specification is applicable to the following Microsoft products or supplemental software. References to product versions include updates to those products.

Note: The terms "earlier" and "later", when used with a product version, refer to either all preceding versions or all subsequent versions, respectively. The term "through" refers to the inclusive range of versions. Applicable Microsoft products are listed chronologically in this section.

Windows version

Client role

Server role

Windows NT 3.1 operating system

Yes

Yes

Windows NT 3.5 operating system

Yes

Yes

Windows NT 3.51 operating system

Yes

Yes

Windows 95 operating system

Yes

Windows NT 4.0 operating system

Yes

Yes

Windows 98 operating system

Yes

Windows 2000 operating system

Yes

Yes

Windows Millennium Edition operating system

Yes

Windows XP operating system

Yes

Yes

Windows Server 2003 operating system

Yes

Yes

Windows Vista operating system

Yes

Yes

Windows Server 2008 operating system

Yes

Yes

Windows 7 operating system

Yes

Yes

Windows Server 2008 R2 operating system

Yes

Yes

Windows 8 operating system

Yes

Yes

Windows Server 2012 operating system

Yes

Yes

Windows 8.1 operating system

Yes

Yes

Windows Server 2012 R2 operating system

Yes

Yes

Windows 10 operating system

Yes

Yes

Windows Server 2016 operating system

Yes

Yes

Windows Server operating system

Yes

Yes

Windows Server 2019 operating system

Yes

Yes

Windows Server 2022 operating system

Yes

Yes

Windows 11 operating system

Yes

Yes

Windows Server 2025 operating system

Yes

Yes

Exceptions, if any, are noted in this section. If an update version, service pack or Knowledge Base (KB) number appears with a product name, the behavior changed in that update. The new behavior also applies to subsequent updates unless otherwise specified. If a product edition appears with the product version, behavior is different in that product edition.

Unless otherwise specified, any statement of optional behavior in this specification that is prescribed using the terms "SHOULD" or "SHOULD NOT" implies product behavior in accordance with the SHOULD or SHOULD NOT prescription. Unless otherwise specified, the term "MAY" implies that the product does not follow the prescription.

<1> Section 1.4:  Windows print servers can publish printers to Active Directory, and print clients can search Active Directory for printers. Windows NT 3.51 and Windows NT 4.0, print clients and servers do not interact with Active Directory.

<2> Section 1.7: The values of the dwBuildNumber member in the OSVERSIONINFO structure (section 2.2.3.10.1) for specific versions of Windows are shown in the table that follows.

Version

dwBuildNumber value

Windows Server 2019

>= 17633

Windows Server operating system

>= 16299

Windows 10 and Windows Server 2016

>= 10586

Windows 8.1 and Windows Server 2012 R2

>= 9431

Windows 8 and Windows Server 2012

>= 9200

Windows 7 and Windows Server 2008 R2

>= 7007

Windows Vista operating system with Service Pack 1 (SP1) and Windows Server 2008

>= 6001

Windows Vista and Windows Server 2008

>= 6000

Windows XP operating system Service Pack 1 (SP1)

>= 2196

Windows XP and Windows Server 2003

>= 2196

Windows 2000

>= 1382

Windows NT 4.0

>= 1381

<3> Section 2.1: The Windows server impersonates the client when processing a method, and it registers security providers as follows:

  • Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, and Windows 2000 servers do not register a security provider.

  • Windows Server 2003 server registers the NT LAN Manager (NTLM) security provider.

  • Otherwise, servers register the Simple and Protected GSS-API Negotiation Mechanism (SPNEGO) security provider.

<4> Section 2.2.1.2.7: The feature provided by the PORT_CONTAINER structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<5> Section 2.2.1.2.8: The feature provided by the PORT_VAR_CONTAINER structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<6> Section 2.2.1.2.10: The feature provided by the RPC_BIDI_REQUEST_CONTAINER structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000 operating system, and Windows Millennium Edition.

<7> Section 2.2.1.2.11: The feature provided by the RPC_BIDI_RESPONSE_CONTAINER structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, and Windows Millennium Edition.

<8> Section 2.2.1.2.12: The feature provided by the RPC_BINARY_CONTAINER structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, and Windows Millennium Edition. 

<9> Section 2.2.1.2.14: The feature provided by the SPLCLIENT_CONTAINER structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<10> Section 2.2.1.2.15: The feature provided by the STRING_CONTAINER structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<11> Section 2.2.1.2.16: The feature provided by the SYSTEMTIME_CONTAINER structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<12> Section 2.2.1.2.17: The feature provided by the RPC_BranchOfficeJobDataContainer structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<13> Section 2.2.1.3.1: The Windows operating system uses the following values to indicate printer drivers on different OS versions:

Value

Description

0x00000000

The printer driver for Windows 95, Windows 98, and Windows Millennium Edition.

0x00000001

The printer driver for Windows NT 3.51.

0x00000002

Kernel-mode printer driver for Windows NT 4.0.

0x00000003

User-mode printer driver for Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

0x00000004

User-mode printer driver for Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, and Windows Server 2019.

<14> Section 2.2.1.3.1: In Windows, a language monitor is specified for printers capable of bidirectional communication. The name is specific to a printer manufacturer. For example, the name of a language monitor could be "PJL monitor".

<15> Section 2.2.1.3.1: Windows print servers do not use this ordering for pDependentFiles members of returned DRIVER_INFO (section 2.2.1.5) and DRIVER_INFO and RPC_DRIVER_INFO Members (section 2.2.1.3.1) structures on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<16> Section 2.2.1.3.1: Windows operating systems use a combination of the OS major and minor numbers, the build number, and the revision. For example, the printer driver version number 0x000500020ECE0726 represents:

  • OS Major Version: 0x0005

  • OS Minor Version: 0x0002

  • Build number: 0x0ECE (3790)

  • Revision: 0x0726 (1830)

Windows clients use this value to check the versions of server printer driver, and when a version does not match, the user is prompted to update the driver.

<17> Section 2.2.1.3.6: In Windows, if non-NULL, the string length is less than or equal to 1,041 characters.

<18> Section 2.2.1.3.6: In Windows, if non-NULL, the string length is less than or equal to 256 characters.

<19> Section 2.2.1.3.7: The Windows implementation uses the following major version values.

Value

Description

0x00000004

The operating system is Windows 95, Windows NT 4.0, Windows 98, or Windows Millennium Edition.

0x00000005

The operating system is Windows 2000, Windows XP, or Windows Server 2003.

0x00000006

The operating system is Windows Vista, Windows Server 2008, Windows Server 2008 R2, Windows 7, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, or Windows Server 2019.

<20> Section 2.2.1.3.7: The Windows implementation uses the following minor version values.

Value

Description

0x00000000

The operating system is Windows 95, Windows NT 4.0, Windows 2000, Windows Vista, Windows Server 2008, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, or Windows Server 2019.

0x00000001

The operating system is Windows XP, Windows 7, Windows Server 2008, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, or Windows Server 2019.

0x00000002

The operating system is Windows XP Professional x64 Edition operating system or Windows Server 2003.

0x0000000A

The operating system is Windows 98.

0x0000005A

The operating system is Windows Millennium Edition.

<21> Section 2.2.1.3.7: The Windows implementation uses the following processor architecture values:

Name/value

Description

PROCESSOR_ARCHITECTURE_INTEL

0x0000

x86 architecture

PROCESSOR_ARCHITECTURE_IA64

0x0006

Itanium architecture

PROCESSOR_ARCHITECTURE_AMD64

0x0009

AMD64 architecture

PROCESSOR_ARCHITECTURE_ARM

0x0005

ARM architecture

<22> Section 2.2.1.4: In Windows the default job name is "No Document Name".

<23> Section 2.2.1.5.3: The feature provided by the RPC_DRIVER_INFO_3 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<24> Section 2.2.1.5.4: The feature provided by the RPC_DRIVER_INFO_4 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<25> Section 2.2.1.5.5: The feature provided by the RPC_DRIVER_INFO_6 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<26> Section 2.2.1.5.6: The feature provided by the RPC_DRIVER_INFO_8 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<27> Section 2.2.1.5.6: Windows uses INF files to define the printer driver configuration.

<28> Section 2.2.1.5.6: The PRINTER_DRIVER_PACKAGE_AWARE flag was introduced with Windows Vista.

<29> Section 2.2.1.5.6: Windows print servers determine that a printer driver supports the Microsoft XML Paper Specification (XPS) format described in [MSFT-XMLPAPER] if and only if the list of dependent files associated with that printer driver contains the file "PipelineConfig.xml".

This feature is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<30> Section 2.2.1.5.6: The PRINTER_DRIVER_SANDBOX_ENABLED flag and the feature it provides is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<31> Section 2.2.1.5.6: The PRINTER_DRIVER_CLASS flag and the feature it provides is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<32> Section 2.2.1.5.6: The PRINTER_DRIVER_DERIVED flag and the feature it provides is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<33> Section 2.2.1.5.6: The PRINTER_DRIVER_NOT_SHAREABLE flag and the feature it provides is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<34> Section 2.2.1.5.6: The PRINTER_DRIVER_CATEGORY_FAX flag and the feature it provides is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<35> Section 2.2.1.5.6: The PRINTER_DRIVER_CATEGORY_FILE flag and the feature it provides is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<36> Section 2.2.1.5.6: The PRINTER_DRIVER_CATEGORY_VIRTUAL flag and the feature it provides is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<37> Section 2.2.1.5.6: The PRINTER_DRIVER_CATEGORY_SERVICE flag and the feature it provides is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<38> Section 2.2.1.5.6: When the print queue is associated with a printer port corresponding to a USB printer, Windows print servers use the USB soft reset mechanism described in [USBPRINT] section 4.2.3. This feature and the PRINTER_DRIVER_SOFT_RESET_REQUIRED flag is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<39> Section 2.2.1.5.6: The PRINTER_DRIVER_CATEGORY_3D flag and the feature it provides is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<40> Section 2.2.1.5.6: The concepts of core printer driver and core driver dependencies are Windows–specific implementation details.

<41> Section 2.2.1.5.6: In Windows, this member applies to only package-aware printer driver.

<42> Section 2.2.1.5.6: Windows reads this value from the printer driver INF file.

<43> Section 2.2.1.6.2: The feature provided by the RPC_FORM_INFO_2 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<44> Section 2.2.1.6.2: Printer drivers generate an implementation-specific unique identifier. Windows print servers generate a unique GUID.

<45> Section 2.2.1.6.2: Windows provides Multilingual User Interface (MUI) DLLs that contain localized string resources for inbox printer drivers. For third-party printer drivers, whether to localize strings is an implementation decision.

<46> Section 2.2.1.7.3: The feature provided by the JOB_INFO_3 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<47> Section 2.2.1.7.4: The feature provided by the JOB_INFO_4 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<48> Section 2.2.1.9.2: Windows specifies a descriptive name for the port monitor. For example: "Standard TCP/IP Port", "Fax Monitor Port", or "Local Port".

<49> Section 2.2.1.9.3: The feature provided by the PORT_INFO_3 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<50> Section 2.2.1.9.4: The feature provided by the PORT_INFO_FF structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<51> Section 2.2.1.10.1: The feature provided by the PRINTER_INFO_STRESS structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<52> Section 2.2.1.10.1: Windows calculates the version by storing the build version in the high-order 16 bits, and the operation system release number in the low-order 16 bits. For example, 0x0A280005 corresponds to XP build 2600.

<53> Section 2.2.1.10.1: The Windows debugging build of the print server sets fFreeBuild to 0, and the release build of the print server sets fFreeBuild to 1.

<54> Section 2.2.1.10.1: Windows uses the following values:

Name/value

Description

PROCESSOR_INTEL_386

0x00000182

Intel 80386 compatible

PROCESSOR_INTEL_486

0x000001E6

Intel 80486 compatible

PROCESSOR_INTEL_PENTIUM

0x0000024A

Intel Pentium compatible

PROCESSOR_INTEL_IA64

0x00000898

Intel Itanium-based compatible

PROCESSOR_AMD_X8664

0x000021D8

AMD x64 compatible

PROCESSOR_ARM

0x00000000

ARM compatible

<55> Section 2.2.1.10.1: Windows returns a nonzero Win32 error code to indicate failure ([MS-ERREF] section 2.2).

<56> Section 2.2.1.10.1: Windows uses the following values:

Name/value

Description

PROCESSOR_ARCHITECTURE_INTEL

0x0000

x86 architecture

PROCESSOR_ARCHITECTURE_IA64

0x0006

Itanium architecture

PROCESSOR_ARCHITECTURE_AMD64

0x0009

AMD64 architecture

PROCESSOR_ARCHITECTURE_ARM

0x0005

ARM architecture

<57> Section 2.2.1.10.1: Windows uses the value of 1 for PROCESSOR_ARCHITECTURE_IA64 and PROCESSOR_ARCHITECTURE_AMD64.

For PROCESSOR_ARCHITECTURE_INTEL and PROCESSOR_ARCHITECTURE_ARM, Windows uses the value defined by the CPU vendor.

<58> Section 2.2.1.10.3: Windows servers select the first data type in the list of data types obtained from the print processor. This list is obtained by the same mechanism as in RpcEnumPrintProcessorDatatypes (section 3.1.4.8.5).

<59> Section 2.2.1.10.5: The feature provided by the PRINTER_INFO_4 structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<60> Section 2.2.1.10.6: The feature provided by the PRINTER_INFO_5 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<61> Section 2.2.1.10.7: The feature provided by the PRINTER_INFO_6 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<62> Section 2.2.1.10.8: The feature provided by the PRINTER_INFO_7 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<63> Section 2.2.1.10.9: The feature provided by the PRINTER_INFO_8 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<64> Section 2.2.1.10.10: The feature provided by the PRINTER_INFO_9 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<65> Section 2.2.1.11.1: The feature provided by the SPLCLIENT_INFO_1 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<66> Section 2.2.1.11.3: The feature provided for by the SPLCLIENT_INFO_3 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<67> Section 2.2.1.12.1: The feature provided by the RPC_BIDI_REQUEST_DATA structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, and Windows Millennium Edition.

<68> Section 2.2.1.12.1: The bidirectional communications schema is a hierarchy of printer attributes, some of which are properties, with the rest being values or value entries. Bidirectional communications interfaces are implemented by printer-specific components. A detailed description of printer drivers and the bidirectional communications schema can be found in the Windows Device Driver Kit. See [MSDN-MPD] and [MSDN-BIDI] for further information.

<69> Section 2.2.1.12.2: The feature provided by the RPC_BIDI_RESPONSE_DATA structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, and Windows Millennium Edition.

<70> Section 2.2.1.12.2: Windows returns a nonzero error code to indicate failure [MS-ERREF].

<71> Section 2.2.1.12.2: The bidirectional communications schema is a hierarchy of printer attributes, some of which are properties, with the rest being values or value entries. Bidirectional communications interfaces are implemented by printer-specific components. A detailed description of printer drivers and the bidirectional communications schema can be found in the Windows Device Driver Kit.

<72> Section 2.2.1.12.3: The feature provided by the RPC_BIDI_DATA structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, and Windows Millennium Edition.

<73> Section 2.2.1.13.1: The feature provided by the RPC_V2_NOTIFY_OPTIONS structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<74> Section 2.2.1.13.2: The feature provided by the RPC_V2_NOTIFY_OPTIONS_TYPE structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<75> Section 2.2.1.13.2: The feature provided by the SERVER_NOTIFY_TYPE flag is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<76> Section 2.2.1.13.3: The feature provided by the RPC_V2_NOTIFY_INFO structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<77> Section 2.2.1.13.4: The feature provided by the RPC_V2_NOTIFY_INFO_DATA structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<78> Section 2.2.1.13.5: The feature provided by the RPC_V2_NOTIFY_INFO_DATA_DATA union is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<79> Section 2.2.1.13.6: The feature provided by the RPC_V2_UREPLY_PRINTER union is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<80> Section 2.2.1.14.1: The feature provided by the RPC_PrintPropertyValue structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<81> Section 2.2.1.14.2: The feature provided by the RPC_PrintNamedProperty structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<82> Section 2.2.1.14.3: The feature provided by the RPC_EPrintPropertyType enumeration is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<83> Section 2.2.1.14.4: The feature provided by the Job Named Property with the name defined by the SPL_FILE_CONTENT_TYPE_PROP_NAME constant is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<84> Section 2.2.1.15.1: The feature provided by the EBranchOfficeJobEventType enumeration is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<85> Section 2.2.1.15.2: The feature provided by the RPC_BranchOfficeJobData structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<86> Section 2.2.1.15.3: The feature provided by the RPC_BranchOfficeJobDataError structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<87> Section 2.2.1.15.4: The feature provided by the RPC_BranchOfficeJobDataPipelineFailed structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<88> Section 2.2.1.15.5: The feature provided by the RPC_BranchOfficeJobDataPrinted structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<89> Section 2.2.1.15.6: The feature provided by the RPC_BranchOfficeJobDataRendered structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<90> Section 2.2.1.15.7: The feature provided by the RPC_BranchOfficeLogOfflineFileFull structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<91> Section 2.2.1.15.7: The maximum allowed size is determined by the implementation. On Windows, the default value is 10 MB.

<92> Section 2.2.2: The 64-bit Editions of Windows versions do not correctly handle custom-marshaled INFO structures where the unused space is not between the end of the last Fixed_Portion block and the beginning of the first Variable_Data field. This does not apply to the following Windows versions:

§ Windows NT 3.1

§ Windows NT 3.5

§ Windows NT 3.51

§ Windows NT 4.0

§ Windows 2000

<93> Section 2.2.2.1: Versions of initialization data specifications correspond to versions of Windows operating systems as follows.

Value

Description

0x0320

Windows NT 3.1, Windows NT 3.5, and Windows NT 3.51.

0x0400

Windows 95, Windows 98, and Windows Millennium Edition.

0x0401

Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, and Windows Server 2019.

<94> Section 2.2.2.1: Versions of printer drivers correspond to versions of Windows operating systems as follows.

Value

Description

0x0301 — 0x03FF

Windows NT 3.1, Windows NT 3.5, and Windows NT 3.51 user-mode printer drivers, and Windows NT 4.0 kernel-mode printer drivers.

0x0500 — 0x05FF

Windows 2000, Windows XP, and Windows Server 2003 user-mode printer drivers.

0x0600 — 0x06FF

Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, and Windows Server 2019.

<95> Section 2.2.2.1: The following tables lists the values that are not supported by Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, and Windows 95.

Name

Description

DMPAPER_12X11

12 x 11-inch sheet

DMPAPER_A3_ROTATED

A3 rotated sheet, 420 x 297 millimeters

DMPAPER_A4_ROTATED

A4 rotated sheet, 297 x 210 millimeters

DMPAPER_A5_ROTATED

A5 rotated sheet, 210 x 148 millimeters

DMPAPER_A6

A6 sheet, 105 x 148 millimeters

DMPAPER_A6_ROTATED

A6 rotated sheet, 148 x 105 millimeters

DMPAPER_B4_JIS_ROTATED

B4 (JIS) rotated sheet, 364 x 257 millimeters

DMPAPER_B5_JIS_ROTATED

B5 (JIS) rotated sheet, 257 x 182 millimeters

DMPAPER_B6_JIS

B6 (JIS) sheet, 128 x 182 millimeters

DMPAPER_B6_JIS_ROTATED

B6 (JIS) rotated sheet, 182 x 128 millimeters

DMPAPER_DBL_JAPANESE_POSTCARD

Double Japanese Postcard, 200 x 148 millimeters

DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED

Double Japanese Postcard Rotated, 148 x 200 millimeters

DMPAPER_JAPANESE_POSTCARD_ROTATED

Japanese Postcard Rotated, 148 x 100 millimeters

DMPAPER_JENV_CHOU3

Japanese Envelope Chou #3

DMPAPER_JENV_CHOU3_ROTATED

Japanese Envelope Chou #3 Rotated

DMPAPER_JENV_CHOU4

Japanese Envelope Chou #4

DMPAPER_JENV_CHOU4_ROTATED

Japanese Envelope Chou #4 Rotated

DMPAPER_JENV_KAKU2

Japanese Envelope Kaku #2

DMPAPER_JENV_KAKU2_ROTATED

Japanese Envelope Kaku #2 Rotated

DMPAPER_JENV_KAKU3

Japanese Envelope Kaku #3

DMPAPER_JENV_KAKU3_ROTATED

Japanese Envelope Kaku #3 Rotated

DMPAPER_JENV_YOU4

Japanese Envelope You #4

DMPAPER_JENV_YOU4_ROTATED

Japanese Envelope You #4 Rotated

DMPAPER_P16K

PRC 16K, 146 x 215 millimeters

DMPAPER_P16K_ROTATED

PRC 16K Rotated, 215 x 146 millimeters

DMPAPER_P32K

PRC 32K, 97 x 151 millimeters

DMPAPER_P32K_ROTATED

PRC 32K Rotated, 151 x 97 millimeters

DMPAPER_P32KBIG

PRC 32K(Big) 97 x 151 millimeters

DMPAPER_P32KBIG_ROTATED

PRC 32K(Big) Rotated, 151 x 97 millimeters

DMPAPER_PENV_1

PRC Envelope #1, 102 by 165 millimeters

DMPAPER_PENV_1_ROTATED

PRC Envelope #1 Rotated, 165 x 102 millimeters

DMPAPER_PENV_2

PRC Envelope #2, 102 x 176 millimeters

DMPAPER_PENV_2_ROTATED

PRC Envelope #2 Rotated, 176 x 102 millimeters

DMPAPER_PENV_3

PRC Envelope #3, 125 x 176 millimeters

DMPAPER_PENV_3_ROTATED

PRC Envelope #3 Rotated, 176 x 125 millimeters

DMPAPER_PENV_4

PRC Envelope #4, 110 x 208 millimeters

DMPAPER_PENV_4_ROTATED

PRC Envelope #4 Rotated, 208 x 110 millimeters

DMPAPER_PENV_5

PRC Envelope #5, 110 x 220 millimeters

DMPAPER_PENV_5_ROTATED

PRC Envelope #5 Rotated, 220 x 110 millimeters

DMPAPER_PENV_6

PRC Envelope #6, 120 x 230 millimeters

DMPAPER_PENV_6_ROTATED

PRC Envelope #6 Rotated, 230 x 120 millimeters

DMPAPER_PENV_7

PRC Envelope #7, 160 x 230 millimeters

DMPAPER_PENV_7_ROTATED

PRC Envelope #7 Rotated, 230 x 160 millimeters

DMPAPER_PENV_8

PRC Envelope #8, 120 x 309 millimeters

DMPAPER_PENV_8_ROTATED

PRC Envelope #8 Rotated, 309 x 120 millimeters

DMPAPER_PENV_9

PRC Envelope #9, 229 x 324 millimeters

DMPAPER_PENV_9_ROTATED

PRC Envelope #9 Rotated, 324 x 229 millimeters

DMPAPER_PENV_10

PRC Envelope #10, 324 x 458 millimeters

DMPAPER_PENV_10_ROTATED

PRC Envelope #10 Rotated, 458 x 324 millimeters

<96> Section 2.2.2.1:  The DMTT_DOWNLOAD_OUTLINE flag (downloaded TT fonts as outline soft fonts) is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, and Windows 95.

<97> Section 2.2.2.1:  The DMDITHER_ERRORDIFFUSION flag (error diffusion dithering) is only supported on the following Windows versions: Windows 95, Windows 98, and Windows Millennium Edition.

<98> Section 2.2.2.1: The value of this field is set by printer manufacturers, depending on the requirements of the printer driver.

<99> Section 2.2.2.1.1: PSCRIPT is the Windows PostScript core printer driver. It stores its private data in the _DEVMODE dmDriverExtraData field in one of the structures described in this section, followed by zero or one JTEXP (section 2.2.2.1.4) structure, followed by zero or more OEM_DMEXTRA (section 2.2.2.1.3) structures.

These structures are not part of the protocol defined in this specification, and they are subject to change without notice. Implementations of compatible printer drivers check the structure version and discard any data they do not handle.

Fields that are common to these structures are described following the last structure in this product behavior note.

PSDRVEXTRA351: The structure used by the PSCRIPT driver released with Windows NT 3.51 when the dmDriverVersion of the _DEVMODE structure is 0x0350.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

dwSignature

dwFlags

wchEPSFile (80 bytes)

...

...

...

caSize

caFlags

caIlluminantIndex

caRedGamma

caGreenGamma

caBlueGamma

caReferenceBlack

caReferenceWhite

caContrast

caBrightness

caColorfulness

caRedGreenTint

PSDRVEXTRA400: The structure used by the PSCRIPT driver released with Windows NT 4.0 when the dmDriverVersion of the _DEVMODE structure is 0x0400.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

dwSignature

dwFlags

wchEPSFile (80 bytes)

...

...

...

caSize

caFlags

caIlluminantIndex

caRedGamma

caGreenGamma

caBlueGamma

caReferenceBlack

caReferenceWhite

caContrast

caBrightness

caColorfulness

caRedGreenTint

wChecksum

wOptions

aOptions (256 bytes)

...

...

...

wChecksum (2 bytes): The value of this field is a checksum of the aubOptions array.

wOptions (2 bytes): The value of this field is the number of entries in the aubOptions array that are initialized.

aubOptions (256 bytes): This field is an array of 64 bytes in length and contains user interface selections. Unused fields are initialized to zero. The meaning of the entries in this array differs for each supported printer model. Upon receipt, the checksum of this array is computed and compared to wChecksum. The array is used only if the checksums match.

PSDRVEXTRA500: The structure used by the PSCRIPT driver released with Windows 2000 and Windows XP when the dmDriverVersion of the _DEVMODE structure is 0x0501.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

dwSignature

dwFlags

wchEPSFile (80 bytes)

...

...

...

caSize

caFlags

caIlluminantIndex

caRedGamma

caGreenGamma

caBlueGamma

caReferenceBlack

caReferenceWhite

caContrast

caBrightness

caColorfulness

caRedGreenTint

wReserved1

wSize

fxScrFreq

fxScrAngle

iDialect

iTTDLFmt

bReversePrint

iLayout

iPSLevel

dwReserved2

wOEMExtra

wVer

dwX

dwY

dwWidthOffset

dwHeightOffset

wFeedDirection

wCutSheet

dwReserved3 (16 bytes)

...

...

...

dwChecksum32

dwOptions

aOptions (256 bytes)

...

...

...

wReserved1 (2 bytes): Zero when sent and ignored on receipt.

wSize (2 bytes): The same as wCoreFullSize in PSDRVEXTRA.

PSDRVEXTRA: The structure used by the PSCRIPT driver released with Windows except for Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003, when the dmDriverVersion value of the _DEVMODE structure is 0x0600.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

dwSignature

dwFlags

wchEPSFile (80 bytes)

...

...

...

caSize

caFlags

caIlluminantIndex

caRedGamma

caGreenGamma

caBlueGamma

caReferenceBlack

caReferenceWhite

caContrast

caBrightness

caColorfulness

caRedGreenTint

wCoreJTExpSize

wCoreFullSize

fxScrFreq

fxScrAngle

iDialect

iTTDLFmt

bReversePrint

iLayout

iPSLevel

dwReserved2

wOEMExtra

wVer

dwX

dwY

dwWidthOffset

dwHeightOffset

wFeedDirection

wCutSheet

dwReserved3 (16 bytes)

...

...

...

dwChecksum32

dwOptions

aOptions (512 bytes)

...

...

...

dwNupDirection

dwNupBorderFlags

dwBookletFlags

dwPadding

wCoreJTExpSize (2 bytes): The size of the optional JTEXP structure that can follow this structure.

wCoreFullSize (2 bytes): The size of the PSDRVEXTRA structure plus the value of wCoreJTExpSize.

dwNupDirection (4 bytes): One of the following values. This field is used only if N-Up printing is selected.

Value

Description

0x00000001

Print N-Up pages left-to-right, top-to-bottom.

0x00000002

Print N-Up pages top-to-bottom, left-to-right.

0x00000004

Print N-Up pages right-to-left, top-to-bottom.

0x00000008

Print N-Up pages top-to-bottom, right-to-left.

dwNupBorderFlags (4 bytes): One of the following values. This field is used only if N-Up printing is selected.

Value

Description

0x00000000

Print borders around N-Up pages.

0x00000001

Do not print borders around N-Up pages.

dwBookletFlags (4 bytes): One of the following values. This field is used only if booklet printing is selected.

Value

Description

0x00000000

Print booklet so that pages flip to the left (western style).

0x00000001

Print booklet so that pages flip to the right.

dwPadding (4 bytes): Zero when sent and ignored on receipt.

The following are descriptions of common fields in PSDRVEXTRA structures.

dwSignature (4 bytes): The value 0x56495250.

dwFlags (4 bytes): The bitwise OR of zero or more of the following values.

Value

Description

0x00000002

Send PostScript driver error handler code.

0x00000004

Print mirror image.

0x00000010

Print negative image of page.

0x00000040

Compress bitmaps.

0x00000200

If _DEVMODE field dmOrientation is set to 2 (LANDSCAPE), rotate page by an additional 180 degrees.

0x00002000

If driver is initialized by GDI, inform GDI that metafile spooling is requested.

wchEPSFile (80 bytes): Not used.

caSize (2 bytes): The value 24.

caFlags (2 bytes): Not used.

caIlluminantIndex (2 bytes): Not used.

caRedGamma (2 bytes): Not used.

caGreenGamma (2 bytes): Not used.

caBlueGamma (2 bytes): Not used.

caReferenceBlack (2 bytes): Not used.

caReferenceWhite (2 bytes): Not used.

caContrast (2 bytes): Not used.

caBrightness (2 bytes): Not used.

caColorfulness (2 bytes): Not used.

caRedGreenTint (2 bytes): Not used.

fxScrFreq (2 bytes): Not used.

fxScrAngle (4 bytes): Not used.

iDialect (4 bytes): One of the following values.

Value

Description

0x00000000

Optimize generated PostScript for speed.

0x00000001

Optimize generated PostScript for portability.

0x00000002

Optimize generated PostScript for EPS use.

0x00000003

Optimize generated PostScript for archival.

iTTDLFmt (4 bytes): One of the following values.

Value

Description

0x00000000

Download fonts in default format, pick the best suited format for font.

0x00000001

Download fonts as Type 1 outlines.

0x00000002

Download fonts as Type 3 bitmaps.

0x00000003

Download fonts as Type 42 fonts.

0x00000004

Same as 0x00000000.

0x00000005

Same as 0x00000000.

bReversePrint (4 bytes): Page printing order. If the value of this field is nonzero, print pages in reverse order; otherwise, print pages in normal order.

iLayout (4 bytes): One of the following values.

Value

Description

0x00000000

N-Up printing disabled.

0x00000001

Print 2-Up.

0x00000002

Print 4-Up.

0x00000003

Print 6-Up.

0x00000004

Print 9-Up.

0x00000005

Print 16-Up.

0x00000006

Print as a booklet.

iPSLevel (4 bytes): One of the following values.

Value

Description

0x00000001

Use only PostScript level 1 features.

0x00000002

Use only PostScript level 1 and level 2 features.

0x00000003

Use all PostScript features available for level 1, level 2, and level 3.

dwReserved2 (4 bytes): Zero when sent and ignored on receipt.

wOEMExtra (2 bytes): The total size of the optional private data that can follow this structure. It is used by the vendor-supplied printer driver plug-in.

wVer (2 bytes): The value 0x0010.

dwX (4 bytes): The width in 1/1000th millimeter units of the custom paper size. This field is used only if the dmPaperSize field of _DEVMODE is set to 0x7FFF.

dwY (4 bytes): The height in 1/1000th millimeter units of the custom paper size. This field is used only if the dmPaperSize field of _DEVMODE is set to 0x7FFF.

dwWidthOffset (4 bytes): The left unprintable margin, in 1/1000th of a millimeter, of the custom paper size. This field is used only if the dmPaperSize field of _DEVMODE is set to 0x7FFF.

dwHeightOffset (4 bytes): The top unprintable margin, in 1/1000th of a millimeter, of the custom paper size. This field is used only if the dmPaperSize field of _DEVMODE is set to 0x7FFF.

wFeedDirection (2 bytes): One of the following values.

Value

Description

0x0000

The paper is physically fed into the print mechanism with its long edge first.

0x0001

The paper is physically fed into the print mechanism with its short edge first.

0x0002

The paper is physically fed into the print mechanism with its long edge first, but upside down.

0x0003

The paper is physically fed into the print mechanism with its long edge first, but upside down.

wCutSheet (2 bytes): Zero for roll-fed custom paper sizes and nonzero for cut sheet custom paper. This field is used only if the dmPaperSize field of _DEVMODE is set to 0x7FFF.

dwReserved3 (16 bytes): Zero when sent and ignored on receipt.

dwChecksum32 (4 bytes): The checksum of the names of the vendor-defined features and feature options that are supported by the printer model, as provided by the printer driver. The checksum is calculated using the 32-bit cyclic redundancy check (CRC) function defined in section 3.2.9 of [IEEE802.3-2008]. For each feature, the checksum is calculated on the null-terminated ASCII string representations of the feature name and each of the feature options in order. The checksum is accumulated in this manner over all the features supported by the printer model.

dwOptions (4 bytes): The number of entries in the aOptions array.

aOptions (256 or 512 bytes): An array that contains the options selected by the user for each vendor-defined feature. Unused fields are initialized to zero. The meanings of the values differ for each supported printer model.

<100> Section 2.2.2.1.2: UNIDRV is the generic Windows core printer driver for all printers that do not use PostScript. It stores its private data in the _DEVMODE dmDriverExtraData field in one of the structures described in this section, followed by zero or one JTEXP (section 2.2.2.1.4) structure, followed by zero or more OEM_DMEXTRA (section 2.2.2.1.3) structures.

These structures are not part of the protocol defined in this specification, and they are subject to change without notice. Implementations of compatible printer drivers check the structure version and discard any data they do not handle.

Fields that are common to these structures are described following the last structure in this product behavior note.

UNIDRVEXTRA3_4: defined by the UNIDRV driver released with Windows NT 3.5 and Windows NT 4.0. This structure is used for dmDriverExtraData if the dmDriverVersion field of the _DEVMODE structure is 0x0301.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

wReserved[0]

...

...

(repeats for total of 56 reserved words)

wReserved: This field is no longer used by UNIDRV.

UNIDRVEXTRA500: The structure used by the UNIDRV driver released with Windows 2000 and Windows XP when the dmDriverVersion field of the DEVMODE structure is 0x0500.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

dwSignature

wVer

sPadding

wSize

wOEMExtra

dwChecksum32

dwFlags

bReversePrint

iLayout

iQuality

wReserved

...

...

...

...

...

dwOptions

aOptions[0]

...

(repeats for a total of 128 aOptions array elements)

aOptions[127]

sPadding: Zero when sent and ignored on receipt.

wSize: The same as wCoreFullSize in UNIDRVEXTRA.

UNIDRVEXTRA: The structure used by the UNIDRV driver released with Windows except for Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003, when the dmDriverVersion value of the DEVMODE structure is 0x0600.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

dwSignature

wVer

wCoreJTExpSize

wCoreFullSize

wOEMExtra

dwChecksum32

dwFlags

bReversePrint

iLayout

iQuality

wReserved

...

...

...

...

...

dwOptions

aOptions[0]

...

(repeats for a total of 128 aOptions array elements)

aOptions[127]

dwNupDirection

dwNupBorderFlags

dwBookletFlags

wCoreJTExpSize (2 bytes): The size of the optional JTEXP structure that can follow this structure.

wCoreFullSize (2 bytes): The size of the UNIDRVEXTRA structure plus the value of wCoreJTExpSize.

dwNupDirection (4 bytes): One of the following values. This field is used only if N-Up printing is selected.

Value

Description

0x00000001

Print N-Up pages left-to-right, top-to-bottom.

0x00000002

Print N-Up pages top-to-bottom, left-to-right.

0x00000004

Print N-Up pages right-to-left, top-to-bottom.

0x00000008

Print N-Up pages top-to-bottom, right-to-left.

dwNupBorderFlags (4 bytes): One of the following values. This field is used only if N-Up Printing is selected.

Value

Description

0x00000000

Print borders around N-Up pages.

0x00000001

Do not print borders around N-Up pages.

dwBookletFlags (4 bytes): One of the following values. This field is used only if booklet printing is selected.

Value

Description

0x00000000

Print booklet so that pages flip to the left (western style).

0x00000001

Print booklet so that pages flip to the right.

The following are descriptions of common fields in UNIDRVEXTRA structures.

dwSignature (4 bytes): The value 0x44494E55.

dwFlags (4 bytes): The bitwise OR of zero or more of the following values.

Value

Description

0x00000002

Print text as graphics (do not use fonts).

0x00000010

Do not use EMFSPOOL spooling.

0x00000080

Use Custom Quality halftoning.

bReversePrint (4 bytes): Page printing order. If the value is nonzero, print pages in reverse order; otherwise, print pages in normal order.

iLayout (4 bytes): One of the following values.

Value

Description

0x00000000

N-Up printing disabled.

0x00000001

Print 2-Up.

0x00000002

Print 4-Up.

0x00000003

Print 6-Up.

0x00000004

Print 9-Up.

0x00000005

Print 16-Up.

0x00000006

Print as a booklet.

iQuality (4 bytes): One of the following values.

Value

Description

0x00000000

Best Quality

0x00000001

Medium Quality

0x00000002

Draft Quality

wReserved (12 bytes): Zero when sent and ignored on receipt.

wOEMExtra (2 bytes): The total size of the optional private data that can follow this structure. It is used by the vendor-supplied printer driver plug-in.

wVer (2 bytes): The value 0x0022.

dwChecksum32 (4 bytes): The checksum of the names of the vendor-defined features and feature options that are supported by the printer model, as provided by the printer driver. The checksum is calculated using the 32-bit CRC function defined in section 3.2.9 of [IEEE802.3-2008]. For each feature, the checksum is calculated on the null-terminated ASCII string representations of the feature name and each of the feature options in order. The checksum is accumulated in this manner over all the features supported by the printer model.

dwOptions (4 bytes): The number of entries in the aOptions array.

aOptions (512 bytes): An array that contains the options selected by the user for each vendor-defined feature. Unused fields are initialized to zero. The meanings of the values differ for each supported printer model.

<101> Section 2.2.2.1.3: This is the OEM_DMEXTRA structure, which contains the _DEVMODE dmDriverExtraData defined by vendor-supplied driver plug-in modules.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

dwSize

dwSignature

dwVersion

Vendor-defined Data (variable)

...

dwSize (4 bytes): The total size of the vendor-defined data.

dwSignature (4 bytes): A vendor-defined unique number.

dwVersion (4 bytes): The version of the vendor-supplied plug-in.

Vendor-defined Data (variable): A variable-length field that holds vendor-defined data.

<102> Section 2.2.2.1.4: This is the JTEXP structure, which contains the _DEVMODE dmDriverExtraData defined by Windows to hold feature selection information.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

dwSize

dwSignature

dwVersion

wJTHdrSize

wCoreMFOSize

ModelName (variable)

...

FeatureOptionPairs (variable)

...

dwSize (4 bytes): The total size of the JTEXP structure. This size is large enough to accommodate any possible combination of options for the vendor-specified features stored in FeatureOptionPairs.

dwSignature (4 bytes): The value 0x534D544A.

dwVersion (4 bytes): The value zero.

wJTHdrSize (2 bytes): The value 16.

wCoreMFOSize (2 bytes): The combined size of ModelName and FeatureOptionPairs. This is exactly 16 bytes less than dwSize.

ModelName (variable): A zero-terminated UTF-16LE encoded string specifying the name of the printer model.

FeatureOptionPairs (variable): A concatenation of an even number of zero-terminated ASCII strings, terminated by an additional zero character. Each pair of two consecutive strings specifies a vendor-defined feature and the currently selected option for that feature. Each printer driver provides its own list of features and possible option values for each feature.

<103> Section 2.2.2.4.3: The feature provided by the _DRIVER_INFO_3 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<104> Section 2.2.2.4.4: The feature provided by the _DRIVER_INFO_4 structure is not supported on the following Windows version: Windows 2000.

<105> Section 2.2.2.4.5: The feature provided by the _DRIVER_INFO_5 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<106> Section 2.2.2.4.6: The feature provided by the _DRIVER_INFO_6 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<107> Section 2.2.2.4.6: In Windows implementations, the driver version is matched to the version portion of the INF file DriverVer member. For information about INF file syntax, see [MSDN-UINF] .

<108> Section 2.2.2.4.7: The feature provided by the _DRIVER_INFO_7 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, and Windows Millennium Edition.

<109> Section 2.2.2.4.7: Windows uses INF files for installation configuration data. For more information, see [MSDN-UINF] for more details.

<110> Section 2.2.2.4.8: The feature provided by the _DRIVER_INFO_8 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<111> Section 2.2.2.4.8: In Windows implementations, the driver version is matched to the version portion of the INF file DriverVer member. For information about INF file syntax, see [MSDN-UINF].

<112> Section 2.2.2.4.8: In Windows, this member applies to only package-aware printer driver.

<113> Section 2.2.2.4.8: Windows reads this value from the printer driver INF file.

<114> Section 2.2.2.4.9: In Windows, this member applies to only package-aware printer driver.

<115> Section 2.2.2.4.9: In Windows implementations, the driver version is matched to the version portion of the INF file DriverVer member. For information about INF file syntax, see [MSDN-UINF].

<116> Section 2.2.2.4.10: Windows print clients use this field to detect changes to printer driver files and to decide whether to update their local copies.

<117> Section 2.2.2.5.2: The feature provided by the _FORM_INFO_2 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<118> Section 2.2.2.6.3: The feature provided by the _JOB_INFO_3 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<119> Section 2.2.2.6.4: The feature provided by the _JOB_INFO_4 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<120> Section 2.2.2.9.1: The feature provided by the _PRINTER_INFO_STRESS structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<121> Section 2.2.2.9.1: Windows calculates the version by storing the build version in the high-order 16 bits, and the operation system release number in the low-order 16 bits. For example, 0x0A280005 corresponds to XP build 2600.

<122> Section 2.2.2.9.1: The Windows debugging build of the print server sets fFreeBuild to 0, and the release build of the print server sets fFreeBuild to 1.

<123> Section 2.2.2.9.1: Windows uses the following values.

Name/value

Description

PROCESSOR_INTEL_386

0x00000182

Intel 80386 compatible

PROCESSOR_INTEL_486

0x000001E6

Intel 80486 compatible

PROCESSOR_INTEL_PENTIUM

0x0000024A

Intel Pentium compatible

PROCESSOR_INTEL_IA64

0x00000898

Intel Itanium-based compatible

PROCESSOR_AMD_X8664

0x000021D8

AMD x64 compatible

PROCESSOR_ARM

0x00000000

ARM compatible

<124> Section 2.2.2.9.1: Windows returns a nonzero Microsoft Win32 error code to indicate failure ([MS-ERREF] section 2.2).

<125> Section 2.2.2.9.1: Windows uses the following values:

Name/value

Description

PROCESSOR_ARCHITECTURE_INTEL

0x0000

x86 architecture

PROCESSOR_ARCHITECTURE_IA64

0x0006

Itanium architecture

PROCESSOR_ARCHITECTURE_AMD64

0x0009

AMD64 architecture

PROCESSOR_ARCHITECTURE_ARM

0x0005

ARM architecture

<126> Section 2.2.2.9.1: Windows uses the value of 1 for PROCESSOR_ARCHITECTURE_IA64 and PROCESSOR_ARCHITECTURE_AMD64.

<127> Section 2.2.2.9.5: The feature provided for by the _PRINTER_INFO_4 structure is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<128> Section 2.2.2.9.6: The feature provided by the _PRINTER_INFO_5 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<129> Section 2.2.2.9.7: The feature provided by the _PRINTER_INFO_6 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<130> Section 2.2.2.9.8: The feature provided by the _PRINTER_INFO_7 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<131> Section 2.2.2.9.9: The feature provided by the _PRINTER_INFO_8 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<132> Section 2.2.2.11: The feature provided by the PRINTER_ENUM_VALUES structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<133> Section 2.2.2.12: The Windows print server obtains this checksum by calling the GdiQueryFonts API method.

<134> Section 2.2.2.13:  The feature provided by the CORE_PRINTER_DRIVER structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<135> Section 2.2.2.13: In Windows, this member applies to only package-aware printer driver.

<136> Section 2.2.2.13: In Windows implementations, the driver version is matched to the version portion of the INF file DriverVer member. For information about INF file syntax, see [MSDN-UINF].

<137> Section 2.2.2.14.4: The feature provided by the PORT_DATA_2 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<138> Section 2.2.2.14.5: The feature provided by the PORT_DATA_LIST_1 structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<139> Section 2.2.2.15.3: The feature provided by the WSD_BACKUP_PORT_DATA_EX structure is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<140> Section 2.2.2.16.1:  Supported on Windows Server 2022 and later.

<141> Section 2.2.2.16.2:  Supported on Windows Server 2022 and later.

<142> Section 2.2.3.1: The feature provided by the JOB_ACCESS_READ value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<143> Section 2.2.3.1: The feature provided by the PRINTER_ACCESS_MANAGE_LIMITED value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<144> Section 2.2.3.1: The feature provided by the SPECIFIC_RIGHTS_ALL value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<145> Section 2.2.3.1: The feature provided by the STANDARD_RIGHTS_ALL value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<146> Section 2.2.3.1: The feature provided by the SYNCHRONIZE value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<147> Section 2.2.3.2: Change notification flags are not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows 95, Windows 98, and Windows Millennium Edition.

<148> Section 2.2.3.3: Job notification values are not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows 95, Windows 98, and Windows Millennium Edition.

<149> Section 2.2.3.4: The feature provided by the SERVER_NOTIFY_FIELD_PRINT_DRIVER_ISOLATION_GROUP value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<150> Section 2.2.3.6.1: The feature provided by the PRINTER_CHANGE_SET_PRINTER_DRIVER flag is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<151> Section 2.2.3.6.1: The feature provided by the PRINTER_CHANGE_ALL flag is supported on the following Windows versions: Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<152> Section 2.2.3.6.1: The feature provided by the PRINTER_CHANGE_ALL_2 flag is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<153> Section 2.2.3.6.2: The feature provided by the PRINTER_CHANGE_FAILED_CONNECTION_PRINTER flag is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<154> Section 2.2.3.6.2: The feature provided by the PRINTER_CHANGE_SERVER flag is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<155> Section 2.2.3.7: Windows displays this printer in its list of network-available printers.

<156> Section 2.2.3.7: Windows displays this printer in its list of network-available printers.

<157> Section 2.2.3.7: Windows displays this printer in its list of network-available printers.

<158> Section 2.2.3.7: Windows displays this printer in its list of network-available printers.

<159> Section 2.2.3.7: The feature provided by the PRINTER_ENUM_HIDE flag is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<160> Section 2.2.3.8: 3D printers are not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<161> Section 2.2.3.8: The feature provided by the PRINTER_NOTIFY_CATEGORY_ALL value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<162> Section 2.2.3.8: The feature provided by the PRINTER_NOTIFY_CATEGORY_3D value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<163> Section 2.2.3.8: Unless noted otherwise, these printer notification values are not supported on the following Windows versions: Windows NT 3.1, Windows 98, and Windows Millennium Edition.

<164> Section 2.2.3.8: The feature provided by the PRINTER_NOTIFY_FIELD_BRANCH_OFFICE_PRINTING value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<165> Section 2.2.3.8: The feature provided by the of the PRINTER_NOTIFY_FIELD_OBJECT_GUID value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<166> Section 2.2.3.10: The feature provided by the "NetPopup" value is supported on the following Windows versions: Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP, and Windows Server 2003.

<167> Section 2.2.3.10: The feature provided by the "NetPopupToComputer" value is supported on the following Windows versions: Windows 2000, and Windows Server 2003.

<168> Section 2.2.3.10: Windows does not use this key name remotely.

<169> Section 2.2.3.10: Windows does not use this key name remotely.

<170> Section 2.2.3.10: Windows does not use this key name remotely.

<171> Section 2.2.3.10: Windows does not use this key name remotely.

<172> Section 2.2.3.10: The feature provided by the "RetryPopup" value is supported on the following Windows versions: Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP, and Windows Server 2003.

<173> Section 2.2.3.10: Windows does not use this key name remotely.

<174> Section 2.2.3.10: Windows does not use this key name remotely.

<175> Section 2.2.3.10: Windows does not use this key name remotely.

<176> Section 2.2.3.10: The feature provided by the "PrintDriverIsolationGroups" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<177> Section 2.2.3.10: The feature provided by the "PrintDriverIsolationTimeBeforeRecycle" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<178> Section 2.2.3.10: The feature provided by the "PrintDriverIsolationMaxobjsBeforeRecycle" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<179> Section 2.2.3.10: The feature provided by the "PrintDriverIsolationIdleTimeout" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<180> Section 2.2.3.10: The feature provided by the "PrintDriverIsolationExecutionPolicy" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<181> Section 2.2.3.10: The feature provided by the "PrintDriverIsolationOverrideCompat" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<182> Section 2.2.3.10: Windows by default does not configure this value, allowing drivers with a driver version (cVersion in section 2.2.1.3.1) of 0x00000004 to run printer UI applications if available. An administrator can change this behavior by creating the "HKLM\Software\Policies\Microsoft\Windows NT\Printers\V4DriverDisallowPrinterUIApp" REG_DWORD value in the registry and initializing this value with 0x00000001. This feature is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<183> Section 2.2.3.10.1: The values of the dwBuildNumber member in the OSVERSIONINFO structure (section 2.2.3.10.1) for specific versions of Windows are listed in the product behavior note for dwBuildNumber in Versioning and Capability Negotiation (section 1.7).

<184> Section 2.2.3.10.3: Windows uses the following values to specify information about the OS type for use with Server Handle Key Values (section 2.2.3.10).

Name/value

Description

VER_NT_WORKSTATION

0x00000001

The value indicates one of the following Windows versions: Windows 2000 Professional operating system, Windows XP, Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows Server 2016, Windows Server operating system, or Windows Server 2019.

VER_NT_DOMAIN_CONTROLLER

0x00000002

This value indicates one of the following Windows versions: Windows 2000 Server operating system, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, or Windows Server 2019.

VER_NT_SERVER

0x00000003

This value indicates one of the following windows versions: Windows 2000 Server, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, or Windows Server 2019.

<185> Section 2.2.3.10.5: Windows uses the following values, which can be combined to specify multiple product suites.

Name/value

Description

VER_SUITE_SMALLBUSINESS

0x00000001

Microsoft Small Business Server was once installed on the system, but it might have been upgraded to another version of Windows.

VER_SUITE_ENTERPRISE

0x00000002

Windows NT Server 4.0 operating system, Enterprise Edition, Windows 2000 Advanced Server operating system, Windows Server 2003 Enterprise Edition operating system, or Windows Server 2008 Enterprise operating system is installed.

VER_SUITE_BACKOFFICE

0x00000004

Microsoft BackOffice components are installed.

VER_SUITE_TERMINAL

0x00000010

Terminal Services is installed. If VER_SUITE_TERMINAL is set but VER_SUITE_SINGLEUSERTS is not set, the system is running in application server mode.

VER_SUITE_SMALLBUSINESS_RESTRICTED

0x00000020

Microsoft Small Business Server is installed with the restrictive client license in force.

VER_SUITE_EMBEDDEDNT

0x00000040

Windows XP Embedded is installed.

VER_SUITE_DATACENTER

0x00000080

Windows 2000 Datacenter Server operating system, Windows Server 2003 Datacenter Edition operating system, or Windows Server 2008 Datacenter operating system is installed.

VER_SUITE_SINGLEUSERTS

0x00000100

Remote Desktop is supported, but only one interactive session. This value is set unless the system is running in application server mode.

VER_SUITE_PERSONAL

0x00000200

Windows XP Home Edition operating system, Windows Vista Home Basic, or Windows Vista Home Premium is installed.

VER_SUITE_BLADE

0x00000400

Windows Server 2003 Web Edition operating system is installed.

VER_SUITE_STORAGE_SERVER

0x00002000

Windows Storage Server 2003 R2 or Windows Storage Server 2003 is installed.

VER_SUITE_COMPUTE_SERVER

0x00004000

Windows Server 2003 operating system Compute Cluster Edition is installed.

VER_SUITE_WH_SERVER

0x00008000

Windows Home Server is installed.

<186> Section 2.2.3.11: The feature provided by the "Behavior optional" column is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<187> Section 2.2.3.11: The feature provided by the "HardwareId" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<188> Section 2.2.3.11: The feature provided by the "EnableBranchOfficePrinting" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<189> Section 2.2.3.11: The feature provided by the "SeparatorFileData" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<190> Section 2.2.3.11: Windows reports as the last driver identifier in the list the Microsoft Universal Sharing driver ({A9838643-5862-4F72-ACAF-F4CECE098759}). This value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<191> Section 2.2.3.11: The feature provided by the "XpsFormat" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<192> Section 2.2.3.11: The feature provided by the "MergedData" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<193> Section 2.2.3.11: The feature provided by the "MergedDataName" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<194> Section 2.2.3.11: The feature provided by the "BranchOfficeLoggingEnabled" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<195> Section 2.2.3.11: The feature provided by the "BranchOfficeOfflineLogSize" value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<196> Section 2.2.3.11: The default value on Windows implementations is 10 MB.

<197> Section 2.2.3.12: The feature provided by the PRINTER_STATUS_POWER_SAVE value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<198> Section 2.2.3.12: The feature provided by the PRINTER_STATUS_SERVER_OFFLINE value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<199> Section 2.2.3.12: The feature provided by the PRINTER_STATUS_SERVER_UNKNOWN value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<200> Section 2.2.3.12: The feature provided by the PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<201> Section 2.2.3.12: The feature provided by the PRINTER_ATTRIBUTE_ENABLE_BIDI value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<202> Section 2.2.3.12: The feature provided by the PRINTER_ATTRIBUTE_ENABLE_DEVQ value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<203> Section 2.2.3.12: The feature provided by the PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<204> Section 2.2.3.12: The feature provided by the PRINTER_ATTRIBUTE_PUBLISHED value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<205> Section 2.2.3.12: The feature provided by the PRINTER_ATTRIBUTE_RAW_ONLY value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<206> Section 2.2.3.12: The feature provided by the PRINTER_ATTRIBUTE_WORK_OFFLINE value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<207> Section 2.2.3.12: The feature provided by the JOB_STATUS_BLOCKED_DEVQ value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<208> Section 2.2.3.12: The feature provided by the JOB_STATUS_DELETED value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<209> Section 2.2.3.12: The feature provided by the JOB_STATUS_RESTART value is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<210> Section 2.2.3.12: The feature provided by the JOB_STATUS_USER_INTERVENTION value is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<211> Section 2.2.4.2: Windows supports the spool file data type formats EMFSPOOL, RAW format, XML Paper Specification (XPS), and custom data types defined by custom print processors. For more information on these formats, see [MS-EMFSPOOL], [MSDN-SPOOL], [MSDN-XMLP], and [MSFT-XMLPAPER].

Windows standard print processors support the following case-insensitive data type name strings:

Value

Description

"RAW"

RAW

"RAW [FF appended]"

RAW

"RAW [FF auto]"

RAW

"NT EMF 1.003"

EMFSPOOL

"NT EMF 1.006"

EMFSPOOL

"NT EMF 1.007"

EMFSPOOL

"NT EMF 1.008"

EMFSPOOL

"TEXT"

Plain text

"XPS_PASS"

XPS passthrough: Not supported on Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

"XPS2GDI"

XPS data to be converted into a new Graphics Device Interface (GDI) print job to send to the device: Not supported on Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<212> Section 2.2.4.3: Windows restricts driver name strings to 260 characters, including the terminating null character.

<213> Section 2.2.4.4: The environment name strings "Windows 4.0" and "Windows NT x86" are not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

The environment name string "Windows IA64" is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

The environment name string "Windows x64" is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, and Windows Millennium Edition.

The environment name string "Windows ARM" is not supported on the following Windows versions, and only on print servers with the "Windows ARM" operating system environment: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<214> Section 2.2.4.5: Windows restricts form name strings to 260 characters, including the terminating null character.

<215> Section 2.2.4.7: Windows restricts key name strings to 260 characters, including the terminating null character.

<216> Section 2.2.4.8: Windows restricts monitor name strings to 260 characters, including the terminating null character.

<217> Section 2.2.4.9: IPv6 names are not supported on Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<218> Section 2.2.4.9: Windows uses the following pattern for local files:

 NAME = <any TEXT except "\">
  
 DIRECTORY = "\" 1#NAME
  
 FILENAME = "\" 1#NAME
  
 PATH = [alpha ":"] #DIRECTORY FILENAME

<219> Section 2.2.4.9: Windows restricts path name strings to 519 characters, including the terminating null character.

<220> Section 2.2.4.10: Windows uses the following patterns for port (2) names:

 PARALLEL_PORT = "LPT" DIGIT ":"
  
 SERIAL_PORT = "COM" DIGIT ":"
  
 FILE_PORT = "FILE:"
  
 USB_PORT = "USB" 1#DIGIT ":"
  
 UNC_PORT = SERVER_NAME DIRECTORY FILENAME
  
 LOCAL_FILE_PORT = PATH
  
 PORT_NAME = (PARALLEL_PORT | SERIAL_PORT | FILE_PORT | USB_PORT | 
     UNC_PORT | LOCAL_FILE_PORT)

where:

  • SERVER_NAME is specified in section 2.2.4.16.

  • DIRECTORY is specified in section 2.2.4.9.

  • PARALLEL_PORT is used for devices attached through a parallel port.

  • SERIAL_PORT is used for devices attached through a serial port.

  • FILE_PORT is used to send data to a file.

  • USB_PORT is used for devices attached through a universal serial bus (USB) port.

  • UNC_PORT is used for network printers attached directly through an IP address or a network address.

Windows supports the pooling of ports. When printing to a printer associated with a pool of ports, the first available port is picked by the print server. Port pooling allows representation of multiple identical physical printers as a single logical printer. Pooled port names are represented as a comma-separated list of port names, for example, "LPT1:,LPT2:".

Clients connecting to a Windows print server need to be prepared to handle pooled ports correctly; for example, they cannot rely on individual port names enumerated by the RpcEnumPorts method to match the string pointed to by the pPortName member of a PRINTER_INFO (section 2.2.1.10) structure.

<221> Section 2.2.4.11: Windows restricts print processor name strings to 260 characters, including the terminating NULL character.

<222> Section 2.2.4.12: Windows restricts print provider name strings to 260 characters, including the terminating null character.

<223> Section 2.2.4.14: Windows uses the following PRINTER_NAME_POSTFIX values: "LocalOnly", "LocalsplOnly", and "DrvConvert". "LocalOnly" means that the client asks the server to use only local printer settings for RpcGetPrinterData and RpcSetPrinterData, and it specifies that the client is not interested in printing to this local printer but only in accessing the printer's local settings. "LocalsplOnly" and "DrvConvert" are treated the same way and mean that the client asks the server to open only the local printer with the respective name (PRINTER_NAME_PREFIX) if such local printer exists. These postfix strings are used on Windows during the upgrade of a printer driver and in other cases where it is preferred that a printer is accessed locally.

<224> Section 2.2.4.14: Windows restricts printer name strings to 539 characters (259 + 260 + 20), including all backslashes, other separators, and the terminating null character.

<225> Section 2.2.4.16: IPv6 names are not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<226> Section 2.2.4.16: Windows restricts server name strings to 259 characters, including the two leading backslash characters and trailing backslash character.

<227> Section 2.2.4.18: Windows restricts value name strings to 260 characters, including the terminating null character.

<228> Section 2.3.1: Windows NT 3.1, Windows NT 3.51, and Windows NT 4.0 print servers do not interact with Active Directory.

<229> Section 2.3.3.1: Windows print servers attempt to set the following attributes based on internal print spooler state:

  • uNCName

  • serverName

  • shortServerName

  • versionNumber

  • printerName

  • description

  • driverName

  • location

  • portName

  • printStartTime

  • printEndTime

  • printKeepPrintedJobs

  • printSeparatorFile

  • printShareName

  • printSpooling

  • priority

  • url

  • flags

  • printStatus

  • printAttributes

  • driverVersion

Windows print servers attempt to set the following attributes based on the results of querying the printer driver configuration module:

  • printBinNames

  • printCollate

  • printColor

  • printDuplexSupported

  • printStaplingSupported

  • printMaxXExtent

  • printMaxYExtent

  • printMinXExtent

  • printMinYExtent

  • printMediaSupported

  • printMediaReady

  • printNumberUp

  • printMemory

  • printOrientationsSupported

  • printMaxResolutionSupported

  • printLanguage

  • printRate

  • printRateUnits

  • printPagesPerMinute

All other attributes in the print schema can be set indirectly by print clients using RpcSetPrinterDataEx (section 3.1.4.2.18), as specified in section 2.3.3.1.

<230> Section 2.3.3.1: Windows print servers publish a value under one of the "DsSpooler", "DsDriver", and "DsUser" keys to the directory, if its name corresponds to an attribute in the schema for the print queue object class.

<231> Section 2.3.3.2: Windows print servers persist a string representing the GUID for the published object in the directory. This string corresponds to the pszObjectGUID member of the PRINTER_INFO_7 structure. Windows print servers then call the IDL_DRSCrackNames method of the DRSR protocol, documented in [MS-DRSR] section 4.1.4, on the domain controller to convert the GUID string into the fully qualified DN of the object.

<232> Section 2.3.3.2: When a Windows print server performs an LDAP update operation for a print queue, it always updates all of the LDAP attributes corresponding to the printer data values under one printer data key ("DsSpooler", "DsDriver", or "DsUser") where the server has stored attributes as described in section 2.3.3.1.

<233> Section 2.3.3.3:  Windows print servers search only the current naming context by default, but users can still choose to search other naming contexts. Windows 2000, Windows XP, and Windows Server 2003 print servers search the GC for print queues in all naming contexts.

<234> Section 2.3.3.3: Windows print servers do not use encryption except when users choose to customize the printer search by specifying other NCs or more detailed filters. Windows 2000, Windows XP, and Windows Server 2003 print servers negotiate encryption for LDAP requests.

<235> Section 2.3.3.4: By default, Windows servers never perform this periodic operation. An administrator can change this behavior by writing a duration, in minutes, to the "HKLM\Software\Policies\Microsoft\Windows NT\Printers\VerifyPublishedState" value (REG_DWORD type) in the registry.

<236> Section 2.3.3.4: On Windows print servers that are configured as writable domain controllers (DC), the periodic search procedure is, by default, executed every 8 hours. The default period can be changed by writing the new time period, in minutes, to the "HKLM\Software\Policies\Microsoft\Windows NT\Printers\PruningInterval" value (REG_DWORD type) in the registry. Windows servers not configured as writable domain controllers do not execute this periodic search.

<237> Section 3.1.1: Windows implements port pooling. A printer object can manage references to multiple port objects. A physical print device is connected to each of the port objects, but the physical print devices are substantially the same. Windows transparently distributes incoming jobs to the multiple port objects to balance workload.

<238> Section 3.1.1: Windows creates the print job SECURITY_DESCRIPTOR by inheriting the SECURITY_DESCRIPTOR of the printer (which by default grants JOB_ALL_ACCESS to members of the Administrators group and to the creator/owner client) and by adding an access allowed entry that grants JOB_READ access to the submitting client.

<239> Section 3.1.1: Job Named Properties are not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<240> Section 3.1.1: In Windows implementations, the user-mode printer driver version is a DWORD that is set to one of the following values:

Value

Description

0x00000001

Windows NT 3.51 user-mode printer drivers

0x00000002

Windows NT 4.0 user-mode printer drivers.

0x00000003

Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2 user-mode printer drivers.

0x00000004

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, and Windows Server 2019 user-mode printer drivers.

<241> Section 3.1.1: Windows print servers initialize the list to contain the TCPMON port monitor, which provides support for TCP/IP-connected printers.

<242> Section 3.1.1: Print providers are Windows–specific and not required by this protocol.

<243> Section 3.1.1: In addition to the list of print providers persisted in the registry, the list of print providers on Windows print servers also includes a print provider named "Windows NT Local Print Provider".

<244> Section 3.1.1: The only versions of Windows servers that maintain such a list are Windows XP and Windows Server 2003. Administrators can configure this list. In all other versions of Windows, this list does not exist.

<245> Section 3.1.1: Windows print servers that maintain a List of Warned Printer Drivers persist the list in an INF file called printupg.inf.

<246> Section 3.1.1: Job Named Properties are not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<247> Section 3.1.1: Branch office print mode is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<248> Section 3.1.1: Persistence of Abstract Data Model in the Registry

Print system management tools such as printmig, brm, and other third-party applications read and write registry values that are used by the Windows print server to persist its abstract data model. Windows print servers also persist objects from the abstract data model and other settings in the registry, as described in the following table.

Note that the value of the registry key entry shown in the table below is wrapped to the following line at the backslash character for easier reading. The actual string value is one contiguous string.

For example: A value in the table such as

  
 HKLM\
 SYSTEM\
 CurrentControlSet\
 Control\
 Print

represents a registry key path string that would be entered in a string variable as:

  
 "HKLM\SYSTEM\CurrentControlSet\Control\Print"

Registry key

Value

Type

Description

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

MaxRPCSize

REG_DWORD

Maximum buffer size accepted by the server in RPC calls. The default used, if this value is not present, is 50MB.

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

Environments\

[Env Name]\

Drivers

The list of printer drivers installed on the print server for the environment named [Env Name].

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

Environments\

[Env Name]\

Drivers\

[Version]\

[Driver Name]

Information about the printer driver named [Driver Name] having the version identified by [Version] for the environment named [Env Name].

Configuration File

REG_SZ

Persisted DRIVER_INFO member pConfigFile.

Data File

REG_SZ

Persisted DRIVER_INFO member pDataFile.

Driver

REG_SZ

Persisted DRIVER_INFO member pDriverPath.

Help File

REG_SZ

Persisted DRIVER_INFO member pHelpFile.

Monitor

REG_SZ

Persisted DRIVER_INFO member pMonitorName.

Datatype

REG_SZ

Persisted DRIVER_INFO member pDefaultDataType.

Dependent Files

REG_MULTI_SZ

Persisted DRIVER_INFO member pDependentFiles.

Previous Names

REG_MULTI_SZ

Persisted DRIVER_INFO member pszzPreviousNames.

Version

REG_DWORD

Persisted DRIVER_INFO member cVersion.

Manufacturer

REG_SZ

Persisted DRIVER_INFO member pMfgName.

OEM URL

REG_SZ

Persisted DRIVER_INFO member pOEMUrl.

HardwareID

REG_SZ

Persisted DRIVER_INFO member pHardwareID.

Provider

REG_SZ

Persisted DRIVER_INFO member pProvider.

DriverDate

REG_BINARY

Persisted DRIVER_INFO member ftDriverDate.

DriverVersion

REG_BINARY

Persisted DRIVER_INFO member dwlDriverVersion.

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

Environments\

[Env Name]\

Print Processors

The list of print processors installed on the print server for the environment named [Env Name].

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

Environments\

[Env Name]\

Print Processors\

[Processor Name]

Information about the print processor named [Processor Name] for the environment named [Env Name].

Driver

REG_SZ

Persisted pPathName parameter used when print processor was added by the RpcAddPrintProcessor (section 3.1.4.8.1) method.

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

Forms

The List of Form Objects installed on the print server.

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

Monitors

The List of Language Monitors and port monitors installed on the print server.

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

Monitors\

[Monitor Name]

Information about the port monitor named [Monitor Name].

Driver

REG_SZ

Persisted MONITOR_INFO_2 (section 2.2.1.8.2) member pDLLName.

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

Monitors\

LPR Port\

Ports

Information about LPR ports.

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

Monitors\

LPR Port\

Ports\

[Port name]

Information about the LPR port named [Port Name].

Server Name

REG_SZ

Host address of server exposing LPR port.

Printer Name

REG_SZ

Queue name on LPR server.

HKLM\

SYSTEM\

CurrentControlSet\

Control\

Print\

Monitors\

Standard TCP/IP Port\

Ports

HKLM\

SOFTWARE\

DigitalEquipmentCorporation\

Network Printing Software

All subkeys and values

Opaque data for DEC Networking monitors.

HKLM\

SOFTWARE\

Hewlett-Packard\

HP JetAdmin

All subkeys and values

Opaque data for HP JetAdmin monitors.

HKLM\

SOFTWARE\

Lexmark

All subkeys and values

Opaque data for Lexmark Networking monitors.

HKLM\

SOFTWARE\

Microsoft\

Windows NT operating system\

CurrentVersion\

Ports

List of all ports installed with the print server.

[Port Name]

REG_SZ

Implementation-specific initialization parameters for the port named [Port Name]. If there are no initialization parameters, the value specifies an empty string.

HKLM\

SOFTWARE\

Microsoft\

Windows NT\

CurrentVersion\

Print\

Connections

The list of per-machine connections on the print server.

HKLM\

SOFTWARE\

Microsoft\

Windows NT\

CurrentVersion\

Print\

Printers

The persisted list of printers installed on the print server.

DefaultSpoolDirectory

REG_SZ

The directory used by the print server for storing temporary print job data.

HKLM\

SOFTWARE\

Microsoft\

Windows NT\

CurrentVersion\

Print\

Printers\

[Printer Name]

Information about the printer named [Printer Name].

Share Name

REG_SZ

Persisted PRINTER_INFO member pShareName.

Print Processor

REG_SZ

Persisted PRINTER_INFO member pPrintProcessor.

Datatype

REG_SZ

Persisted PRINTER_INFO member pDatatype.

Parameters

REG_SZ

Persisted PRINTER_INFO member pParameters.

ObjectGUID

Persisted PRINTER_INFO member pszObjectGUID.

Printer Driver

REG_SZ

Persisted PRINTER_INFO member pDriverName.

Default _DEVMODE

REG_SZ

Persisted PRINTER_INFO_8 member pDevMode.

Priority

REG_DWORD

Persisted PRINTER_INFO member Priority.

Default Priority

REG_DWORD

Persisted PRINTER_INFO member DefaultPriority.

StartTime

REG_DWORD

Persisted PRINTER_INFO member StartTime.

UntilTime

REG_DWORD

Persisted PRINTER_INFO member UntilTime.

Separator File

REG_SZ

Persisted PRINTER_INFO member pSepFile.

Location

REG_SZ

Persisted PRINTER_INFO member pLocation.

Attributes

REG_DWORD

Persisted PRINTER_INFO member Attributes.

Security

REG_BINARY

Persisted PRINTER_INFO member pSecurityDescriptor.

Port

REG_SZ

Persisted PRINTER_INFO member pPortName.

HKLM\

SOFTWARE\

Microsoft\

Windows NT\

CurrentVersion\

Print\

Providers

The list of print providers installed on the print server.

Definitions for placeholders in the preceding table:

  • [Env Name] is an environment name (section 2.2.4.4).

  • [Version] is "Version-0", "Version-1", "Version-2", "Version-3", or "Version 4". The numbers 0–4 (0x00000000 – 0x00000004) are defined in the cVersion member (section 2.2.1.3.1).

  • [Driver Name] is a driver name (section 2.2.4.3).

  • [Processor Name] is a print processor name (section 2.2.4.11).

  • [Monitor Name] is a monitor name (section 2.2.4.8).

  • [Port Name] is a port name (2.2.4.10).

  • [Printer Name] is a printer name (section 2.2.4.14).

<249> Section 3.1.1: Locations of Print System Components in the Server File System

Print system management tools such as printmig, brm, and other, third-party applications remotely access files that are loaded or executed by the Windows print server. Windows print server loads or executes files as described in the following table.

File description

Location on print server file system

Printer driver files

%systemroot%\system32\spool\drivers\[env-dir]\[version-dir]

Print processor files

%systemroot%\system32\spool\prtprocs\[env-dir]

Separator files

%systemroot%\system32\spool\sepfiles

Definitions for placeholders in the preceding table:

[env-dir] specifies one of the following strings, depending on the [Env Name] of the driver:

  • "W32X86" for the environment string "Windows NT x86"

  • "IA64" for the environment string "Windows IA64"

  • "WIN40" for the environment string "Windows 4.0"

  • "W32ALPHA" for the environment string "Windows NT Alpha_AXP"

  • "X64" for the environment string "Windows X64"

  • "ARM" for the environment string "Windows ARM"

[version-dir] is one of the strings "0", "1", "2", "3", or "4", matching the DRIVER_INFO member cVersion.

The %systemroot% environment variable is shared by the print server using the share name "admin$".

<250> Section 3.1.3: Windows print servers can publish printers to Active Directory, and print clients can search it for printers. Windows NT 3.1, Windows NT 3.51, and Windows NT 4.0 print clients and servers do not interact with Active Directory. Windows 95, Windows 98, and Windows Millennium Edition print clients do not interact with Active Directory.

<251> Section 3.1.4: The job named property management methods are not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<252> Section 3.1.4: Branch office print remote logging methods are not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<253> Section 3.1.4: The following table lists the opnums that are only used locally by Windows, never remotely.

Opnum number

Method

Opnum: 37

Opnum37NotUsedOnWire

Opnum: 38

Opnum38NotUsedOnWire

Opnum: 43

Opnum43NotUsedOnWire

Opnum: 44

Opnum44NotUsedOnWire

Opnum: 45

Opnum45NotUsedOnWire

Opnum: 49

Opnum49NotUsedOnWire

Opnum: 50

Opnum50NotUsedOnWire

Opnum: 54

Opnum54NotUsedOnWire

Opnum: 55

Opnum55NotUsedOnWire

Opnum: 57

Opnum57NotUsedOnWire

Opnum: 63

Opnum63NotUsedOnWire

Opnum: 64

Opnum64NotUsedOnWire

Opnum: 68

Opnum68NotUsedOnWire

Opnum: 74

Opnum74NotUsedOnWire

Opnum: 75

Opnum75NotUsedOnWire

Opnum: 76

Opnum76NotUsedOnWire

Opnum: 83

Opnum83NotUsedOnWire

Opnum: 90

Opnum90NotUsedOnWire

Opnum: 91

Opnum91NotUsedOnWire

Opnum: 92

Opnum92NotUsedOnWire

Opnum: 93

Opnum93NotUsedOnWire

Opnum: 94

Opnum94NotUsedOnWire

Opnum: 95

Opnum95NotUsedOnWire

Opnum: 98

Opnum98NotUsedOnWire

Opnum: 99

Opnum99NotUsedOnWire

Opnum: 100

Opnum100NotUsedOnWire

Opnum: 101

Opnum101NotUsedOnWire

Opnum: 103

Opnum103NotUsedOnWire

Opnum: 105

Opnum105NotUsedOnWire

Opnum: 106

Opnum106NotUsedOnWire

Opnum: 107

Opnum107NotUsedOnWire

Opnum: 108

Opnum108NotUsedOnWire

Opnum: 109

Opnum109NotUsedOnWire

Opnum: 114

Opnum114NotUsedOnWire

Opnum: 115

Opnum115NotUsedOnWire

<254> Section 3.1.4.1.4: IPv6 names are not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<255> Section 3.1.4.1.4: All Windows client implementations derive the RPC binding directly from the STRING_HANDLE binding parameter, and all Windows server implementations perform this validation step.

<256> Section 3.1.4.1.5: All Windows client implementations derive the RPC binding directly from the STRING_HANDLE binding parameter, and all Windows server implementations perform this validation step.

<257> Section 3.1.4.1.8.1: In Windows, when the pDevModeContainer parameter is not declared with the "unique" IDL attribute and is set to a value of NULL, the underlying RPC protocol [MS-RPCE] implementation stops the invalid call and throws an exception before the call reaches the server.

<258> Section 3.1.4.1.8.2: In Windows, when the pDocInfoContainer parameter is not declared with the "unique" IDL attribute and is set to a value of NULL, the underlying RPC protocol [MS-RPCE] implementation stops the invalid call and throws an exception before the call reaches the server.

<259> Section 3.1.4.1.8.7: If the value of the pSecurity member in the SECURITY_CONTAINER structure is NULL, a default security descriptor is used.

The owner in the security descriptor is the local system. The discretionary access control list (DACL) contains access control entries (ACEs), which grant the following permissions:

  • Full control to the administrator's group and to the user who added the printer.

  • Print permissions to "everyone".

  • Permissions to control (cancel, pause, resume) the job to the user who submits the job.

Windows NT, Windows 2000, Windows XP, and Windows Server 2003: The owner in the security descriptor is the user who added the printer. The DACL contains ACEs that grant the following permissions:

  • Full control to administrators and power users groups.

  • Print permissions to "everyone".

  • Permissions to control (cancel, pause, resume) the job to the user who submits the job.

This does not apply to Windows 95, Windows 98, and Windows Millennium Edition.

<260> Section 3.1.4.1.8.8: Windows does not use the following members: pUserName, dwMajorVersion, dwMinorVersion, and wProcessorArchitecture. pMachineName is used only if the server cannot determine the client machine name using remote procedure call (RPC) functions. The pMachineName member can be NULL.

<261> Section 3.1.4.1.8.8: The values of the dwBuildNumber member in the OSVERSIONINFO structure (section 2.2.3.10.1) for specific versions of Windows are listed in the product behavior note for dwBuildNumber in Versioning and Capability Negotiation (section 1.7).

On Windows Vista and later, an error is returned if the value is less than that shown for the corresponding Windows version in the table.

<262> Section 3.1.4.1.8.9: This validation step cannot be performed on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, or Windows Server 2008 R2.

An administrator can configure a print server to not perform this validation step by writing a nonzero value to the "HKLM\System\CurrentControlSet\Control\Print\ARMTestMode" value (REG_DWORD type) in the registry.

<263> Section 3.1.4.1.10: This verification is not done on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, or Windows Server 2008 R2.

<264> Section 3.1.4.2.1: Windows servers return E_NOTIMPL ([MS-ERREF] section 2.3.1) for error conditions or if no printers are found matching the requested flags, except for servers in the following versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003.

<265> Section 3.1.4.2.1: Windows servers check that the client user has the SERVER_ACCESS_ENUMERATE permission.

<266> Section 3.1.4.2.1: Windows servers return the printers in alphabetical order.

<267> Section 3.1.4.2.1: Windows uses a policy-defined period (default: 60 minutes) from the first call to RpcAddPrinter with Level set to 0x00000001 to determine whether ERROR_CAN_NOT_COMPLETE is returned.

<268> Section 3.1.4.2.1: In Windows, the enumeration is restricted as follows:

  • Unshared printers are enumerated only if the user has the SERVER_ACCESS_ADMINISTER permission.

  • Only those printers whose security descriptor grants PRINTER_ACCESS_USE to the caller are enumerated.

<269> Section 3.1.4.2.3: The Windows server checks that the client user has implementation-specific permission, such as SERVER_ACCESS_ADMINISTER, to install a printer.

<270> Section 3.1.4.2.3: Windows stores the time when the printer is added to the list. When a printer is added, Windows removes any printer on the list that was added more than 70 minutes ago. Windows stores a maximum of 256 printers in the list. If the limit is reached, no new printers are added, and ERROR_OUTOFMEMORY [MS-ERREF] is returned.

<271> Section 3.1.4.2.4: In Windows, the server verifies that the printer object has been opened with an access value including the generic DELETE permission, for example, PRINTER_ALL_ACCESS.

<272> Section 3.1.4.2.4: The Windows server verifies that the client user has the PRINTER_ACCESS_ADMINISTER permission.

<273> Section 3.1.4.2.4: The delete print queue object from the directory feature of the RpcDeletePrinter method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<274> Section 3.1.4.2.5: The Windows server verifies for a printer object that the object has been opened with PRINTER_ACCESS_ADMINISTER permission, and for a server object that the object has been opened with SERVER_ACCESS_ADMINISTER permission.

<275> Section 3.1.4.2.5: Except for Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, and Windows NT 4.0, Windows servers can return the ERROR_IO_PENDING error code from the RpcSetPrinter call when the Level member of the PRINTER_CONTAINER pointed to by pPrinterContainer is 0x7, indicating a directory service operation, and the server implementation uses an asynchronous mechanism to perform the operation.

<276> Section 3.1.4.2.5: This feature of the RpcSetPrinter method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<277> Section 3.1.4.2.6: In Windows, the hPrinter parameter is a handle to a printer or print server object if the the Level value is 0x00000003, except in Windows 2000, Windows XP, and Windows Server 2003.

<278> Section 3.1.4.2.6: The Windows server verifies for a printer object that the object has been opened with PRINTER_ACCESS_USE permission, and for a server object that the object has been opened with SERVER_ACCESS_ENUMERATE permission.

<279> Section 3.1.4.2.7: In Windows, the detection of the string "ChangeID" is case-insensitive.

<280> Section 3.1.4.2.7: In Windows, the data identified by pValueName for printer objects is stored in the registry under the key "PrinterDriverData"; therefore, RpcGetPrinterDataEx is used with pKeyName pointing to the string "PrinterDriverData" to access the identical set of values.

<281> Section 3.1.4.2.8: In Windows, the detection of the string "ChangeID" is case-insensitive.

<282> Section 3.1.4.2.8: In Windows, if hPrinter is a server object handle, the server checks that the client user has SERVER_ACCESS_ADMINISTER permission. If hPrinter is a printer object handle, the server checks that the client user has PRINTER_ACCESS_ADMINISTER permission.

The server does not check whether the client user has either PRINTER_ACCESS_ADMINISTER or PRINTER_ACCESS_MANAGE LIMITED permission in the following windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<283> Section 3.1.4.2.8: In Windows the data identified by pValueName for printer objects is stored in the registry under the key "PrinterDriverData"; therefore, RpcSetPrinterDataEx is used with pKeyName pointing to the string "PrinterDriverData" to access the identical set of values.

For server objects, there is no aliasing of value and key because the server ignores the pKeyName parameter of the RpcSetPrinterDataEx method when called with a handle to a server object.

<284> Section 3.1.4.2.11: In Windows, the underlying RPC protocol [MS-RPCE] implementation stops the invalid call and throws an exception before the call reaches the server.

<285> Section 3.1.4.2.11: In Windows, the underlying RPC protocol [MS-RPCE] implementation stops the invalid call and throws an exception before the call reaches the server.

<286> Section 3.1.4.2.11: When creating print jobs in EMFSPOOL format [MS-EMFSPOOL], Windows print clients use the UNIVERSAL_FONT_ID structures returned by RpcPlayGdiScriptOnPrinterIC to determine if the server has copies of specific fonts, and if so, the client does not embed those fonts in the EMFSPOOL data sent to the print server.

<287> Section 3.1.4.2.14: The feature provided by the RpcOpenPrinterEx method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<288> Section 3.1.4.2.15: The RpcAddPrinterEx method is not supported on Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<289> Section 3.1.4.2.15: In Windows, the server checks that the client user has implementation-specific permissions to install a printer, typically SERVER_ACCESS_ADMINISTER.

<290> Section 3.1.4.2.15: Windows stores the time when the printer is added to the list. When a printer is added, Windows removes any printer on the list that was added more than a policy-defined period (default 70 minutes) ago. Windows stores a maximum of 256 printers in the list. If the limit is reached, no new printers are added, and ERROR_OUTOFMEMORY is returned [MS-ERREF].

<291> Section 3.1.4.2.15: Windows fails this call if, at the time of this call, the server does not have installed all the following: the printer driver, the port, and the print processor.

<292> Section 3.1.4.2.16: The feature provided by the RpcEnumPrinterData method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<293> Section 3.1.4.2.16: In Windows, for printer objects, the data identified by pValueName is stored in the registry under the key named "PrinterDriverData"; therefore, RpcEnumPrinterDataEx is used with pKeyName pointing to the string "PrinterDriverData" to access the identical set of values.

<294> Section 3.1.4.2.17: The feature provided by the RpcDeletePrinterData method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<295> Section 3.1.4.2.17: In Windows, the detection of the string "ChangeID" is case-insensitive.

<296> Section 3.1.4.2.17: In Windows, the server checks that the client user has PRINTER_ACCESS_ADMINISTER permission.

<297> Section 3.1.4.2.17: In Windows, the data identified by pValueName for printer objects is stored in the registry under the key named "PrinterDriverData"; therefore, RpcDeletePrinterDataEx is used with pKeyName pointing to the string "PrinterDriverData" to access the identical set of values.

<298> Section 3.1.4.2.18: The feature provided by the RpcSetPrinterDataEx method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<299> Section 3.1.4.2.18: In Windows, the detection of the string "ChangeID" is case-insensitive.

<300> Section 3.1.4.2.18: In Windows, if hPrinter is a server object handle, the server checks that the client user has SERVER_ACCESS_ADMINISTER permission. If hPrinter is a printer object handle, the server checks that the client user has PRINTER_ACCESS_ADMINISTER permission.

<301> Section 3.1.4.2.19: The feature provided by the RpcGetPrinterDataEx method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<302> Section 3.1.4.2.19: This verification of the RpcGetPrinterDataEx is not done on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<303> Section 3.1.4.2.19: This verification of the RpcGetPrinterDataEx is not done by the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<304> Section 3.1.4.2.20: The feature provided by the RpcEnumPrinterDataEx method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<305> Section 3.1.4.2.21: The feature provided by the RpcEnumPrinterKey method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<306> Section 3.1.4.2.22: The feature provided by the RpcDeleterinterDataEx method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<307> Section 3.1.4.2.22: In Windows, the detection of the string "ChangeID" is case-insensitive.

<308> Section 3.1.4.2.22: In Windows, the server checks that the client user has the PRINTER_ACCESS_ADMINISTER permission.

<309> Section 3.1.4.2.23: The feature provided by the RpcDeletePrinterKey method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<310> Section 3.1.4.2.23: In Windows, the server checks that the client user has the PRINTER_ACCESS_ADMINISTER permission.

<311> Section 3.1.4.2.24: The feature provided by the RpcAddPerMachineConnection method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<312> Section 3.1.4.2.24: In Windows, the name of the print provider file is used and is stored in the Windows registry. If pProvider is NULL, the Windows operating system uses Win32spl.dll as the name of the executable object.

Print providers are a Windows implementation detail and are not required by this protocol. Windows print clients do not use a non-NULL pProvider parameter remotely, but third-party software can do so. As there is no protocol method to enumerate print providers remotely, a client would need specific knowledge about the internal implementation of the server to specify a meaningful print provider name.

<313> Section 3.1.4.2.24: In Windows, the server checks that the client user has the SERVER_ACCESS_ADMINISTER permission.

<314> Section 3.1.4.2.25: The feature provided by the RpcDeletePerMachineConnection method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<315> Section 3.1.4.2.25: The Windows server checks that the client user has SERVER_ACCESS_ADMINISTER permission.

<316> Section 3.1.4.2.26: The feature provided by the RpcEnumPerMachineConnections method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<317> Section 3.1.4.2.27: The RpcSendRecvBidiData method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, and Windows Millennium Edition.

<318> Section 3.1.4.2.27: Port monitors shipping with Windows support the following actions only for TCPMON and WSDMON, but only if connected to a printer capable of bidirectional communication: BIDI_ACTION_ENUM_SCHEMA, BIDI_ACTION_GET, and BIDI_ACTION_GET_ALL. All other port monitors shipping with Windows do not support the RpcSendRecvBidiData method.

<319> Section 3.1.4.2.27: Port monitors shipping with Windows support the BIDI_ACTION_GET_WITH_ARGUMENT action for WSDMON, if connected to a printer capable of bidirectional communication, and if the Windows version supports RpcSendRecvBidiData.

<320> Section 3.1.4.2.27: TCPMON and WSDMON check that the port or printer object has been opened with an access value that includes the PRINTER_ACCESS_USE bit.

<321> Section 3.1.4.3.1: In Windows, the command codes JOB_CONTROL_CANCEL (0x00000003) and JOB_CONTROL_DELETE (0x00000005) are equivalent. The redundancy is caused by historical reasons, but both are supported.

<322> Section 3.1.4.3.1: In Windows, the command codes JOB_CONTROL_CANCEL (0x00000003) and JOB_CONTROL_DELETE (0x00000005) are equivalent. The redundancy is caused by historical reasons, but both are supported.

<323> Section 3.1.4.3.1: For JOB_CONTROL_CANCEL and JOB_CONTROL_DELETE requests, the server verifies that the client has generic DELETE permission. For all other requests, the server verifies that the client has JOB_ACCESS_ADMINISTER permission for the job. For a job position change request, the server additionally verifies that the handle is a printer or server object and has been opened with PRINTER_ACCESS_ADMINISTER requested.

<324> Section 3.1.4.4.1: The Windows server checks that the client user has SERVER_ACCESS_ADMINISTER permission.

<325> Section 3.1.4.4.1: The parameter validation performed by RpcAddPrinterDriver is not supported by Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, or Windows Server 2008 R2.

<326> Section 3.1.4.4.1: When a print client adds a printer driver to a Windows print server using RpcAddPrinterDriver, the print server sets the Boolean values representing each of the printer driver's attributes to a Boolean value of FALSE, indicating that the printer driver does not have any of these attributes.

<327> Section 3.1.4.4.2: In Windows, if the string contains "All" or "AllCluster", all printer drivers for all environments are enumerated.

<328> Section 3.1.4.4.2: The Windows server checks that the client user has SERVER_ACCESS_ENUMERATE permission.

<329> Section 3.1.4.4.2: The parameter validation performed by RpcEnumPrinterDrivers is not performed on Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, or Windows Server 2008 R2.

<330> Section 3.1.4.4.2: This validation step performed by the RpcGetPrinterDriver method is not performed on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, or Windows Server 2008 R2.

<331> Section 3.1.4.4.3: Windows servers complete the request only if the specified environment is "Windows 4.0" and pszzPreviousNames contains the name of a printer driver that is installed on the server for the "Windows 4.0" environment; otherwise, the server returns ERROR_UNKNOWN_PRINTER_DRIVER. For other environments, the clients can use RpcGetPrinterDriver2 when the server supports this method.

<332> Section 3.1.4.4.4: The Windows server checks that the client user has SERVER_ACCESS_ENUMERATE permission.

<333> Section 3.1.4.4.5: In Windows, the server checks that the client user has the SERVER_ACCESS_ADMINISTER permission.

<334> Section 3.1.4.4.6: The feature provided by the RpcGetPrinterDriver2 method is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<335> Section 3.1.4.4.6: The following table shows the unsigned 32-bit major operating system version number that is used by Windows clients and servers.

Major version

Description

0x00000004

The operating system is Windows 95, Windows NT 4.0, Windows 98, or Windows Millennium Edition.

0x00000005

The operating system is Windows 2000, Windows XP, Windows Server 2003, or Windows Server 2003 R2 operating system.

0x00000006

The operating system is Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, or Windows Server 2019.

<336> Section 3.1.4.4.6: The following table shows the unsigned 32-bit minor operating system version number that is used by Windows clients and servers.

Minor version

Description

0x00000000

The operating system is Windows 2000, Windows Vista, or Windows Server 2008.

0x00000001

The operating system is Windows XP, Windows 7, or Windows Server 2008 R2.

0x00000002

The operating system is Windows XP Professional x64 Edition, Windows Server 2003, Windows Server 2003 R2, Windows 8, or Windows Server 2012.

0x00000003

The operating system is Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, or Windows Server 2019.

<337> Section 3.1.4.4.6: pdwServerMaxVersion and pdwServerMinVersion are ignored by the Windows print server, and therefore no values are returned. However, the caller is expected to submit valid pointer values for pdwServerMaxVersion and pdwServerMinVersion to ensure that the call can be correctly received by the server.

Note If both dwClientMajorVersion and dwClientMinorVersion are set to 0xFFFFFFFF, the print server returns printer driver information for the printer driver version matching the operating system version on which the print server is running.

<338> Section 3.1.4.4.6: This validation step is not performed on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<339> Section 3.1.4.4.7: This feature is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<340> Section 3.1.4.4.7: Windows sets this parameter to one of the following values.

Value

Description

0x00000001

Windows NT 3.51 user-mode printer drivers

0x00000002

Windows NT 4.0 user-mode printer drivers

0x00000003

Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2 user-mode printer drivers.

0x00000004

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10, Windows Server 2016, Windows Server operating system, and Windows Server 2019 user-mode printer drivers.

<341> Section 3.1.4.4.7: In Windows, the server checks that the client user has SERVER_ACCESS_ADMINISTER (section 2.2.3.1) permission.

<342> Section 3.1.4.4.8: The RpcAddPrinterDriverEx method is not supported on Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<343> Section 3.1.4.4.8: On Windows XP and Windows Server 2003, the print server maintains a List of Warned Printer Drivers (section 3.1.1). Printer drivers in this list are added to the server if the APD_INSTALL_WARNED_DRIVER bit is set.

If a client attempts to add a printer driver that is in the list, but with this bit not set, the server returns the ERROR_PRINTER_DRIVER_WARNED error code. If a client attempts to add a printer driver that is in the list, and with this bit set, the server attempts to add the printer driver (section 3.1.4.4.8). On all other versions of Windows, this list does not exist, and the flag is ignored.

On Windows XP and Windows Server 2003, the print client detects the ERROR_PRINTER_DRIVER_WARNED error code returned from RpcAddPrinterDriverEx and asks the user whether to continue adding the printer driver. If the user continues, the client sets the APD_INSTALL_WARNED_DRIVER bit in the dwFileCopyFlags field and calls the method again.

On Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2, the client detects the ERROR_PRINTER_DRIVER_WARNED error code and informs the user that the driver could not be installed. Clients with these versions of the operating system do not use the APD_INSTALL_WARNED_DRIVER flag.

<344> Section 3.1.4.4.8: In Windows, if this bit is set, ERROR_PRINTER_DRIVER_BLOCKED is returned. if this bit is not set, ERROR_UNKNOWN_PRINTER_DRIVER is returned.

<345> Section 3.1.4.4.8: In Windows, the server checks that the client user has the SERVER_ACCESS_ADMINISTER permission.

<346> Section 3.1.4.4.8: These validation steps are not performed on Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<347> Section 3.1.4.4.9: This method is not used remotely by print clients on Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008.

<348> Section 3.1.4.4.9: In Windows, the IDs are curly braced GUID string representations of 128-bit GUIDs.

<349> Section 3.1.4.4.10: The RpcGetPrinterDriverPackagePath method is used remotely only if the client is at least Windows 7 operating system and the server is at least Windows Server 2008 R2 operating system.

<350> Section 3.1.4.4.10: All Windows versions: The pszLanguage string is specified using the identifiers specified for the Locale Name in [MSDN-MUI].

<351> Section 3.1.4.4.10: All Windows versions: pszDriverPackageCab points to a string containing the path name of a cabinet file for the driver package. For more information, see [MSDN-CAB].

<352> Section 3.1.4.4.10: All Windows versions: If the parameter is zero, Windows fills in the variable pointed to by pcchRequiredSize with the valid size.

<353> Section 3.1.4.5.1: In Windows, the server checks that the client user has SERVER_ACCESS_ADMINISTER permission.

<354> Section 3.1.4.5.2: In Windows, the server checks that the client user has SERVER_ACCESS_ADMINISTER permission.

<355> Section 3.1.4.5.4: The Windows server checks that the client user has SERVER_ACCESS_ADMINISTER permission.

<356> Section 3.1.4.6.1: The Windows server checks that the client user has SERVER_ACCESS_ENUMERATE permission.

<357> Section 3.1.4.6.2: The RpcDeletePort method is only called over the wire by Windows NT 4.0 operating system clients.

<358> Section 3.1.4.6.2: Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, and Windows Server 2012 R2 check that the client user has SERVER_ACCESS_ENUMERATE permission. All other Windows versions check that the client user has SERVER_ACCESS_ADMINISTER permission.

<359> Section 3.1.4.6.3: The feature provided by the RpcAddPortEx method is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<360> Section 3.1.4.6.3: In Windows, the server checks that the client user has the SERVER_ACCESS_ADMINISTER permission.

<361> Section 3.1.4.6.4: The feature supported by the RpcSetPort method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows 98, and Windows Millennium Edition.

<362> Section 3.1.4.6.4: In Windows, the server checks that the client user has SERVER_ACCESS_ADMINISTER permission.

<363> Section 3.1.4.6.5: In Windows, the actions and data retrieval supported by RpcXcvData are performed by executing the RpcXcvData method on the port monitor module referenced by the input handle. For more information about monitor module methods, see section 3.1.4.11. The feature provided by the RpcXcvData method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<364> Section 3.1.4.6.5: For Windows–specific behavior, see section 3.1.4.11.

<365> Section 3.1.4.6.5: The additional validation steps done by the RpcXcvData method are not performed on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, and Windows XP.

<366> Section 3.1.4.7.1: In Windows, the server checks that the client user has SERVER_ACCESS_ENUMERATE permission.

<367> Section 3.1.4.7.1: On Windows servers, the monitors supporting these methods are LOCALMON, LPRMON, TCPMON, USBMON, and WSDMON.

<368> Section 3.1.4.7.2: In Windows, the server checks that the client user has SERVER_ACCESS_ADMINISTER permission.

<369> Section 3.1.4.7.3: In Windows, the server checks that the client user has SERVER_ACCESS_ADMINISTER permission.

<370> Section 3.1.4.8.1: This validation step is not performed on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<371> Section 3.1.4.8.1: In Windows, the server checks that the client user has SERVER_ACCESS_ADMINISTER permission.

<372> Section 3.1.4.8.2: The Windows server checks that the client user has SERVER_ACCESS_ENUMERATE permission.

<373> Section 3.1.4.8.3: In Windows, the server checks that the client user has SERVER_ACCESS_ENUMERATE permission.

<374> Section 3.1.4.8.4: The Windows server checks that the client user has SERVER_ACCESS_ADMINISTER permission.

<375> Section 3.1.4.8.5: In Windows, the server checks that the client user has SERVER_ACCESS_ENUMERATE permission.

<376> Section 3.1.4.9.6: For a job object, the Windows server verifies that the calling client has been granted an access value that includes the JOB_READ permission (section 2.2.3.1). For a port object, the Windows server verifies that the calling client has, for the currently printing job on that port, an access value that includes the JOB_READ permission.

<377> Section 3.1.4.9.6: The Local Port monitor in Windows supports reading from COM ports.

<378> Section 3.1.4.9.8: The feature provided by the RpcFlushPrinter method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<379> Section 3.1.4.10.1: Windows waits for up to 600 seconds.

<380> Section 3.1.4.10.2: The feature provided by the RpcFindClosePrinterChangeNotification method is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 2000, and Windows Millennium Edition.

<381> Section 3.1.4.10.3: Windows clients generate an arbitrary unique value for each known printer.

<382> Section 3.1.4.10.4: Windows clients generate an arbitrary unique value for each known printer.

<383> Section 3.1.4.10.5: The feature provided by the RpcRouterRefreshPrinterChangeNotification method is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<384> Section 3.1.4.10.5: Windows clients pass in monotonically increasing values for the dwColor parameter in calls to this method. Windows servers use these values in calls to RpcRouterReplyPrinterEx (section 3.2.4.1.4). Clients determine the most recent notification data returned by the server by comparing the values of this parameter. Clients discard the notification data received in a call to RpcRouterReplyPrinterEx if the dwColor value is different from the value that was received most recently from RpcRouterRefreshPrinterChangeNotification.

Windows uses this mechanism because of the possible ordering reversal of calls caused by network latency.

<385> Section 3.1.4.11: The Windows port monitors support these functions in the following cases:

  • In Windows NT 3.5 and Windows NT 4.0, LOCALMON supports AddPortEx, AddPort, ConfigurePort, and DeletePort.

  • LOCALMON does not support AddPortEx and TCPMON does not support AddPortEx, AddPort, ConfigurePort, and DeletePort on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition.

<386> Section 3.1.4.11: The Windows operating system provides port monitor modules in the form of executable dynamic-link libraries (DLLs). Examples are:

  • localmon.dll, which manages local serial ("COM") and parallel ("LPT") ports on a Windows machine (section 3.1.4.11.1).

  • lprmon.dll, which allows a Windows print server to send print jobs to machines that support UNIX print-server functions (section 3.1.4.11.2).

  • tcpmon.dll, which manages standard TCP/IP ports on a Windows machine (section 3.1.4.11.3).

  • usbmon.dll, which manages local USB ports on a Windows machine.

  • wsdmon.dll, which manages Web Services for Devices (WSD) ports (section 3.1.4.11.4), except on Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

All the functions that LOCALMON exports have been incorporated into localspl.dll in Windows, except for the following versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, and Windows 98. Also, in Windows, except for the preceding versions, port monitors are divided into two DLLs, a port monitor server DLL and a port monitor user interface DLL.

<387> Section 3.1.4.11.1: With the exception of the following versions of Windows: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition, LOCALMON is packaged inside another executable component called localspl.dll; the presentation is captured in a separate monitor module. The user interface module corresponding to LOCALMON is called localui.

<388> Section 3.1.4.11.2: The LPRMON monitor module is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition. The user interface module corresponding to LPRMON is called lprmonui.

<389> Section 3.1.4.11.3: The TCPMON monitor module is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, and Windows Millennium Edition. The user interface module corresponding to TCPMON is called tcpmonui.

<390> Section 3.1.4.11.3: The TCPMON monitor module command values "SetDeviceIDOid", "DeviceID", "GetPortList", and "CleanupPort" are not supported on Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<391> Section 3.1.4.11.4: The WSDMON monitor module is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, and Windows Server 2003.

<392> Section 3.1.4.11.4:  The WSDMON monitor module command values "CheckCluster", "DiscoverDevice", "DriverAvailable", "AssocDevice", "AddPrinterPort", "BackupPort", and "AssocDeviceMulticast" are not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, and Windows Vista.

<393> Section 3.1.4.11.4: The WSDMON monitor module command value "RestorePort" is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<394> Section 3.1.4.11.4:  This command is supported on stand-alone servers only. The pInputData parameter is a pointer to a string specifying the GlobalID of the WSD endpoint. The pOutputData parameter is a pointer to a buffer that receives a string identifying the new port name if a WSD Printer Service is found; otherwise, ERROR_PRINTER_NOT_FOUND is returned ([MS-ERREF]).

<395> Section 3.1.4.11.4:  The WSDMON monitor module command value "AddMulticastPort" is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, and Windows Server 2012 R2.

<396> Section 3.1.4.11.5: Supported on Windows Server 2022 and later.

<397> Section 3.1.4.12.1: The feature provided by the RpcGetJobNamedPropertyValue method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<398> Section 3.1.4.12.2: The feature provided by the RpcSetJobNamedProperty method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<399> Section 3.1.4.12.3: The feature provided by the RpcDeleteJobNamedProperty method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<400> Section 3.1.4.12.4: The feature provided by the RpcEnumJobNamedProperties method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2.

<401> Section 3.1.4.13.1: The feature provided by the RpcLogJobInfoForBranchOffice method is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<402> Section 3.1.4.14: Supported on Windows Server 2022 and later.

<403> Section 3.1.4.14.1: Supported on Windows Server 2022 and later.

<404> Section 3.1.4.14.2: Supported on Windows Server 2022 and later.

<405> Section 3.1.4.14.3: Supported on Windows Server 2022 and later.

<406> Section 3.1.4.14.4: Supported on Windows Server 2022 and later.

<407> Section 3.1.4.14.5: Supported on Windows Server 2022 and later.

<408> Section 3.1.4.14.6: Supported on Windows Server 2022 and later.

<409> Section 3.2.1: Branch office print remote logging is not supported on the following Windows versions: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows 95, Windows NT 4.0, Windows 98, Windows 2000, Windows Millennium Edition, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, and Windows Server 2012.

<410> Section 3.2.1: In Windows, this data element is stored in the print spooler.

<411> Section 3.2.4: The Windows implementation ignores errors and passes them back to the invoker.

<412> Section 3.2.4.1.1: The feature provided by the RpcReplyOpenPrinter method is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<413> Section 3.2.4.1.1: The Windows server calls RpcReplyOpenPrinter during the processing of a call to RpcRemoteFindFirstPrinterChangeNotificationEx. The return value indicates the success of that processing.

<414> Section 3.2.4.1.2: The RpcRouterReplyPrinter method is called only by Windows NT 3.5 clients.

<415> Section 3.2.4.1.3: The feature provided by the RpcReplyClosePrinter method is not supported on the following Windows versions: Windows NT 3.1, Windows 95, Windows 98, and Windows Millennium Edition.

<416> Section 3.2.4.1.4: The RpcRouterReplyPrinterEx method is not supported on Windows NT 3.1, Windows NT 3.5, Windows 95, Windows 98, and Windows Millennium Edition.

<417> Section 3.2.4.2.3: Windows clients set the number of jobs to 0xFFFFFFFF to obtain the full list in a single operation.

<418> Section 3.2.4.2.5: Windows clients only enumerate their shared printers if no directory services are available in the domain.

<419> Section 3.2.4.2.5: Windows clients enumerate their shared printers up to a default of three print servers and a default of two workstations and one additional server per 32 print servers found. The values can be changed via policy settings.

<420> Section 3.2.4.2.6: A Windows client uses RpcOpenPrinterEx to open a handle for the server object. Then the Windows client uses RpcGetPrinterData with the value names "Architecture", "MajorVersion", and "OSVersion" to obtain information about the server's environment. This information is used to select an appropriate printer driver. The client subsequently closes the server object handle using RpcClosePrinter. The Windows-based client also uses RpcEnumPorts to populate a list with ports available on the server from which the end-user can select the port for the new printer. The Windows-based client uses RpcEnumMonitors to determine a port monitor for the new printer. The Windows-based client uses RpcGetPrinterDriverDirectory to determine the destination directory in case the new printer requires that a printer driver be installed.

<421> Section 5: Windows print server follows a security model in which the print server, print queues, and print job are securable resources. Each of these resources has a security descriptor that is associated with it. The SD contains the security information that is associated with a resource on the print server. The print server checks the client access to resources by comparing the security information that is associated with the caller against the SD of the resource. SDs are specified by the SECURITY_DESCRIPTOR structure ([MS-DTYP] section 2.4.6).

Each RPC client has associated with it an access token, which contains the security identifier (SID) of the user making the RPC call. The SD identifies the owner of the printing resource and contains a discretionary access control list (DACL). The DACL contains access control entries (ACEs), which specify the SID of a user or group of users, and whether access rights are to be allowed, denied, or audited. For resources on a print server, the ACEs specify operations including print, manage printers, and manage documents in a print queue.

The SD that is associated with the print server or print queue controls the creation of the context handle (PRINTER_HANDLE section 2.2.1.1.4) and the outcome of operations that use the handle. These operations range from printing and job management to listening for notifications.

The SDs for a Windows-based print server are used to control the creation and deletion of print queues on the server; the installation of print system components, including printer drivers, print processors, and port monitors; and the enumeration of resources on the server. A server SD is not write-accessible to callers. In addition to being used to control callers' access to resources, the server SD is also used as the "parent" in the creation of the print queue's SD.

Note: The SD of the Windows-based print server is different from the SD that is applied on the named pipe of the spool. The SD of the spool's named pipe controls the RPC client's access to make RPC calls to the print server. The SD of the Windows-based print server is used to control the caller's permissions to perform various operations on the print server.

The SD of the print queue controls the setting of print queue properties, such as the port and printer driver that are used for printing; the rendering and device settings; or the sharing or security parameters. The printer SD allows auditing operations such as printing; managing printers and documents; reading and changing permissions; and taking ownership.

Each print job has an associated SD, which is created by using the SD of the print queue as parent. The user who submitted the document for printing is the owner of the print job and has permission to manage the print job during its lifetime.

When a PRINTER_HANDLE is opened for a specific printing resource, the caller specifies the access that is needed for subsequent operations, including printer or server administration; printing on a printer or print server; and reading, writing, or administrating a print job. If the caller has the specified permissions, the print handle is created and can be used for subsequent calls.

In addition to handle-based operations, the SD is used for access checks when enumerations, printer driver package installation, or other non-handle-based operations are performed.