1.7 Versioning and Capability Negotiation

This specification covers versioning issues in the following areas:

  • Supported Transports: The Print System Remote Protocol uses RPC over named pipes only.

  • Protocol Versions: The protocol version specified in the Interface Definition Language (IDL) file is 1.0.

    Versioning of data structures defined by the protocol is controlled using a Level value in all Containers (section 2.2.1.2); the usage pattern of Level values is defined in section 2.2. Levels can be sequential, and data structures identified by a later version level, if extending an earlier level, are a superset of the data structure identified by the earlier level. The Level value is also a parameter to some RPC methods.

  • Security and Authentication Methods: Versioning of security is handled by the underlying RPC transport; see [MS-RPCE] section 3.3.3.3 for more information.

  • Localization: This protocol specifies languages and localizable string resources for printer forms. See LANGID (section 2.2.1.1.3) and RPC_FORM_INFO_2 structure (section 2.2.1.6.2) for details.

  • Return Values: The methods that make up this RPC interface return zero to indicate successful completion and nonzero values to indicate failure, except where specified otherwise. A server-side implementation of this protocol can use any nonzero Win32 error value to signify an error condition (section 1.8). Unless otherwise specified, clients of the Print System Remote Protocol do not interpret returned error codes; they simply return error codes to invoking applications without taking any protocol action.

  • Capability Negotiation: Functional negotiation is supported by using container levels (section 2.2.1.2). On connection to a server, the client requests a level. If the information level is a level supported by the server, the server processes the request. Otherwise, the server returns an error to the client, and the client can repeat the request with a lower level.

    Furthermore, to avoid unnecessary network calls, the client determines the server's capabilities by comparing the value returned by the server in the dwBuildNumber member of OSVERSIONINFO (section 2.2.3.10.1) with well-known version-specific dwBuildNumber values.<2>