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 220.127.116.11); 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.
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 18.104.22.168). 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 22.214.171.124.1) with well-known version-specific dwBuildNumber values.<2>