3.1.4 Message Processing Events and Sequencing Rules
The Print System Remote Protocol MUST indicate the following to the RPC runtime specified in [MS-RPCE] section 3.
It is to perform a strict NDR data consistency check at target level 6.0.
It is to reject a NULL unique or full pointer with non-zero conformant value.
Using the strict_context_handle attribute, it is to reject the use of context handles that are created by the methods of a different RPC interface.
The methods that are defined by this protocol are grouped into functional categories, and their syntax and behavior are specified in sections, as shown in the following table.
Functional category |
Description |
Section |
---|---|---|
Printer management and discovery |
Methods used for discovering and obtaining access to supported printers. |
|
Job management |
Methods for discovering, defining, and scheduling print jobs. |
|
Printer driver management |
Methods for discovering and installing printer drivers. |
|
Form management |
Methods for discovering and configuring printer forms. |
|
Printer port management |
Methods for discovering and communicating with printer ports. |
|
Port monitor management |
Methods for discovering and installing port monitor modules. |
|
Print processor management |
Methods for discovering and manipulating print processor objects. |
|
Document printing |
Methods for printing documents, pages and data. |
|
Notifications |
Methods for obtaining notifications of printing events. |
|
Monitor modules |
Methods specified by executable language monitors. |
|
Job named property management |
Methods for creating, updating, deleting, and enumerating Job Named Properties (section 3.1.1).<251> |
|
Methods for processing Branch Office Print Remote Log Entries (section 3.1.1).<252> |
The following table lists all the methods of the Print System Remote Protocol in ascending opnum order.
Methods in RPC Opnum Order
Method |
Description |
---|---|
RpcEnumPrinters enumerates available printers, print servers, domains, or print providers. Opnum: 0 |
|
RpcOpenPrinter retrieves a handle for a printer, port, port monitor, print job, or print server. Opnum: 1 |
|
RpcSetJob pauses, resumes, cancels, or restarts a print job. It also sets print job parameters, for example, the job priority and the document name. Opnum: 2 |
|
RpcGetJob retrieves information about a specified print job. Opnum: 3 |
|
RpcEnumJobs retrieves information about a specified set of print jobs for a specified printer. Opnum: 4 |
|
RpcAddPrinter adds a printer to the list of supported printers for a specified server. Opnum: 5 |
|
RpcDeletePrinter deletes the specified printer object. Opnum: 6 |
|
RpcSetPrinter sets the data for a specified printer or sets the state of the specified printer by pausing or resuming printing, or clearing all print jobs. Opnum: 7 |
|
RpcGetPrinter retrieves information about a specified printer. Opnum: 8 |
|
RpcAddPrinterDriver installs a printer driver on the print server and links the configuration, data, and printer driver files. Opnum: 9 |
|
RpcEnumPrinterDrivers enumerates the printer drivers installed on a specified print server. Opnum: 10 |
|
RpcGetPrinterDriver retrieves printer driver data for the specified printer. Opnum: 11 |
|
RpcGetPrinterDriverDirectory retrieves the path of the printer driver directory. Opnum: 12 |
|
RpcDeletePrinterDriver removes the specified printer driver from the list of supported drivers for a print server. Opnum: 13 |
|
RpcAddPrintProcessor installs a print processor on the specified server and adds its name to an internal list of supported print processors. Opnum: 14 |
|
RpcEnumPrintProcessors enumerates the print processors installed on a specified server. Opnum: 15 |
|
RpcGetPrintProcessorDirectory retrieves the path for the print processor on the specified server. Opnum: 16 |
|
RpcStartDocPrinter notifies the print spooler that a document is being spooled for printing. Opnum: 17 |
|
RpcStartPagePrinter notifies the spooler that a page is about to be printed on the specified printer. Opnum: 18 |
|
RpcWritePrinter sends data to the print spooler. Opnum: 19 |
|
RpcEndPagePrinter notifies the print spooler that the application is at the end of a page in a print job. Opnum: 20 |
|
RpcAbortPrinter aborts the currently spooling print document. Opnum: 21 |
|
RpcReadPrinter retrieves data from the specified printer. Opnum: 22 |
|
RpcEndDocPrinter notifies the print spooler that the application is at the end of the current print job. Opnum: 23 |
|
RpcAddJob returns ERROR_INVALID_PARAMETER. Opnum: 24 |
|
RpcScheduleJob returns ERROR_SPL_NO_ADDJOB. Opnum: 25 |
|
RpcGetPrinterData retrieves configuration data for a printer or print server. Opnum: 26 |
|
RpcSetPrinterData sets the configuration data for a printer or print server. Opnum: 27 |
|
RpcWaitForPrinterChange retrieves information about the most recent change notification associated with a printer or print server. Opnum: 28 |
|
RpcClosePrinter closes a handle to a printer object, server object, job object, or port object. Opnum: 29 |
|
RpcAddForm adds a form name to the list of supported forms. Opnum: 30 |
|
RpcDeleteForm removes a form name from the list of supported forms. Opnum: 31 |
|
RpcGetForm retrieves information about a specified form. Opnum: 32 |
|
RpcSetForm replaces the form information for the specified form. Opnum: 33 |
|
RpcEnumForms enumerates the forms that the specified printer supports. Opnum: 34 |
|
RpcEnumPorts enumerates the ports that are available for printing on a specified server. Opnum: 35 |
|
RpcEnumMonitors retrieves information about the port monitors installed on the specified server. Opnum: 36 |
|
Opnum37NotUsedOnWire |
Reserved for local use. Opnum: 37 |
Opnum38NotUsedOnWire |
Reserved for local use. Opnum: 38 |
RpcDeletePort removes a port added by the RpcAddPortEx method. Opnum: 39 |
|
RpcCreatePrinterIC is called by the Graphics Device Interface (GDI) to create an information context for a printer. Opnum: 40 |
|
RpcPlayGdiScriptOnPrinterIC returns identifying information for fonts available for printing to a printer object. Opnum: 41 |
|
RpcDeletePrinterIC deletes a printer information context (IC). Opnum: 42 |
|
Opnum43NotUsedOnWire |
Reserved for local use. Opnum: 43 |
Opnum44NotUsedOnWire |
Reserved for local use. Opnum: 44 |
Opnum45NotUsedOnWire |
Reserved for local use. Opnum: 45 |
RpcAddMonitor installs a local port monitor and links the configuration, data, and monitor files. Opnum: 46 |
|
RpcDeleteMonitor removes a port monitor. Opnum: 47 |
|
RpcDeletePrintProcessor removes a print processor. Opnum: 48 |
|
Opnum49NotUsedOnWire |
Reserved for local use. Opnum: 49 |
Opnum50NotUsedOnWire |
Reserved for local use. Opnum: 50 |
RpcEnumPrintProcessorDatatypes enumerates the data types that a specified print processor supports. Opnum: 51 |
|
RpcResetPrinter resets the data type and device mode values to use for printing documents submitted by RpcStartDocPrinter (section 3.1.4.9.1). Opnum: 52 |
|
RpcGetPrinterDriver2 retrieves printer driver data for the specified printer. Opnum: 53 |
|
Opnum54NotUsedOnWire |
Reserved for local use. Opnum: 54 |
Opnum55NotUsedOnWire |
Reserved for local use. Opnum: 55 |
RpcFindClosePrinterChangeNotification closes a change notification object created by calling RpcRemoteFindFirstPrinterChangeNotification (section 3.1.4.10.3). The printer or print server associated with the change notification object no longer will be monitored by that object. Opnum: 56 |
|
Opnum57NotUsedOnWire |
Reserved for local use. Opnum: 57 |
RpcReplyOpenPrinter establishes a context handle from the server to the client. The server uses the context handle to send notification data to the client machine. Opnum: 58 |
|
RpcRouterReplyPrinter handles the notification coming from a remote router, as opposed to one coming from a print provider. Opnum: 59 |
|
RpcReplyClosePrinter closes the notification channel opened by the RpcReplyOpenPrinter (section 3.2.4.1.1) method between the server and client. Opnum: 60 |
|
RpcAddPortEx |
RpcAddPortEx adds a port name to the list of supported ports. Opnum: 61 |
RpcRemoteFindFirstPrinterChangeNotification |
RpcRemoteFindFirstPrinterChangeNotification creates a remote change notification object that monitors changes to printer objects and sends change notifications to the client using the method RpcRouterReplyPrinter (section 3.2.4.1.2). Opnum: 62 |
Opnum63NotUsedOnWire |
Reserved for local use. Opnum: 63 |
Opnum64NotUsedOnWire |
Reserved for local use. Opnum: 64 |
RpcRemoteFindFirstPrinterChangeNotificationEx creates a remote change notification object that monitors changes to printer objects and sends change notifications to the client using the method RpcRouterReplyPrinterEx (section 3.2.4.1.4). Opnum: 65 |
|
RpcRouterReplyPrinterEx |
RpcRouterReplyPrinterEx handles the notification coming from a remote router, as opposed to one coming from a print provider. It is similar to RpcRouterReplyPrinter but an RPC_V2_UREPLY_PRINTER structure to specify the set of notifications that the client requested. Opnum: 66 |
RpcRouterRefreshPrinterChangeNotification returns change notification information. Opnum: 67 |
|
Opnum68NotUsedOnWire |
Reserved for local use. Opnum: 68 |
RpcOpenPrinterEx retrieves handle for a printer, port, port monitor, print job, or print server. This method is similar to RpcOpenPrinter but takes a pointer to an SPLCLIENT_CONTAINER (section 2.2.1.2.14) structure, which contains information about the connecting client. Opnum: 69 |
|
RpcAddPrinterEx installs a printer on the print server. This method is similar to RpcAddPrinter but takes a pointer to an SPLCLIENT_CONTAINER structure, which contains information about the connecting client. Opnum: 70 |
|
RpcSetPort sets the status associated with a printer port. Opnum: 71 |
|
RpcEnumPrinterData enumerates configuration data for a specified printer. Opnum: 72 |
|
RpcDeletePrinterData deletes specified configuration data for a printer. Opnum: 73 |
|
Opnum74NotUsedOnWire |
Reserved for local use. Opnum: 74 |
Opnum75NotUsedOnWire |
Reserved for local use. Opnum: 75 |
Opnum76NotUsedOnWire |
Reserved for local use. Opnum: 76 |
RpcSetPrinterDataEx sets the configuration data for a printer or print server. This method is similar to RpcSetPrinterData but also allows the caller to specify the registry key under which to store the data. Opnum: 77 |
|
RpcGetPrinterDataEx retrieves configuration data for the specified printer or print server. This method extends RpcGetPrinterData and can retrieve values sorted under a specified key by RpcSetPrinterDataEx. Opnum: 78 |
|
RpcEnumPrinterDataEx enumerates all value names and data for a specified printer and key. This method extends RpcEnumPrinterData by retrieving several values in a single call. Opnum: 79 |
|
RpcEnumPrinterKey enumerates the subkeys of a specified key for a specified printer. Printer data is stored in the registry. Opnum: 80 |
|
RpcDeletePrinterDataEx deletes specified configuration data for a printer. This method is similar to RpcDeletePrinterData but accesses the configuration data using a set of named and typed values that are stored in a hierarchy of registry keys. Opnum: 81 |
|
RpcDeletePrinterKey deletes a specified key and all of its subkeys for a specified printer. Opnum: 82 |
|
Opnum83NotUsedOnWire |
Reserved for local use. Opnum: 83 |
RpcDeletePrinterDriverEx removes the specified printer driver from the list of supported drivers for a print server and deletes the files associated with the driver. This method is similar to RpcDeletePrinterDriver but can also delete specific versions of the driver. Opnum: 84 |
|
RpcAddPerMachineConnection stores the print server name and the name of the binary executable used as a provider for a particular connection. Opnum: 85 |
|
RpcDeletePerMachineConnection deletes information about a server and connection provider. Opnum: 86 |
|
RpcEnumPerMachineConnections enumerates each of the connections and copies PRINTER_INFO_4 (section 2.2.1.10.5) structures for all the per-machine connections to the buffer pPrinterEnum. Opnum: 87 |
|
RpcXcvData provides an extensible mechanism by which a client can control ports on the server and exchange port-specific commands and data with the server. See section 3.1.4.11 for details on language monitor methods. Opnum: 88 |
|
RpcAddPrinterDriverEx installs a printer driver on the print server. This method performs a function similar to RpcAddPrinterDriver and additionally allows options to be specified which permit printer driver upgrade, printer driver downgrade, copying of newer files only, and copying of all files regardless of their time stamps. Opnum: 89 |
|
Opnum90NotUsedOnWire |
Reserved for local use. Opnum: 90 |
Opnum91NotUsedOnWire |
Reserved for local use. Opnum: 91 |
Opnum92NotUsedOnWire |
Reserved for local use. Opnum: 92 |
Opnum93NotUsedOnWire |
Reserved for local use. Opnum: 93 |
Opnum94NotUsedOnWire |
Reserved for local use. Opnum: 94 |
Opnum95NotUsedOnWire |
Reserved for local use. Opnum: 95 |
RpcFlushPrinter is used by the printer driver to send a buffer of bytes to the port to cleanly abort a print job. It also allows delaying the I/O line to the printer. Opnum: 96 |
|
RpcSendRecvBidiData sends and receives bidirectional data. This method is used to communicate with port monitors that support such data. Opnum: 97 |
|
Opnum98NotUsedOnWire |
Reserved for local use. Opnum: 98 |
Opnum99NotUsedOnWire |
Reserved for local use. Opnum: 99 |
Opnum100NotUsedOnWire |
Reserved for local use. Opnum: 100 |
Opnum101NotUsedOnWire |
Reserved for local use. Opnum: 101 |
RpcGetCorePrinterDrivers gets the GUIDs, versions, and publish dates of the specified core printer drivers, and the paths to their packages. Opnum: 102 |
|
Opnum103NotUsedOnWire |
Reserved for local use. Opnum: 103 |
RpcGetPrinterDriverPackagePath gets the path to the specified printer driver package. Opnum: 104 |
|
Opnum105NotUsedOnWire |
Reserved for local use. Opnum: 105 |
Opnum106NotUsedOnWire |
Reserved for local use. Opnum: 106 |
Opnum107NotUsedOnWire |
Reserved for local use. Opnum: 107 |
Opnum108NotUsedOnWire |
Reserved for local use. Opnum: 108 |
Opnum109NotUsedOnWire |
Reserved for local use. Opnum: 109 |
RpcGetJobNamedPropertyValue retrieves the value of the specified Job Named Property (section 3.1.1) for the specified print job. Opnum: 110 |
|
RpcSetJobNamedProperty creates a new Job Named Property or changes the value of an existing Job Named Property for the specified print job. Opnum: 111 |
|
RpcDeleteJobNamedProperty deletes a Job Named Property for the specified print job. Opnum: 112 |
|
RpcEnumJobNamedProperties enumerates the Job Named Properties for the specified print job. Opnum: 113 |
|
Opnum114NotUsedOnWire |
Reserved for local use. Opnum: 114 |
Opnum115NotUsedOnWire |
Reserved for local use. Opnum: 115 |
RpcLogJobInfoForBranchOffice processes one or more Branch Office Print Remote Log Entries (section 3.1.1). Opnum: 116 |
In the preceding table, the term "Reserved for local use" means that the client MUST NOT send the opnum, and server behavior is undefined since it does not affect interoperability.<253>
All these methods are request/response RPC methods. They MUST return zero to indicate successful completion and nonzero values to indicate failure, unless noted otherwise.
Unless stated otherwise, if a method fails for any reason, returning a nonzero failure value, the server state as visible to the client through this or any other protocol MUST NOT change.
Two nonzero return codes have specific meanings in this protocol, ERROR_MORE_DATA and ERROR_INSUFFICIENT_BUFFER [MS-ERREF]. When a method declaration in this specification has an output parameter that supplies a needed buffer size, one of the values in the following table can be returned from a call to that method to enable the caller to discover that size. Thus, there are circumstances in which a nonzero return value SHOULD NOT be treated as an error, but, instead, the client SHOULD allocate a buffer with a larger size and retry the request. These cases are noted in the method definitions in this section.
Name/value |
Description |
---|---|
ERROR_INSUFFICIENT_BUFFER 0x0000007A |
The data area passed to a system call is too small. |
ERROR_MORE_DATA 0x000000EA |
More data is available. |