3.2.3 Initialization

The Print System Asynchronous Remote client MUST perform the following initialization actions:

  • To call RPC methods, create an RPC binding handle ([C706] section 2.3) to the server RPC endpoint with an impersonation type of RPC_C_IMPL_LEVEL_IMPERSONATE ([MS-RPCE] section 2.2.1.1.9). Binding handles are either context handles that are used across multiple calls to the server or handles that are bound to a single call to the server.

  • Reuse a binding handle for multiple invocations when creating a print job, as in a call to RpcAsyncOpenPrinter (section 3.1.4.1.1) followed by multiple calls to RpcAsyncStartPagePrinter (section 3.1.4.8.2) and RpcAsyncWritePrinter (section 3.1.4.8.3).

For methods that expect an RPC binding handle, the server assumes that the binding handle has been derived from the server name parameter of the method or from the server name portion of the printer name parameter of the method. This assumption is analogous to requirements of the same kind expressed in [MS-RPRN] sections 2.2.1.1.7, 3.1.4.1.4, and 3.1.4.1.5. A server implementation MAY<36> choose to support server names that are not identical to the server name used to create the RPC binding handle and, as a result, effectively route the call to another server.

The client uses packet privacy (RPC_C_AUTHN_LEVEL_PKT_PRIVACY) authentication level ([MS-RPCE] section 2.2.1.1.8).<37>

The print client SHOULD perform the following initialization actions:

  • Reuse a binding handle for multiple invocations, as in a call to RpcAsyncOpenPrinter followed by multiple calls to RpcAsyncGetPrinter (section 3.1.4.1.5), RpcAsyncGetPrinterData (section 3.1.4.1.6), or RpcAsyncSetPrinter (section 3.1.4.1.4). However, for name-based calls, the client SHOULD create a separate binding handle for each method invocation.

The print client MUST perform the following actions for all method calls:

  • Specify the object UUID 9940CA8E-512F-4C58-88A9-61098D6896BD.

  • Ensure that the call occurs with causal ordering ([MS-RPCE] section 3.1.1.4.1).

  • Either reuse an existing authenticated RPC binding handle in the cases described above, or create an authenticated RPC binding handle using the SPNEGO security provider ([MS-SPNG]) and packet authentication ([MS-RPCE] section 2.2.1.1.8), as specified in section 2.1.<38>