Winprotocoldoc.blob.core.windows.net



[MS-RDPEXPS]: Remote Desktop Protocol: XML Paper Specification (XPS) Print Virtual Channel ExtensionIntellectual Property Rights Notice for Open Specifications DocumentationTechnical Documentation. Microsoft publishes Open Specifications documentation (“this documentation”) for protocols, file formats, data portability, computer languages, and standards support. Additionally, overview documents cover inter-protocol relationships and interactions. Copyrights. This documentation is covered by Microsoft copyrights. Regardless of any other terms that are contained in the terms of use for the Microsoft website that hosts this documentation, you can make copies of it in order to develop implementations of the technologies that are described in this documentation and can distribute portions of it in your implementations that use these technologies or in your documentation as necessary to properly document the implementation. You can also distribute in your implementation, with or without modification, any schemas, IDLs, or code samples that are included in the documentation. This permission also applies to any documents that are referenced in the Open Specifications documentation. No Trade Secrets. Microsoft does not claim any trade secret rights in this documentation. Patents. Microsoft has patents that might cover your implementations of the technologies described in the Open Specifications documentation. Neither this notice nor Microsoft's delivery of this documentation grants any licenses under those patents or any other Microsoft patents. However, a given Open Specifications document might be covered by the Microsoft Open Specifications Promise or the Microsoft Community Promise. If you would prefer a written license, or if the technologies described in this documentation are not covered by the Open Specifications Promise or Community Promise, as applicable, patent licenses are available by contacting iplg@. License Programs. To see all of the protocols in scope under a specific license program and the associated patents, visit the Patent Map. Trademarks. The names of companies and products contained in this documentation might be covered by trademarks or similar intellectual property rights. This notice does not grant any licenses under those rights. For a list of Microsoft trademarks, visit trademarks. Fictitious Names. The example companies, organizations, products, domain names, email addresses, logos, people, places, and events that are depicted in this documentation are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, place, or event is intended or should be inferred.Reservation of Rights. All other rights are reserved, and this notice does not grant any rights other than as specifically described above, whether by implication, estoppel, or otherwise. Tools. The Open Specifications documentation does not require the use of Microsoft programming tools or programming environments in order for you to develop an implementation. If you have access to Microsoft programming tools and environments, you are free to take advantage of them. Certain Open Specifications documents are intended for use in conjunction with publicly available standards specifications and network programming art and, as such, assume that the reader either is familiar with the aforementioned material or has immediate access to it.Support. For questions and support, please contact dochelp@. Revision SummaryDateRevision HistoryRevision ClassComments6/1/20070.01NewVersion 0.01 release7/3/20071.0MajorMLonghorn+907/20/20071.0.1EditorialChanged language and formatting in the technical content.8/10/20071.1MinorUpdated content based on feedback.9/28/20071.2MinorMade technical and editorial changes based on feedback.10/23/20071.3MinorMade technical and editorial changes based on feedback.11/30/20071.4MinorMade technical and editorial changes based on feedback.1/25/20081.5MinorClarified the meaning of the technical content.3/14/20081.5.1EditorialChanged language and formatting in the technical content.5/16/20081.5.2EditorialChanged language and formatting in the technical content.6/20/20081.6MinorClarified the meaning of the technical content.7/25/20081.7MinorClarified the meaning of the technical content.8/29/20081.7.1EditorialChanged language and formatting in the technical content.10/24/20081.7.2EditorialChanged language and formatting in the technical content.12/5/20081.7.3EditorialChanged language and formatting in the technical content.1/16/20091.7.4EditorialChanged language and formatting in the technical content.2/27/20091.7.5EditorialChanged language and formatting in the technical content.4/10/20091.7.6EditorialChanged language and formatting in the technical content.5/22/20091.7.7EditorialChanged language and formatting in the technical content.7/2/20092.0MajorUpdated and revised the technical content.8/14/20092.0.1EditorialChanged language and formatting in the technical content.9/25/20092.1MinorClarified the meaning of the technical content.11/6/20092.1.1EditorialChanged language and formatting in the technical content.12/18/20093.0MajorUpdated and revised the technical content.1/29/20103.0.1EditorialChanged language and formatting in the technical content.3/12/20104.0MajorUpdated and revised the technical content.4/23/20105.0MajorUpdated and revised the technical content.6/4/20106.0MajorUpdated and revised the technical content.7/16/20107.0MajorUpdated and revised the technical content.8/27/20107.0NoneNo changes to the meaning, language, or formatting of the technical content.10/8/20107.1MinorClarified the meaning of the technical content.11/19/20107.1NoneNo changes to the meaning, language, or formatting of the technical content.1/7/20117.1NoneNo changes to the meaning, language, or formatting of the technical content.2/11/20118.0MajorUpdated and revised the technical content.3/25/20118.0NoneNo changes to the meaning, language, or formatting of the technical content.5/6/20118.0NoneNo changes to the meaning, language, or formatting of the technical content.6/17/20118.1MinorClarified the meaning of the technical content.9/23/20118.1NoneNo changes to the meaning, language, or formatting of the technical content.12/16/20119.0MajorUpdated and revised the technical content.3/30/20129.0NoneNo changes to the meaning, language, or formatting of the technical content.7/12/20129.0NoneNo changes to the meaning, language, or formatting of the technical content.10/25/20129.0NoneNo changes to the meaning, language, or formatting of the technical content.1/31/20139.0NoneNo changes to the meaning, language, or formatting of the technical content.8/8/201310.0MajorUpdated and revised the technical content.11/14/201310.0NoneNo changes to the meaning, language, or formatting of the technical content.2/13/201410.0NoneNo changes to the meaning, language, or formatting of the technical content.5/15/201410.0NoneNo changes to the meaning, language, or formatting of the technical content.6/30/201511.0MajorSignificantly changed the technical content.10/16/201511.0NoneNo changes to the meaning, language, or formatting of the technical content.7/14/201611.0NoneNo changes to the meaning, language, or formatting of the technical content.6/1/201711.0NoneNo changes to the meaning, language, or formatting of the technical content.9/15/201712.0MajorSignificantly changed the technical content.12/1/201712.0NoneNo changes to the meaning, language, or formatting of the technical content.9/12/201813.0MajorSignificantly changed the technical content.Table of ContentsTOC \o "1-9" \h \z1Introduction PAGEREF _Toc523396247 \h 101.1Glossary PAGEREF _Toc523396248 \h 101.2References PAGEREF _Toc523396249 \h 111.2.1Normative References PAGEREF _Toc523396250 \h 111.2.2Informative References PAGEREF _Toc523396251 \h 111.3Overview PAGEREF _Toc523396252 \h 121.3.1XPS Basics PAGEREF _Toc523396253 \h 131.3.2XPS Print Virtual Channel Protocol PAGEREF _Toc523396254 \h 131.3.2.1Interface Manipulation PAGEREF _Toc523396255 \h 131.3.2.1.1Interface Query PAGEREF _Toc523396256 \h 131.3.2.1.2Interface Release PAGEREF _Toc523396257 \h 131.3.2.2Printer Ticket Interface PAGEREF _Toc523396258 \h 131.3.2.2.1Printer Ticket Interface Initialization Messages PAGEREF _Toc523396259 \h 141.3.2.2.2Printer Ticket Interface Capability Negotiation Messages PAGEREF _Toc523396260 \h 141.3.2.3Printer Driver Interface PAGEREF _Toc523396261 \h 141.3.2.3.1Printer Driver Interface Initialization Messages PAGEREF _Toc523396262 \h 161.3.2.3.2Printer Driver Interface Capability Negotiation Messages PAGEREF _Toc523396263 \h 161.3.2.3.3User Interface Messages PAGEREF _Toc523396264 \h 171.4Relationship to Other Protocols PAGEREF _Toc523396265 \h 181.5Prerequisites/Preconditions PAGEREF _Toc523396266 \h 191.6Applicability Statement PAGEREF _Toc523396267 \h 191.7Versioning and Capability Negotiation PAGEREF _Toc523396268 \h 191.8Vendor-Extensible Fields PAGEREF _Toc523396269 \h 191.9Standards Assignments PAGEREF _Toc523396270 \h 202Messages PAGEREF _Toc523396271 \h 212.1Transport PAGEREF _Toc523396272 \h 212.2Message Syntax PAGEREF _Toc523396273 \h 212.2.1Shared Message Header (SHARED_MSG_HEADER) PAGEREF _Toc523396274 \h 212.2.2Interface Manipulation PAGEREF _Toc523396275 \h 232.2.2.1Interface Query PAGEREF _Toc523396276 \h 232.2.2.1.1Query Interface Request (QI_REQ) PAGEREF _Toc523396277 \h 232.2.2.1.2Query Interface Response (QI_RSP) PAGEREF _Toc523396278 \h 242.2.2.2Interface Release (IFACE_RELEASE) PAGEREF _Toc523396279 \h 242.2.3Printer Ticket Interface PAGEREF _Toc523396280 \h 242.2.3.1Initialization Messages PAGEREF _Toc523396281 \h 252.2.3.1.1Server Get Supported Versions Request (GET_SUPPORTED_VERSIONS_REQ) PAGEREF _Toc523396282 \h 252.2.3.1.2Client Get Supported Versions Response (GET_SUPPORTED_VERSIONS_RSP) PAGEREF _Toc523396283 \h 252.2.3.1.3Server Bind Printer Request (BIND_PRINTER_REQ) PAGEREF _Toc523396284 \h 262.2.3.1.4Client Bind Printer Response (BIND_PRINTER_RSP) PAGEREF _Toc523396285 \h 262.2.3.2Capability Negotiation Messages PAGEREF _Toc523396286 \h 272.2.3.2.1Server Query Device Namespace Request (QUERY_DEV_NS_REQ) PAGEREF _Toc523396287 \h 272.2.3.2.2Client Query Device Namespace Response (QUERY_DEV_NS_RSP) PAGEREF _Toc523396288 \h 272.2.3.2.3Server Print Ticket to Devmode Request (PRINT_TKT_TO_DEVMODE_REQ) PAGEREF _Toc523396289 \h 282.2.3.2.4Client Print Ticket to Devmode Response (PRINT_TKT_TO_DEVMODE_RSP) PAGEREF _Toc523396290 \h 292.2.3.2.5Server Devmode to Print Ticket Request (DEVMODE_TO_PRINT_TKT_REQ) PAGEREF _Toc523396291 \h 292.2.3.2.6Client Devmode to Print Ticket Response (DEVMODE_TO_PRINT_TKT_RSP) PAGEREF _Toc523396292 \h 302.2.3.2.7Server Print Caps Request (PRINT_CAPS_REQ) PAGEREF _Toc523396293 \h 312.2.3.2.8Client Print Caps Response (PRINT_CAPS_RSP) PAGEREF _Toc523396294 \h 312.2.3.2.9Server Print Caps From Print Ticket Request (PRINT_CAPS_FROM_PRINT_TKT_REQ) PAGEREF _Toc523396295 \h 322.2.3.2.10Client Print Caps From Print Ticket Response (PRINT_CAPS_FROM_PRINT_TKT_RSP) PAGEREF _Toc523396296 \h 322.2.3.2.11Server Validate Print Ticket Request (VALIDATE_PRINT_TKT_REQ) PAGEREF _Toc523396297 \h 332.2.3.2.12Client Validate Print Ticket Response (VALIDATE_PRINT_TKT_RSP) PAGEREF _Toc523396298 \h 332.2.4Printer Driver Interface PAGEREF _Toc523396299 \h 342.2.4.1Initialization Messages PAGEREF _Toc523396300 \h 342.2.4.1.1Server Initialize Printer Request (INIT_PRINTER_REQ) PAGEREF _Toc523396301 \h 342.2.4.1.2Client Initialize Printer Response (INIT_PRINTER_RSP) PAGEREF _Toc523396302 \h 352.2.4.2Capability Negotiation Messages PAGEREF _Toc523396303 \h 352.2.4.2.1Server Get All Dev Caps Request (GET_ALL_DEV_CAPS_REQ) PAGEREF _Toc523396304 \h 352.2.4.2.2Client Get All Dev Caps Response (GET_ALL_DEV_CAPS_RSP) PAGEREF _Toc523396305 \h 352.2.4.2.3Server Convert Devmode Request (CONVERT_DEVMODE_REQ) PAGEREF _Toc523396306 \h 362.2.4.2.4Client Convert Devmode Response (CONVERT_DEVMODE_RSP) PAGEREF _Toc523396307 \h 372.2.4.2.5Server Get Device Capability Request (GET_DEVICE_CAP_REQ) PAGEREF _Toc523396308 \h 382.2.4.2.6Client Get Device Capability Response (GET_DEVICE_CAP_RSP) PAGEREF _Toc523396309 \h 392.2.4.2.7Server Document Properties Request (DOC_PROPERTIES_REQ) PAGEREF _Toc523396310 \h 392.2.4.2.8Client Document Properties Response (DOC_PROPERTIES_RSP) PAGEREF _Toc523396311 \h 402.2.4.2.9Server Get Device Adjustment Request (MXDC_GETPDEV_ADJUSTMENT_REQ) PAGEREF _Toc523396312 \h 422.2.4.2.10Client Get Device Adjustment Reply (MXDC_GETPDEV_ADJUSTMENT_RSP) PAGEREF _Toc523396313 \h 432.2.4.3User Interface Messages PAGEREF _Toc523396314 \h 432.2.4.3.1Printer Properties UI PAGEREF _Toc523396315 \h 432.2.4.3.1.1Server Async Printer Properties Request (ASYNC_PRINTER_PROPS_REQ) PAGEREF _Toc523396316 \h 442.2.4.3.1.2Client Async Printer Properties Response (ASYNC_PRINTER_PROPS_RSP) PAGEREF _Toc523396317 \h 442.2.4.3.1.3Client Printer Properties Callback Request (PRINTER_PROPS_CALLBACK_REQ) PAGEREF _Toc523396318 \h 452.2.4.3.1.4Server Printer Properties Callback Response (PRINTER_PROPS_CALLBACK_RSP) PAGEREF _Toc523396319 \h 452.2.4.3.1.5Server Cancel Async Printer Properties Request (CANCEL_ASYNC_PRINTER_PROPS_REQ) PAGEREF _Toc523396320 \h 462.2.4.3.1.6Client Cancel Async Printer Properties Response (CANCEL_ASYNC_PRINTER_PROPS_RSP) PAGEREF _Toc523396321 \h 462.2.4.3.2Document Properties UI PAGEREF _Toc523396322 \h 472.2.4.3.2.1Server Async Document Properties Request (ASYNC_DOC_PROPS_REQ) PAGEREF _Toc523396323 \h 472.2.4.3.2.2Client Async Document Properties Response (ASYNC_DOC_PROPS_RSP) PAGEREF _Toc523396324 \h 482.2.4.3.2.3Client Document Properties Callback Request (DOC_PROPS_CALLBACK_REQ) PAGEREF _Toc523396325 \h 482.2.4.3.2.4Server Document Properties Callback Response (DOC_PROPS_CALLBACK_RSP) PAGEREF _Toc523396326 \h 492.2.4.3.2.5Server Cancel Async Document Properties Request (CANCEL_ASYNC_DOC_PROPS_REQ) PAGEREF _Toc523396327 \h 492.2.4.3.2.6Client Cancel Async Document Properties Response (CANCEL_ASYNC_DOC_PROPS_RSP) PAGEREF _Toc523396328 \h 492.2.4.3.2.7Server Move Document Properties Window Request (MOVE_DOC_PROPERTIES_REQ) PAGEREF _Toc523396329 \h 502.2.4.3.2.8Client Move Document Properties Window Reply (MOVE_DOC_PROPERTIES_RSP) PAGEREF _Toc523396330 \h 502.2.5XML Document (XML_DOCUMENT) PAGEREF _Toc523396331 \h 512.2.6Device Capabilities (TSDEVICE_CAPABILITIES) PAGEREF _Toc523396332 \h 512.2.7Printer Property (TSPRINTER_PROPERTY) PAGEREF _Toc523396333 \h 523Protocol Details PAGEREF _Toc523396334 \h 543.1Common Details PAGEREF _Toc523396335 \h 543.1.1Abstract Data Model PAGEREF _Toc523396336 \h 543.1.2Timers PAGEREF _Toc523396337 \h 543.1.3Initialization PAGEREF _Toc523396338 \h 553.1.4Higher-Layer Triggered Events PAGEREF _Toc523396339 \h 553.1.5Processing Events and Sequencing Rules PAGEREF _Toc523396340 \h 553.1.5.1Processing a Shared Message Header PAGEREF _Toc523396341 \h 553.1.5.2Interface Manipulation PAGEREF _Toc523396342 \h 553.1.5.2.1Interface Query Message PAGEREF _Toc523396343 \h 553.1.5.2.1.1Sending an Interface Query Message PAGEREF _Toc523396344 \h 553.1.5.2.1.2Receiving an Interface Query Message PAGEREF _Toc523396345 \h 553.1.5.2.2Interface Release Message PAGEREF _Toc523396346 \h 563.1.5.2.2.1Sending an Interface Release Message PAGEREF _Toc523396347 \h 563.1.5.2.2.2Receiving an Interface Release Message PAGEREF _Toc523396348 \h 563.1.6Timer Events PAGEREF _Toc523396349 \h 563.1.7Other Local Events PAGEREF _Toc523396350 \h 563.2Client Details PAGEREF _Toc523396351 \h 563.2.1Abstract Data Model PAGEREF _Toc523396352 \h 563.2.2Timers PAGEREF _Toc523396353 \h 563.2.3Initialization PAGEREF _Toc523396354 \h 563.2.4Higher-Layer Triggered Events PAGEREF _Toc523396355 \h 563.2.5Processing Events and Sequencing Rules PAGEREF _Toc523396356 \h 573.2.5.1Interface Manipulation PAGEREF _Toc523396357 \h 573.2.5.1.1Interface Query Message PAGEREF _Toc523396358 \h 573.2.5.1.1.1Processing a Query Interface Request PAGEREF _Toc523396359 \h 573.2.5.1.1.2Sending a Query Interface Response PAGEREF _Toc523396360 \h 573.2.5.2Printer Ticket Interface PAGEREF _Toc523396361 \h 573.2.5.2.1Initialization Messages PAGEREF _Toc523396362 \h 573.2.5.2.1.1Processing a Get Supported Versions Request PAGEREF _Toc523396363 \h 573.2.5.2.1.2Sending a Get Supported Versions Response PAGEREF _Toc523396364 \h 573.2.5.2.1.3Processing a Bind Printer Request PAGEREF _Toc523396365 \h 573.2.5.2.1.4Sending a Bind Printer Response PAGEREF _Toc523396366 \h 573.2.5.2.2Capability Negotiation Messages PAGEREF _Toc523396367 \h 573.2.5.2.2.1Processing a Query Device Namespace Request PAGEREF _Toc523396368 \h 583.2.5.2.2.2Sending a Query Device Namespace Response PAGEREF _Toc523396369 \h 583.2.5.2.2.3Processing a Print Ticket to Devmode Request PAGEREF _Toc523396370 \h 583.2.5.2.2.4Sending a Print Ticket to Devmode Response PAGEREF _Toc523396371 \h 583.2.5.2.2.5Processing a Devmode to Print Ticket Request PAGEREF _Toc523396372 \h 583.2.5.2.2.6Sending a Devmode to Print Ticket Response PAGEREF _Toc523396373 \h 583.2.5.2.2.7Processing a Print Caps Request PAGEREF _Toc523396374 \h 583.2.5.2.2.8Sending a Print Caps Response PAGEREF _Toc523396375 \h 583.2.5.2.2.9Processing a Print Caps From Print Ticket Request PAGEREF _Toc523396376 \h 583.2.5.2.2.10Sending a Print Caps From Print Ticket Response PAGEREF _Toc523396377 \h 583.2.5.2.2.11Processing a Validate Print Ticket Request PAGEREF _Toc523396378 \h 593.2.5.2.2.12Sending a Validate Print Ticket Response PAGEREF _Toc523396379 \h 593.2.5.3Printer Driver Interface PAGEREF _Toc523396380 \h 593.2.5.3.1Initialization Messages PAGEREF _Toc523396381 \h 593.2.5.3.1.1Processing an Initialize Printer Request PAGEREF _Toc523396382 \h 593.2.5.3.1.2Sending an Initialize Printer Response PAGEREF _Toc523396383 \h 593.2.5.3.2Capability Negotiation Messages PAGEREF _Toc523396384 \h 593.2.5.3.2.1Processing a Get All Dev Caps Request PAGEREF _Toc523396385 \h 593.2.5.3.2.2Sending a Get All Dev Caps Response PAGEREF _Toc523396386 \h 593.2.5.3.2.3Processing a Convert Devmode Request PAGEREF _Toc523396387 \h 593.2.5.3.2.4Sending a Convert Devmode Response PAGEREF _Toc523396388 \h 603.2.5.3.2.5Processing a Get Device Capability Request PAGEREF _Toc523396389 \h 603.2.5.3.2.6Sending a Get Device Capability Response PAGEREF _Toc523396390 \h 603.2.5.3.2.7Processing a Document Properties Request PAGEREF _Toc523396391 \h 603.2.5.3.2.8Sending a Document Properties Response PAGEREF _Toc523396392 \h 603.2.5.3.2.9Processing a Get Device Adjustment Request PAGEREF _Toc523396393 \h 613.2.5.3.2.10Sending a Get Device Adjustment Response PAGEREF _Toc523396394 \h 613.2.5.3.3User Interface Messages PAGEREF _Toc523396395 \h 613.2.5.3.3.1Printer Properties UI PAGEREF _Toc523396396 \h 613.2.5.3.3.1.1Processing an Async Printer Properties Request PAGEREF _Toc523396397 \h 613.2.5.3.3.1.2Sending an Async Printer Properties Response PAGEREF _Toc523396398 \h 613.2.5.3.3.1.3Sending a Printer Properties Callback Request PAGEREF _Toc523396399 \h 613.2.5.3.3.1.4Processing a Printer Properties Callback Response PAGEREF _Toc523396400 \h 613.2.5.3.3.1.5Processing a Cancel Async Printer Properties Request PAGEREF _Toc523396401 \h 613.2.5.3.3.1.6Sending a Cancel Async Printer Properties Response PAGEREF _Toc523396402 \h 613.2.5.3.3.2Document Properties UI PAGEREF _Toc523396403 \h 613.2.5.3.3.2.1Processing an Async Document Properties Request PAGEREF _Toc523396404 \h 613.2.5.3.3.2.2Sending an Async Document Properties Response PAGEREF _Toc523396405 \h 623.2.5.3.3.2.3Sending a Document Properties Callback Request PAGEREF _Toc523396406 \h 623.2.5.3.3.2.4Processing a Document Properties Callback Response PAGEREF _Toc523396407 \h 623.2.5.3.3.2.5Processing a Cancel Async Document Properties Request PAGEREF _Toc523396408 \h 623.2.5.3.3.2.6Sending a Cancel Async Document Properties Response PAGEREF _Toc523396409 \h 623.2.5.3.3.3Processing a Move Document Properties Window Request PAGEREF _Toc523396410 \h 623.2.5.3.3.4Sending a Move Document Properties Window Reply PAGEREF _Toc523396411 \h 623.2.6Timer Events PAGEREF _Toc523396412 \h 623.2.7Other Local Events PAGEREF _Toc523396413 \h 623.3Server Details PAGEREF _Toc523396414 \h 633.3.1Abstract Data Model PAGEREF _Toc523396415 \h 633.3.2Timers PAGEREF _Toc523396416 \h 633.3.3Initialization PAGEREF _Toc523396417 \h 633.3.4Higher-Layer Triggered Events PAGEREF _Toc523396418 \h 633.3.5Processing Events and Sequencing Rules PAGEREF _Toc523396419 \h 633.3.5.1Printer Ticket Interface PAGEREF _Toc523396420 \h 633.3.5.1.1Initialization Messages PAGEREF _Toc523396421 \h 633.3.5.1.1.1Sending a Get Supported Versions Request PAGEREF _Toc523396422 \h 633.3.5.1.1.2Processing a Get Supported Versions Response PAGEREF _Toc523396423 \h 633.3.5.1.1.3Sending a Bind Printer Request PAGEREF _Toc523396424 \h 633.3.5.1.1.4Processing a Bind Printer Response PAGEREF _Toc523396425 \h 633.3.5.1.2Capability Negotiation Messages PAGEREF _Toc523396426 \h 643.3.5.1.2.1Sending a Query Device Namespace Request PAGEREF _Toc523396427 \h 643.3.5.1.2.2Processing a Query Device Namespace Response PAGEREF _Toc523396428 \h 643.3.5.1.2.3Sending a Print Ticket to Devmode Request PAGEREF _Toc523396429 \h 643.3.5.1.2.4Processing a Print Ticket to Devmode Response PAGEREF _Toc523396430 \h 643.3.5.1.2.5Sending a Devmode to Print Ticket Request PAGEREF _Toc523396431 \h 643.3.5.1.2.6Processing a Devmode to Print Ticket Response PAGEREF _Toc523396432 \h 643.3.5.1.2.7Sending a Print Caps Request PAGEREF _Toc523396433 \h 643.3.5.1.2.8Processing a Print Caps Response PAGEREF _Toc523396434 \h 643.3.5.1.2.9Sending a Print Caps from Print Ticket Request PAGEREF _Toc523396435 \h 643.3.5.1.2.10Processing a Print Caps from Print Ticket Response PAGEREF _Toc523396436 \h 653.3.5.1.2.11Sending a Validate Print Ticket Request PAGEREF _Toc523396437 \h 653.3.5.1.2.12Processing a Validate Print Ticket Response PAGEREF _Toc523396438 \h 653.3.5.2Printer Driver Interface PAGEREF _Toc523396439 \h 653.3.5.2.1Initialization Messages PAGEREF _Toc523396440 \h 653.3.5.2.1.1Sending an Initialize Printer Request PAGEREF _Toc523396441 \h 653.3.5.2.1.2Processing an Initialize Printer Response PAGEREF _Toc523396442 \h 653.3.5.2.2Capability Negotiation Messages PAGEREF _Toc523396443 \h 653.3.5.2.2.1Sending a Get All Dev Caps Request PAGEREF _Toc523396444 \h 653.3.5.2.2.2Processing a Get All Dev Caps Response PAGEREF _Toc523396445 \h 653.3.5.2.2.3Sending a Convert Dev Mode Request PAGEREF _Toc523396446 \h 653.3.5.2.2.4Processing a Convert Dev Mode Response PAGEREF _Toc523396447 \h 663.3.5.2.2.5Sending a Get Device Capability Request PAGEREF _Toc523396448 \h 663.3.5.2.2.6Processing a Get Device Capability Response PAGEREF _Toc523396449 \h 663.3.5.2.2.7Sending a Document Properties Request PAGEREF _Toc523396450 \h 663.3.5.2.2.8Processing a Document Properties Response PAGEREF _Toc523396451 \h 663.3.5.2.2.9Sending a Get Device Adjustment Request PAGEREF _Toc523396452 \h 663.3.5.2.2.10Processing a Get Device Adjustment Response PAGEREF _Toc523396453 \h 663.3.5.2.3User Interface Messages PAGEREF _Toc523396454 \h 673.3.5.2.3.1Printer Properties UI PAGEREF _Toc523396455 \h 673.3.5.2.3.1.1Sending an Async Printer Properties Request PAGEREF _Toc523396456 \h 673.3.5.2.3.1.2Processing an Async Printer Properties Response PAGEREF _Toc523396457 \h 673.3.5.2.3.1.3Processing a Printer Properties Callback Request PAGEREF _Toc523396458 \h 673.3.5.2.3.1.4Sending a Printer Properties Callback Response PAGEREF _Toc523396459 \h 673.3.5.2.3.1.5Sending a Cancel Async Printer Properties Request PAGEREF _Toc523396460 \h 673.3.5.2.3.1.6Processing a Cancel Async Printer Properties Response PAGEREF _Toc523396461 \h 673.3.5.2.3.2Document Properties UI PAGEREF _Toc523396462 \h 673.3.5.2.3.2.1Sending an Async Document Properties Request PAGEREF _Toc523396463 \h 673.3.5.2.3.2.2Processing an Async Document Properties Response PAGEREF _Toc523396464 \h 683.3.5.2.3.2.3Processing a Document Properties Callback Request PAGEREF _Toc523396465 \h 683.3.5.2.3.2.4Sending a Document Properties Callback Response PAGEREF _Toc523396466 \h 683.3.5.2.3.2.5Sending a Cancel Async Document Properties Request PAGEREF _Toc523396467 \h 683.3.5.2.3.2.6Processing a Cancel Async Document Properties Response PAGEREF _Toc523396468 \h 683.3.5.2.3.3Sending a Move Document Properties Window Request PAGEREF _Toc523396469 \h 683.3.5.2.3.4Processing a Move Document Properties Window Reply PAGEREF _Toc523396470 \h 683.3.6Timer Events PAGEREF _Toc523396471 \h 683.3.7Other Local Events PAGEREF _Toc523396472 \h 684Protocol Examples PAGEREF _Toc523396473 \h 695Security PAGEREF _Toc523396474 \h 805.1Security Considerations for Implementers PAGEREF _Toc523396475 \h 805.2Index of Security Parameters PAGEREF _Toc523396476 \h 806Appendix A: Product Behavior PAGEREF _Toc523396477 \h 817Change Tracking PAGEREF _Toc523396478 \h 828Index PAGEREF _Toc523396479 \h 83Introduction XE "Introduction" XE "Introduction"The Remote Desktop Protocol: XML Paper Specification (XPS) Print Virtual Channel Extension is an extension of the Remote Desktop Protocol: Basic Connectivity and Graphics Remoting (as specified in [MS-RDPBCGR]). The Remote Desktop Protocol: XML Paper Specification (XPS) Print Virtual Channel Extension runs over a dynamic virtual channel, as specified in [MS-RDPEDYC]. The Remote Desktop Protocol: XPS Print Virtual Channel Extension is used to redirect printing jobs from the terminal server to the terminal client. It specifies the communication between a virtual printer driver installed on the terminal server, and the printer driver installed on the terminal client.Sections 1.5, 1.8, 1.9, 2, and 3 of this specification are normative. All other sections and examples in this specification are informative.Glossary XE "Glossary" This document uses the following terms:binary large object (BLOB): A collection of binary data stored as a single entity in a database.client computer: A computer that instigates a connection to a well-known port on a server.client printer driver: An original equipment manufacturer (OEM) printer driver installed on the client. The client printer driver services actual printer hardware to render any printing information.DEVMODE: A binary BLOB (binary large object) of data that identifies various printing capabilities such as driver version, paper size, print quality, and custom fields that the printer driver uses to render a document on paper. The actual data stored in the DEVMODE depends on the driver implementation. Also, see the description of DEVMODE available on MSDN, at (VS.85).aspx. This protocol does not process the content of a DEVMODE.globally unique identifier (GUID): A term used interchangeably with universally unique identifier (UUID) in Microsoft protocol technical documents (TDs). Interchanging the usage of these terms does not imply or require a specific algorithm or mechanism to generate the value. Specifically, the use of this term does not imply or require that the algorithms described in [RFC4122] or [C706] must be used for generating the GUID. See also universally unique identifier (UUID).interface: A collection of messages used together. Interfaces support inheritance and extensibility through the Interface Query message as defined in [MS-RDPEXPS] section 1.3.2.1.1.print ticket: An XML representation of a DEVMODE. The actual schema depends on the implementation of the printer driver.printer driver: The interface component between the operating system and the printer device. It is responsible for processing the application data into a page description language (PDL) that can be interpreted by the printer device.printer queue: A collection of printer drivers and printer ports that maintains a list of print jobs to the printer.printing subsystem: A server-side operating system component that manages a printer driver. Within the context of this protocol, the printing subsystem communicates with the virtual printer driver.terminal server: A computer on which terminal services is running.Unicode: A character encoding standard developed by the Unicode Consortium that represents almost all of the written languages of the world. The Unicode standard [UNICODE5.0.0/2007] provides three forms (UTF-8, UTF-16, and UTF-32) and seven schemes (UTF-8, UTF-16, UTF-16 BE, UTF-16 LE, UTF-32, UTF-32 LE, and UTF-32 BE).virtual printer driver: A printer driver installed on a server computer that does not require printer hardware. Instead, it acts as a proxy to the client printer driver.XML Paper Specification (XPS): An XML-based document format. XML Paper Specification (XPS) specifies the set of conventions for the use of XML and other widely available technologies to describe the content and appearance of paginated documents. For more information, see [MSFT-XMLPAPER].MAY, SHOULD, MUST, SHOULD NOT, MUST NOT: These terms (in all caps) are used as defined in [RFC2119]. All statements of optional behavior use either MAY, SHOULD, or SHOULD NOT.References XE "References" Links to a document in the Microsoft Open Specifications library point to the correct section in the most recently published version of the referenced document. However, because individual documents in the library are not updated at the same time, the section numbers in the documents may not match. You can confirm the correct section numbering by checking the Errata. Normative References XE "References:normative" XE "Normative references" We conduct frequent surveys of the normative references to assure their continued availability. If you have any issue with finding a normative reference, please contact dochelp@. We will assist you in finding the relevant information. [MS-DTYP] Microsoft Corporation, "Windows Data Types".[MS-ERREF] Microsoft Corporation, "Windows Error Codes".[MS-RDPBCGR] Microsoft Corporation, "Remote Desktop Protocol: Basic Connectivity and Graphics Remoting".[MS-RDPEDYC] Microsoft Corporation, "Remote Desktop Protocol: Dynamic Channel Virtual Channel Extension".[MS-RDPEFS] Microsoft Corporation, "Remote Desktop Protocol: File System Virtual Channel Extension".[MS-RDPEPC] Microsoft Corporation, "Remote Desktop Protocol: Print Virtual Channel Extension".[MS-RDPERP] Microsoft Corporation, "Remote Desktop Protocol: Remote Programs Virtual Channel Extension".[MS-RDPEXPS] Microsoft Corporation, "Remote Desktop Protocol: XML Paper Specification (XPS) Print Virtual Channel Extension".[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997, References XE "References:informative" XE "Informative references" [MSFT-XMLPAPER] Microsoft Corporation, "XML Paper Specification", (v=vs.85)Overview XE "Overview (synopsis)" XE "Overview"In a typical terminal server scenario, the physical printer device is located on the client computer, while applications are running on the terminal server. Clients often need to print documents using the printer that is physically connected to the client computer. The Remote Desktop Protocol: XPS Print Virtual Channel Extension allows these jobs to be redirected to the client printer. The platform-independent XML Paper Specification (XPS) document format specifies the content-specific and document-specific properties of the print jobs.The Remote Desktop Protocol: XPS Print Virtual Channel Extension specifies communication between a virtual printer driver installed on a terminal server and a printer driver installed on the client computer. The primary purpose of this protocol is to acquire printing capabilities and to display a printer-specific user interface on the client computer.This protocol extension consists of the following interfaces.Printer Ticket Interface: See section 1.3.2.2. This interface is a group of messages that specifies how a particular document is rendered in XPS format. It also supplies a means for translating between older types of document properties.Printer Driver Interface: See section 1.3.2.3. This interface is a group of messages that specifies printer capabilities that are negotiated between the client and the server. It also assists in displaying a printer-specific user interface on the client computer.To maintain backward compatibility, as well as to extend the lifetime of the two interfaces, the Remote Desktop Protocol: XPS Print Virtual Channel Extension includes helper messages for interface manipulation (as specified in section 1.3.2.1), which are applicable to both interfaces. Figure SEQ Figure \* ARABIC 1: Client and server stack illustrating the relationship of the protocol to the printing subsystem, virtual print driver, and client printer driverXPS Basics XE "XML Paper Specification (XPS) overview"The XML Paper Specification describes XPS documents. It provides a straight mapping between printer-agnostic and printer-specific data. Every XPS document includes descriptive content for each page of a document, the embedded images and fonts, and digital rights management information. For more information, see [MSFT-XMLPAPER].XPS Print Virtual Channel ProtocolInterface Manipulation XE "Interface manipulation:overview"In the context of the Remote Desktop Protocol: XPS Print Virtual Channel Extension, interfaces are groups of messages with a common identifier. The Remote Desktop Protocol: XPS Print Virtual Channel Extension includes a common infrastructure for manipulating these interfaces, called Interface Manipulation. This infrastructure consists of Interface Query and Interface Release messages. A newer version of an interface can be retrieved by sending an Interface Query message. In addition, to keep the number of active interfaces on the network low, an interface is terminated by means of an Interface Release message. Interfaces are identified by interface identifiers (InterfaceIds, section 3.1.1). An InterfaceId, together with a function ID (FunctionId, section 3.1.1), uniquely identifies the request message. FunctionIds are explicitly specified only in request messages. Reply packets contain only message IDs (MessageId, section 3.1.1), and hence implicitly contain the FunctionId for which they were associated. A further differentiation exists between InterfaceIds and MessageIds originating from either the client or the server side of the connection. The uniqueness of these IDs is guaranteed only for those InterfaceIds that originate from the same side of the connection. This means that a request from server to client with InterfaceId 1 and MessageId 2 is different than a request with the same IDs from the client side. The same is true for replies.Interface Query XE "Interface Query"An Interface Query is a request/reply exchange. It establishes a new interface ID that can be used as part of a different interface. For example, version 1.0 of the protocol supports messages AA, AB, and AC. These messages are always available for processing on both sides of the connection, and can be called without any explicit query interface exchanges. If a new server or client is introduced with improved interface exchanges, an implementer can add two new messages—BA and BB. These two new messages form a new interface, which is identified by a GUID. To establish whether the remote side of the interface supports these new messages, an Interface Query message is sent as a request, and the interface GUID is specified. If the interface is not supported, the remote side returns a failure message. Otherwise, it returns a new interface ID, which is used in the headers of message BA and message BB packets to identify this new interface.Interface Release XE "Interface Release"After a particular interface is no longer needed, an Interface Release message is sent. From this point forward, the interface ID being released is invalid and cannot participate in any packet exchanges until it is acquired using another Interface Query message, or a packet exchange that contains an interface ID. An Interface Release message cannot be issued until all replies for any outstanding requests on that interface have been satisfied. An Interface Release message can only be issued from the side that received the interface ID in a reply to an Interface Query request message.Printer Ticket Interface XE "Printer Ticket interface:overview"The Printer Ticket Interface is a set of messages used to negotiate print tickets between the client and the server. The protocol does not marshal or by any means examine the contents of the print ticket. It provides a transport for the server to use to query the print ticket from the printer driver on the client. This interface is used to implement a virtual printer driver on the server. For example, whenever the system queries this virtual driver for a print ticket, the driver uses the Printer Ticket Interface to query the printer driver on the client for the actual ticket.Printer Ticket Interface Initialization Messages XE "Initialization messages:Printer Ticket interface" XE "Printer Ticket interface:initialization messages"There are two types of Printer Ticket Interface initialization messages:Bind PrinterGet Supported VersionsThese messages are invoked by the operating system to initialize the printer driver and inspect its version before any other messages in the Printer Ticket Interface.Printer Ticket Interface Capability Negotiation Messages XE "Capability negotiation messages:Printer Ticket interface" XE "Printer Ticket interface:capability negotiation messages"These messages are used to acquire capabilities from the print ticket. The first figure in section 1.3.2.3 shows a sample exchange of the Printer Ticket Interface (the message exchange for this interface is represented by the gray arrows in the diagram).Printer Driver Interface XE "Printer Driver interface:overview"The Printer Driver Interface is supported by a virtual printer driver on the server. It behaves like a proxy between the virtual printer driver and the actual printer driver on the client. The set of messages in this interface is used to initialize, query printer driver capabilities, and display custom printing user interfaces (UIs) to the user. Some of the data sent in these messages is defined by the printer driver and is not validated or changed in any way by the Printer Driver Interface when transferring between client and server.The first two figures show sample exchanges of Printer Driver and Printer Ticket Interface messages.Figure SEQ Figure \* ARABIC 2: Initializing printer sequenceFigure SEQ Figure \* ARABIC 3: Printing a document sequencePrinter Driver Interface Initialization Messages XE "Initialization messages:Printer Driver interface" XE "Printer Driver interface:initialization messages"Printer Driver Interface initialization messages are expected first, before any capability negotiation messages. No other Printer Driver Interface initialization messages are expected after this sequence. The first figure in section 1.3.2.3 shows a typical initialization message exchange sequence.Printer Driver Interface Capability Negotiation Messages XE "Capability negotiation messages:Printer Driver interface" XE "Printer Driver interface:capability negotiation messages"Capability negotiation messages are typically used when printing or displaying printing capabilities.The second figure in section 1.3.2.3 shows a typical message exchange sequence during capability negotiation.User Interface Messages XE "User interface messages:Printer Driver interface" XE "Printer Driver interface:user interface messages"Every printer driver is responsible for displaying two custom user interfaces: one for document properties and one for printer properties. Because a custom UI is difficult to negotiate over a network, the virtual server printer driver exposes its own custom UI by delegating these requests to the client printer driver. The client printer driver contains the actual implementation of these interfaces. The following two figures show a typical packet exchange for displaying UI. In the first figure, the UI is opened and closed by the user on the client machine. In the second figure, the UI is displayed on the client but then canceled by the server. This sequence is typical in situations that cause the UI to disappear, such as the locking of the user's desktop.Figure SEQ Figure \* ARABIC 4: Open and close document properties UIFigure SEQ Figure \* ARABIC 5: Open and cancel document properties UIRelationship to Other Protocols XE "Relationship to other protocols" XE "Relationship to other protocols"The Remote Desktop Protocol: XPS Print Virtual Channel Extension is embedded in dynamic virtual channel transport, as specified in [MS-RDPEDYC] section 1.3.3.1. This protocol extension works in conjunction with the Remote Desktop Protocol: Print Virtual Channel Extension (as specified in [MS-RDPEPC]), which creates printer queues for redirected printers (described in sections 3.2.5.1.1 and 3.3.5.1.1), and also carries the printer output from print jobs initiated by the server applications. The Remote Desktop Protocol: XPS Print Virtual Channel Extension helps redirect user interface elements and allows users to set printing properties for the printer queues that have been already created by the Remote Desktop Protocol: Print Virtual Channel Extension. This protocol is activated if the printer queue supports XPS Mode as described in section 3.1.1.2 of [MS-RDPEPC]. This protocol will be active only for that printer queue.If the protocol [MS-RDPERP] is present and active, this protocol uses it to maintain a WindowHandle as described in the Abstract Data Model (section 3.1.1) of this document.The following diagram illustrates dependencies between the various protocols mentioned here.Figure SEQ Figure \* ARABIC 6: Relationships among protocolsPrerequisites/Preconditions XE "Prerequisites" XE "Preconditions" XE "Preconditions" XE "Prerequisites"The Remote Desktop Protocol: XPS Print Virtual Channel Extension, as specified in [MS-RDPEXPS] operates only after the dynamic virtual channel transport is fully established. If the dynamic virtual channel transport is terminated, no other communication over this protocol extension occurs.This protocol is message-based and assumes preservation of the packet as a whole and does not allow for fragmentation. Packet reassembly is based on the information provided by the underlying dynamic virtual channel transport. This document assumes packet chunks have already been reassembled based on that information.Applicability Statement XE "Applicability" XE "Applicability"The Remote Desktop Protocol: XPS Print Virtual Channel Extension is designed to be run within the context of an RDP virtual channel established between a client and a server (see section 2.1, Transport). This protocol extension is applicable when applications running on the terminal server need to redirect print jobs to a printer physically located on a client machine.Versioning and Capability Negotiation XE "Versioning" XE "Capability negotiation" XE "Capability negotiation" XE "Versioning"Versioning is supported through the use of interface manipulation messages, as specified in section 1.3.2.1.Vendor-Extensible Fields XE "Vendor-extensible fields" XE "Fields - vendor-extensible" XE "Fields - vendor-extensible" XE "Vendor-extensible fields"The Remote Desktop Protocol: XPS Print Virtual Channel Extension uses HRESULTs as specified in [MS-ERREF] section 2.1. Vendors are free to choose their own values, as long as the C bit (0x20000000) is set, indicating that it is a customer code.This protocol also uses Win32 error codes. These values are taken from the Windows error number space as specified in [MS-ERREF] section 2.2. Vendors SHOULD reuse those values with their indicated meanings. Choosing any other value runs the risk of a collision in the future.Vendors MAY define their own interfaces and use them through the interface manipulation mechanism, as specified in section 1.3.2.1.Standards Assignments XE "Standards assignments" XE "Standards assignments"None.MessagesTransport XE "Messages:transport" XE "Transport" XE "Transport - message" XE "Messages:transport"The Remote Desktop Protocol: XPS Print Virtual Channel Extension is designed to operate over dynamic virtual channels, as specified in [MS-RDPEDYC] section 1.3.3.1, using the names TSVCTKT (used to transport Printer Ticket Interface messages) and XPSRD (used to transport Printer Driver Interface messages). If [MS-RDPEDYC] supports version 2 as it is described in section 1.7, then both channels (TSVCTKT and XPSRD) are created with a priority class of 0; otherwise, the channels have no priority assigned to them.Message Syntax XE "Syntax - message" XE "Messages:syntax"The following sections specify Remote Desktop Protocol: XPS Print Virtual Channel Extension message syntax.Shared Message Header (SHARED_MSG_HEADER) XE "Messages:Shared Message Header (SHARED_MSG_HEADER)" XE "Shared Message Header (SHARED_MSG_HEADER) message" XE "SHARED_MSG_HEADER packet"Every Remote Desktop Protocol: XPS Print Virtual Channel Extension packet contains a common header.01234567891012345678920123456789301InterfaceIdMessageIdFunctionId (optional)MessagePayload (variable)...InterfaceId (4 bytes): A 32-bit unsigned integer that represents the common identifier for the interface. The default value is 0x00000000, and if the message uses this default interface ID, it is interpreted as the main interface for which this channel has been instantiated. All other values MUST be retrieved either from an Interface Query message response (QI_RSP) or from responses that contain interface IDs. For example, in section 2.2.4.3.1.1 the Callback parameter describes an interface, and it represents an ID suitable for use as an interface ID in another set of request/reply sequences.This ID is valid until an IFACE_RELEASE message is sent/received with that ID. After an IFACE_RELEASE message, this ID is considered invalid. A packet with an invalid InterfaceId causes channel termination from the packet parser on the receiving end.MessageId (4 bytes): A 32-bit unsigned integer that represents a unique ID for the request and response pair. Requests and responses are matched, in part, based on this ID.FunctionId (4 bytes): A 32-bit unsigned integer. This field MUST be present only in request packets. Its value is either used in interface manipulation messages or defined for a specific interface. The following values are categorized by the interface for which they are mon IDs for all interfaces are as follows.ValueMeaningRIMCALL_RELEASE0x00000001Release the given interface IDRIMCALL_QUERYINTERFACE0x00000002Query for a new interfacePrinter Ticket FunctionIds are as follows.ValueMeaningGET_SUPPORTED_VERSIONS_REQ0x00000100Server Get Supported Versions requestBIND_PRINTER_REQ0x00000101Server Bind Printer requestQUERY_DEV_NS_REQ0x00000102Server Query Device Namespace requestPRINT_TKT_TO_DEVMODE_REQ0x00000103Server Print Ticket to Devmode requestDEVMODE_TO_PRINT_TKT_REQ0x00000104Server Devmode to Print Ticket requestPRINT_CAPS_REQ0x00000105Server Print Caps requestPRINT_CAPS_FROM_PRINT_TKT_REQ0x00000106 Server Print Caps From Print Ticket requestVALIDATE_PRINT_TKT_REQ0x00000107Server Validate Print Ticket requestPrinter Driver FunctionIds are as follows.ValueMeaningINIT_PRINTER_REQ0x00000100Server Initialize Printer requestGET_ALL_DEV_CAPS_REQ 0x00000101 Server Get All Dev Caps requestCONVERT_DEVMODE_REQ 0x00000102Server Convert Devmode requestGET_DEVICE_CAP_REQ 0x00000104 Server Get Device Capability requestDOC_PROPERTIES_REQ 0x00000105Server Document Properties requestASYNC_PRINTER_PROPS_REQ 0x00000107Server Async Printer Properties requestCANCEL_ASYNC_PRINTER_PROPS_REQ 0x0000010A Server Cancel Async Printer Properties requestASYNC_DOC_PROPS_REQ 0x00000106Server Async Document Properties requestCANCEL_ASYNC_DOC_PROPS_REQ 0x00000109Server Cancel Async Document Properties requestMOVE_DOC_PROPERTIES_REQ 0x0000010BServer Move Document Properties Window requestMXDC_GETPDEV_ADJUSTMENT_REQ 0x0000010C Server Get Device Adjustments requestPrinter Properties Callback FunctionIds are as follows.ValueMeaningPRINTER_PROPS_CALLBACK_REQ0x00000100Client Printer Properties Callback requestDocument Properties Callback FunctionIds are as follows.ValueMeaningDOC_PROPS_CALLBACK_REQ0x00000100Client Document Properties Callback requestMessagePayload (variable): An array of unsigned 8-bit integers. The remainder of the message is interpreted based on the interface for which the packet is sent. This field is optional based on the packet length.Interface Manipulation XE "Messages:interface manipulation" XE "Interface manipulation:messages"Interface Query XE "Interface Query" XE "Messages:interface manipulation" XE "Interface manipulation:messages"The Interface Query message is used to query for new interface versions based on a GUID, as defined in [MS-DTYP] section 2.3.4.Query Interface Request (QI_REQ) XE "QI_REQ packet"The QI_REQ request message is sent from either the client side or the server side, and is used to request a new interface ID.01234567891012345678920123456789301Header (variable)...NewInterfaceGUID (16 bytes)......Header (variable): The common message header (as specified in section 2.2.1). The FunctionId field in the common header MUST be set to RIMCALL_QUERYINTERFACE (0x00000002). NewInterfaceGUID (16 bytes): A 16-byte GUID that identifies the new interface.Query Interface Response (QI_RSP) XE "QI_RSP packet"The QI_RSP message is a response to the QI_REQ request message. 01234567891012345678920123456789301Header (variable)...NewInterfaceId (optional)Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this common message header MUST contain the same values as the InterfaceId and MessageId fields from the corresponding QI_REQ request message.NewInterfaceId (4 bytes): A 32-bit unsigned integer representing a new interface ID. This ID is valid until an IFACE_RELEASE message is sent as a response from the receiving side. If NewInterfaceId is omitted from the response, it MUST be assumed that the requested interface is not supported by the remote side.Interface Release (IFACE_RELEASE) XE "IFACE_RELEASE packet"Terminates the lifetime of the interface. This message is one-way only.01234567891012345678920123456789301Header (variable)...Header (variable): The common message header (as specified in section 2.2.1). The FunctionId field MUST be set to RIMCALL_RELEASE (0x00000001). The MessageId field MAY be ignored because this message does not require a reply. The InterfaceId field MUST be set to the InterfaceId of the interface that is being terminated. This message contains no payload.Printer Ticket Interface XE "Messages:Printer Ticket Interface" XE "Printer Ticket Interface message" XE "Messages:Printer Ticket interface" XE "Printer Ticket interface:messages"The Printer Ticket Interface is identified by the default interface ID 0x00000000. The default interface does not require Query Interface Request (QI_REQ) or Query Interface Response (QI_RSP) messages to initialize the interface. All requests flow from server to client and all responses flow from client to server.Certain fields in this interface are payload between the client printer driver and the printing subsystem. The content and meaning of these fields depends on internal structures for these two systems and is not interpreted in any way by this protocol. Special consideration has to be taken regarding the implementation on both sides when they are based on different operating systems. The implementation has to translate these operating system-specific differences between the client printer driver and the printing subsystem.Initialization Messages XE "Printer Ticket interface:initialization messages" XE "Initialization messages:Printer Ticket interface"Server Get Supported Versions Request (GET_SUPPORTED_VERSIONS_REQ) XE "GET_SUPPORTED_VERSIONS_REQ packet"This request retrieves an array of integers from the printer driver. The content of this array is not interpreted by this protocol and is passed only as payload.01234567891012345678920123456789301Header (variable)...ClientPrinterIdHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to GET_SUPPORTED_VERSIONS_REQ (0x00000100).ClientPrinterId (4 bytes): A 32-bit unsigned integer. This ID is exchanged by the Remote Desktop Protocol: File System Virtual Channel Extension, as specified in [MS-RDPEFS]. The ClientPrinterId value MUST be the same as the DeviceId field in the DEVICE_ANNOUNCE header (as specified in [MS-RDPEFS] section 2.2.1.3) that is embedded in the DeviceList field of the DR_CORE_DEVICELIST_ANNOUNCE_REQ packet (as specified in [MS-RDPEFS] section 2.2.2.9).Client Get Supported Versions Response (GET_SUPPORTED_VERSIONS_RSP) XE "GET_SUPPORTED_VERSIONS_RSP packet"GET_SUPPORTED_VERSIONS_RSP is a reply message to GET_SUPPORTED_VERSIONS_REQ and flows from client to server.01234567891012345678920123456789301Header (variable)...NumVersionsVersions (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding GET_SUPPORTED_VERSIONS_REQ request message.NumVersions (4 bytes): A 32-bit unsigned integer. This value contains the number of 4-byte elements in the Versions field.Versions (variable): An array of 32-bit unsigned integers. The total number of bytes is NumVersions * 4. The content of this array is generated by the client printer driver and is passed as payload by this protocol.Result (4 bytes): An HRESULT that describes the result of the call.Server Bind Printer Request (BIND_PRINTER_REQ) XE "BIND_PRINTER_REQ packet"When a redirected server printer is initialized by the server-side operating system, it calls into the server printer driver to establish the printer driver context. This message redirects such a call to the client side.01234567891012345678920123456789301Header (variable)...ClientPrinterIdVersionHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to BIND_PRINTER_REQ (0x00000101).ClientPrinterId (4 bytes): A 32-bit unsigned integer. This ID is exchanged by the Remote Desktop Protocol: File System Virtual Channel Extension, as specified in [MS-RDPEFS]. The ClientPrinterId value MUST be the same as the DeviceId field in the DEVICE_ANNOUNCE header (as specified in [MS-RDPEFS] section 2.2.1.3) that is embedded in the DeviceList field of the DR_CORE_DEVICELIST_ANNOUNCE_REQ packet (as specified in [MS-RDPEFS] section 2.2.2.9). This value uniquely identifies a printer on the client side.Version (4 bytes): A 32-bit unsigned integer. This field is passed by the printing subsystem as a payload and is not interpreted by this protocol in any way.Client Bind Printer Response (BIND_PRINTER_RSP) XE "BIND_PRINTER_RSP packet"A reply to a BIND_PRINTER_REQ (Server Bind Printer Request) message, flowing from client to server.01234567891012345678920123456789301Header (variable)...OptionsDevModeFlagsNumNamespacesNamespaces (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding BIND_PRINTER_REQ request message.Options (4 bytes): A 32-bit unsigned integer. Returned by the client printer driver. The content is treated as payload in this protocol.DevModeFlags (4 bytes): A 32-bit unsigned integer. Returned by the client printer driver. The content is treated as payload in this protocol.NumNamespaces (4 bytes): A 32-bit unsigned integer. The number of Namespace strings in the Namespaces field. Namespaces (variable): An array of multiple zero-terminated Unicode (1) 16-bit strings. The number is specified in the NumNamespaces field. Returned by the client printer driver. The content is treated as payload in this protocol.Result (4 bytes): An HRESULT that describes the result of the call. This SHOULD match the HRESULT returned by the client-side driver.Capability Negotiation Messages XE "Printer Ticket interface:capability negotiation messages" XE "Capability negotiation messages:Printer Ticket interface"Server Query Device Namespace Request (QUERY_DEV_NS_REQ) XE "QUERY_DEV_NS_REQ packet"The QUERY_DEV_NS_REQ request message is a server request for a default namespace from the printer driver on the client.01234567891012345678920123456789301Header (variable)...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to QUERY_DEV_NS_REQ (0x00000102). This message contains no additional payload.Client Query Device Namespace Response (QUERY_DEV_NS_RSP) XE "QUERY_DEV_NS_RSP packet"The QUERY_DEV_NS_RSP message returns the default namespace requested in the QUERY_DEV_NS_REQ request message.01234567891012345678920123456789301Header (variable)...is_null_flagDefaultNamespace (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding QUERY_DEV_NS_REQ request message.is_null_flag (1 byte): An 8-bit unsigned integer. This value determines whether the following optional DefaultNamespace field is present. It MUST be one of the following values.ValueMeaning0x00DefaultNamespace field is present.0x01DefaultNamespace field is not present.DefaultNamespace (variable): A null-terminated Unicode (1) 16-bit string that contains the default namespace returned by the client printer driver. The content is treated as payload in this protocol.Result (4 bytes): An HRESULT that describes the result of the call.Server Print Ticket to Devmode Request (PRINT_TKT_TO_DEVMODE_REQ) XE "PRINT_TKT_TO_DEVMODE_REQ packet"A PRINT_TKT_TO_DEVMODE_REQ request, flowing from the server to the client, is a request to convert an XML-based print ticket to a DEVMODE binary large object (BLOB).01234567891012345678920123456789301Header (variable)...PrintTicket (variable)...cbDevmodeInpDevmodeIn (variable)...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to PRINT_TKT_TO_DEVMODE_REQ (0x00000103).PrintTicket (variable): A print ticket in XML_DOCUMENT format to be converted into a DEVMODE BLOB. The content is treated as payload in this protocol.cbDevmodeIn (4 bytes): A 32-bit unsigned integer. This value MUST be the number of bytes in the pDevmodeIn byte array field.pDevmodeIn (variable): A DEVMODE structure sent as an array of bytes. The content is generated by the printing subsystem and is treated as payload in this protocol.Client Print Ticket to Devmode Response (PRINT_TKT_TO_DEVMODE_RSP) XE "PRINT_TKT_TO_DEVMODE_RSP packet"Returns the updated DEVMODE packet in reply to PRINT_TKT_TO_DEVMODE_REQ (Server Print Ticket to Devmode Request) from client to server.01234567891012345678920123456789301Header (variable)...cbDevmodeOutpDevmodeOut (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding PRINT_TKT_TO_DEVMODE_REQ request message.cbDevmodeOut (4 bytes): A 32-bit unsigned integer. This value MUST be the number of bytes in the pDevmodeOut byte array field.pDevmodeOut (variable): This field contains an updated DEVMODE BLOB returned by the client printer driver, sent as an array of bytes. The content is treated as payload in this protocol.Result (4 bytes): An HRESULT that describes the result of the call.Server Devmode to Print Ticket Request (DEVMODE_TO_PRINT_TKT_REQ) XE "DEVMODE_TO_PRINT_TKT_REQ packet"The DEVMODE_TO_PRINT_TKT_REQ server-to-client request is used to convert a DEVMODE BLOB into an XML-based print ticket.01234567891012345678920123456789301Header (variable)...cbDevmodeInpDevmodeIn (variable)...PrintTicket (variable)...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to DEVMODE_TO_PRINT_TKT_REQ (0x00000104).cbDevmodeIn (4 bytes): A 32-bit unsigned integer. This value MUST be the number of bytes in the pDevmodeIn byte array field.pDevmodeIn (variable): A DEVMODE BLOB, represented as an array of bytes. The content is generated by the printing subsystem and is treated as payload in this protocol.PrintTicket (variable): A print ticket in XML_DOCUMENT format, that is updated with information from the pDevmodeIn BLOB. The content is generated by the printing subsystem and is treated as payload in this protocol.Client Devmode to Print Ticket Response (DEVMODE_TO_PRINT_TKT_RSP) XE "DEVMODE_TO_PRINT_TKT_RSP packet"The DEVMODE_TO_PRINT_TKT_RSP response message is a response to the DEVMODE_TO_PRINT_TKT_REQ request message that contains an updated print ticket.01234567891012345678920123456789301Header (variable)...is_null_flagPrintTicket?(variable)...Result...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding DEVMODE_TO_PRINT_TKT_REQ request message.is_null_flag (1 byte): An 8-bit unsigned integer. This value determines whether the following optional PrintTicket field is present. is_null_flag MUST be one of the following values.ValueMeaning0x00PrintTicket field is present.0x01PrintTicket field is not present.PrintTicket (variable): PrintTicket, if present, MUST contain the updated version of the print ticket, in XML_DOCUMENT format, received in the DEVMODE_TO_PRINT_TKT_REQ request message that is returned by the client printer driver. The content is treated as payload in this protocol.Result (4 bytes): An HRESULT that describes the result of the call.Server Print Caps Request (PRINT_CAPS_REQ) XE "PRINT_CAPS_REQ packet"The PRINT_CAPS_REQ request message is used to request client printer capabilities. Each printer exposes certain capabilities such as duplex printing, stapling, or color support. These capabilities are redirected by using this message and the corresponding PRINT_CAPS_RSP response message. The data contained in this message is opaque to the Remote Desktop Protocol: XPS Print Virtual Channel Extension.01234567891012345678920123456789301Header (variable)...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to PRINT_CAPS_REQ (0x00000105). This message contains no payload.Client Print Caps Response (PRINT_CAPS_RSP) XE "PRINT_CAPS_RSP packet"The PRINT_CAPS_RSP response message returns client print capabilities in response to a PRINT_CAPS_REQ message.01234567891012345678920123456789301Header (variable)...is_null_flagCapabilities (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding PRINT_CAPS_REQ request message.is_null_flag (1 byte): An 8-bit unsigned integer. This field determines whether the following optional Capabilities field is present. is_null_flag MUST be one of the following values.ValueMeaning0x00Capabilities field is present.0x01Capabilities field is not present.Capabilities (variable): This field describes the requested printer capabilities in XML_DOCUMENT format returned by the client printer driver. The content is treated as payload in this protocol.Result (4 bytes): An HRESULT that describes the result of the call.Server Print Caps From Print Ticket Request (PRINT_CAPS_FROM_PRINT_TKT_REQ) XE "PRINT_CAPS_FROM_PRINT_TKT_REQ packet"The PRINT_CAPS_FROM_PRINT_TKT_REQ message is a server-to-client request for print capabilities from a given print ticket.01234567891012345678920123456789301Header (variable)...PrintTicket (variable)...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to PRINT_CAPS_FROM_PRINT_TKT_REQ (0x00000106).PrintTicket (variable): A print ticket for which printer capabilities MUST be retrieved, in XML_DOCUMENT format; the printer capabilities are retrieved for the specified print ticket only. The content is generated by the printing subsystem and is treated as payload in this protocol.Client Print Caps From Print Ticket Response (PRINT_CAPS_FROM_PRINT_TKT_RSP) XE "PRINT_CAPS_FROM_PRINT_TKT_RSP packet"A client reply to a PRINT_CAPS_FROM_PRINT_TKT_REQ message sent from the server, containing print capabilities.01234567891012345678920123456789301Header (variable)...is_null_flagCapabilities (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding PRINT_CAPS_FROM_PRINT_TKT_REQ request message.is_null_flag (1 byte): An 8-bit unsigned integer. This field determines whether the following optional Capabilities field is present. is_null_flag MUST be one of the following values.ValueMeaning0x00Capabilities field is present.0x01Capabilities field is not present.Capabilities (variable): The printer capabilities, in XML_DOCUMENT format, returned by the client printer driver. The content is treated as payload in this protocol.Result (4 bytes): An HRESULT that describes the result of the call. Server Validate Print Ticket Request (VALIDATE_PRINT_TKT_REQ) XE "VALIDATE_PRINT_TKT_REQ packet"The VALIDATE_PRINT_TKT_REQ request message is used to validate and update a print ticket.01234567891012345678920123456789301Header (variable)...PrintTicket (variable)...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to VALIDATE_PRINT_TKT_REQ (0x00000107).PrintTicket (variable): The print ticket to validate, in XML_DOCUMENT format. The content is generated by the printing subsystem and is treated as payload in this protocol.Client Validate Print Ticket Response (VALIDATE_PRINT_TKT_RSP) XE "VALIDATE_PRINT_TKT_RSP packet"The VALIDATE_PRINT_TKT_RSP response message is a reply to a VALIDATE_PRINT_TKT_REQ request message and is used to return an updated print ticket.01234567891012345678920123456789301Header (variable)...is_null_flagPrintTicket (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding VALIDATE_PRINT_TKT_REQ request message.is_null_flag (1 byte): An 8-bit unsigned integer. This field determines whether the following optional PrintTicket field is present. is_null_flag MUST be one of the values in the following table.ValueMeaning0x00PrintTicket field is present.0x01PrintTicket field is not present.PrintTicket (variable): The updated print ticket, in XML_DOCUMENT format, to be returned by the client printer driver. The content is treated as payload in this protocol.Result (4 bytes): An HRESULT describing the result of the call.Printer Driver Interface XE "Messages:Printer Driver Interface" XE "Printer Driver Interface message" XE "Messages:Printer Driver interface" XE "Printer Driver interface:messages"The Printer Driver Interface is identified by the default interface ID 0x00000000. The default interface does not require Query Interface Request (QI_REQ) or Query Interface Response (QI_RSP) messages to initialize the interface. The Printer Driver Interface negotiates parameters for rendering a print job on the client. This interface consists of three message types: initialization, capabilities, and user interface. Certain fields in this interface are payload between the client printer driver and the printing subsystem. The content and the meaning of these fields depend on internal structures for these two systems, and are not interpreted in any way by the Printer Driver Interface. Special consideration has to be taken regarding the implementation on both sides when they are based on different operating systems. The implementation has to translate these operating system-specific differences between the client printer driver and the printing subsystem.Initialization Messages XE "Printer Driver interface:initialization messages" XE "Initialization messages:Printer Driver interface"Server Initialize Printer Request (INIT_PRINTER_REQ) XE "INIT_PRINTER_REQ packet"The INIT_PRINTER_REQ message MUST be the first message, sent from the server to the client, in the Printer Driver Interface. This message establishes a link between a particular client-side printer and the dynamic virtual channel connection. After this link is established, any messages coming on the same channel implicitly refer to the same client printer driver. 01234567891012345678920123456789301Header (variable)...ClientPrinterIdHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to INIT_PRINTER_REQ (0x00000100).ClientPrinterId (4 bytes): A 32-bit unsigned integer. This ID is exchanged by the Remote Desktop Protocol: File System Virtual Channel Extension, as specified in [MS-RDPEFS]. The ClientPrinterId value MUST be the same as the DeviceId field in the DEVICE_ANNOUNCE packet (as specified in [MS-RDPEFS] section 2.2.1.3).Client Initialize Printer Response (INIT_PRINTER_RSP) XE "INIT_PRINTER_RSP packet"The INIT_PRINTER_RSP message is a reply to an INIT_PRINTER_REQ (Server Initialize Printer Request).01234567891012345678920123456789301Header (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding INIT_PRINTER_REQ request message. Result (4 bytes): An HRESULT that describes the result of the call.Capability Negotiation Messages XE "Capability negotiation messages:Printer Driver interface" XE "Printer Driver interface:capability negotiation messages"This set of messages is used to negotiate printer and document capabilities. Server Get All Dev Caps Request (GET_ALL_DEV_CAPS_REQ) XE "GET_ALL_DEV_CAPS_REQ packet"The GET_ALL_DEV_CAPS_REQ request is sent from the server to the client to retrieve all printer capabilities from the client.01234567891012345678920123456789301Header (variable)...Header (variable): The common message header (as specified in section 2.2.1). The FunctionId field MUST be set to GET_ALL_DEV_CAPS_REQ (0x00000101). This message contains no payload.Client Get All Dev Caps Response (GET_ALL_DEV_CAPS_RSP) XE "GET_ALL_DEV_CAPS_RSP packet"The GET_ALL_DEV_CAPS_RSP message is a response to the paired GET_ALL_DEV_CAPS_REQ message.01234567891012345678920123456789301Header (variable)...numCapsOutCapArray (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding GET_ALL_DEV_CAPS_REQ request message.numCaps (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of TSDEVICE_CAPABILITIES structures in the OutCapArray field. OutCapArray (variable): An array of TSDEVICE_CAPABILITIES structures, each containing capabilities for a particular device. The content is generated by the client printer driver and is treated as payload in the Printer Driver Interface.Result (4 bytes): An HRESULT that describes the result of the call.Server Convert Devmode Request (CONVERT_DEVMODE_REQ) XE "CONVERT_DEVMODE_REQ packet"When the server operating system installs the virtual printer driver, it calls into it to convert an internal DEVMODE structure into a printer-specific DEVMODE structure. This message redirects this call to be processed by the client-side printer driver. 01234567891012345678920123456789301Header (variable)...fModecbDevmodeInDevmodeIn (variable)...cbDevmodeOutDevmodeOut (variable)...cbProvidedHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to CONVERT_DEVMODE_REQ (0x00000102).fMode (4 bytes): A 32-bit unsigned integer. The content is generated by the printing subsystem and is treated as payload in this protocol.cbDevmodeIn (4 bytes): A 32-bit unsigned integer. The number of bytes in the DevmodeIn field.DevmodeIn (variable): An array of 8-bit unsigned integers. The content is generated by the printing subsystem and is treated as payload in this protocol.cbDevmodeOut (4 bytes): A 32-bit unsigned integer. The number of bytes in the DevmodeOut field.DevmodeOut (variable): An array of 8-bit unsigned integers. The content is generated by the client printer driver and is treated as payload in the Printer Driver Interface.cbProvided (4 bytes): A 32-bit unsigned integer. The maximum number of bytes in the OutputBufferSize field of the CONVERT_DEVMODE_RSP response that corresponds to this request.Client Convert Devmode Response (CONVERT_DEVMODE_RSP) XE "CONVERT_DEVMODE_RSP packet"The CONVERT_DEVMODE_RSP response is a reply to a CONVERT_DEVMODE_REQ request message. The client-side printer driver converts the DEVMODE supplied in the request to the requested format. The resultant DEVMODE BLOB is returned by this message.01234567891012345678920123456789301Header (variable)...cbOutputBufferSizeOutputBuffer (variable)...cbNeededReturnValueErrorCodeResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding CONVERT_DEVMODE_REQ request message.cbOutputBufferSize (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of bytes in the following OutputBuffer field. This value MUST NOT be larger than the value contained in the cbProvided field of the corresponding CONVERT_DEVMODE_REQ request message.OutputBuffer (variable): An array of 8-bit unsigned integers. The content is generated by the client printer driver and is treated as payload in this protocol.cbNeeded (4 bytes): This value MUST be greater than or equal to the value of the cbOutputBufferSize field. If the value of cbOutputBufferSize is less than the value contained in the cbProvided field in the CONVERT_DEVMODE_REQ request, the value of cbNeeded indicates the real size of the requested data.ReturnValue (4 bytes): A 32-bit unsigned integer. This value is used to determine the failure or success of the request. ReturnValue MUST contain one of the following values.ValueMeaningFALSE 0x00000000The request failed. The following ErrorCode field contains a valid WIN32 error code.TRUE 0x00000001The request succeeded. The following ErrorCode field is equal to ERROR_SUCCESS (0x00000000).ErrorCode (4 bytes): A WIN32 error code for the request.Result (4 bytes): An HRESULT that describes the result of the call.Server Get Device Capability Request (GET_DEVICE_CAP_REQ) XE "GET_DEVICE_CAP_REQ packet"This message is sent by the server side to query a particular printer capability from the client-side printer driver. 01234567891012345678920123456789301Header (variable)...cbDevmodeInDevmodeIn (variable)...DeviceCapInputBufferSize...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to GET_DEVICE_CAP_REQ (0x00000104).cbDevmodeIn (4 bytes): A 32-bit unsigned integer. This field MUST contain the size, in bytes, of the following DevmodeIn field.DevmodeIn (variable): An array of 8-bit unsigned integers. The content is generated by the printing subsystem and is treated as payload in the Printer Driver Interface.DeviceCap (2 bytes): A 16-bit unsigned integer. The content is generated by the printing subsystem and is treated as payload in the Printer Driver Interface.InputBufferSize (4 bytes): A 32-bit unsigned integer. MUST contain the maximum size in bytes of the OutputBuffer field in the corresponding GET_DEVICE_CAP_RSP response to this request message.Client Get Device Capability Response (GET_DEVICE_CAP_RSP) XE "GET_DEVICE_CAP_RSP packet"This message is sent in response to the device capability request. The message contains the value for the given device capability obtained from the client-side printer driver.01234567891012345678920123456789301Header (variable)...ReturnValuecbOutputBufferSizeOutputBuffer (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding GET_DEVICE_CAP_REQ request message.ReturnValue (4 bytes): A WIN32 error code for this request.cbOutputBufferSize (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of bytes in the following OutputBuffer field.OutputBuffer (variable): An array of 8-bit unsigned integers. The content is generated by the client printer driver and is treated as payload in the Printer Driver Interface.Result (4 bytes): An HRESULT that describes the result of the call.Server Document Properties Request (DOC_PROPERTIES_REQ) XE "DOC_PROPERTIES_REQ packet"When an application on a server invokes the document properties dialog box on the server side, a call to the printer driver results. A call for this scenario is redirected by this message. 01234567891012345678920123456789301Header (variable)...fModehServerWindow...cbDevmodeInDevmodeIn (variable)...OutputDevModeSizeProvidedHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to DOC_PROPERTIES_REQ (0x00000105).fMode (4 bytes): A 32-bit unsigned integer. This field MUST identify the mode in which the server obtains document properties from the client printer driver; the server retrieves document properties for the specified mode only. The content of this field is generated by the printing subsystem and is treated as a payload in the Printer Driver Interface.hServerWindow (8 bytes): A 64-bit unsigned integer. On the server side, when a call is made to a printer driver to show a document properties user interface (UI), it also specifies a WindowHandle to be used for parenting any UI that is displayed by the printer driver. The WindowHandle is passed in this field.cbDevmodeIn (4 bytes): A 32-bit unsigned integer. The field MUST contain the number of bytes in the DevmodeIn field.DevmodeIn (variable): An array of 8-bit unsigned integers. The content is generated by the printing subsystem and is treated as payload in the Printer Driver Interface.OutputDevModeSizeProvided (4 bytes): A 32-bit unsigned integer. This field MUST contain the maximum number of bytes in the DevmodeOut field of the corresponding DOC_PROPERTIES_RSP response message to this request. Client Document Properties Response (DOC_PROPERTIES_RSP) XE "DOC_PROPERTIES_RSP packet"This message is sent in response to the DOC_PROPERTIES_REQ (Server Document Properties Request). It contains the DEVMODE BLOB that was supplied by the client printer driver. 01234567891012345678920123456789301Header (variable)...ReturnValueErrorCodecbOutDevModeSizeOutDevMode (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding DOC_PROPERTIES_REQ request message.ReturnValue (4 bytes): A 32-bit signed integer. If the fMode field of the DOC_PROPERTIES_REQ message was set to 0, this field MUST use one and only one of the following values.ValueMeaning0x00000000The data that the client printer driver has to return is not greater than the value of the OutputDevModeSizeProvided field of the corresponding DOC_PROPERTIES_REQ request message. In this case, the OutDevMode field contains the aforementioned data, and the cbOutDevModeSize field contains the data size.0x00000001 — 0x7fffffffThe size of the data that the client printer driver has to return in the OutDevMode field if its size is greater than the value of the OutputDevModeSizeProvided field of the corresponding DOC_PROPERTIES_REQ request message. In this case, the OutDevMode field MUST be empty and the cbOutDevModeSize field MUST be zero.0x80000000 — 0xffffffffAny negative value for ReturnValue indicates that the contents of the OutDevMode field cannot be provided because of an error. An error-specific code is provided in the ErrorCode field.If the fMode field of the DOC_PROPERTIES_REQ message was not set to 0, this field MUST use one and only one of the following values.ValueMeaning0x00000000The call was canceled by the user. The content in OutDevMode MUST be ignored. Identical in meaning to values in the range 0x00000002 to 0x7fffffff.0x00000001The call was successful and OutDevMode contains the data as it is returned by the client printer driver.0x00000002 — 0x7fffffffThe call was canceled by the user. The content in OutDevMode MUST be ignored. Identical in meaning to 0x00000000.0x80000000 — 0xffffffffThe contents of the OutDevMode field cannot be provided because of an error.ErrorCode (4 bytes): A WIN32 error code returned from the client printer. If the ReturnValue is not set to 0xffffffff, this value of field MUST be ignored.cbOutDevModeSize (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of bytes in the OutDevMode field.OutDevMode (variable): An array of 8-bit unsigned integers. The content is generated by the client printer driver and is treated as payload in the Printer Driver Interface.Result (4 bytes): An HRESULT that describes the result of the call.Server Get Device Adjustment Request (MXDC_GETPDEV_ADJUSTMENT_REQ) XE "MXDC_GETPDEV_ADJUSTMENT_REQ packet"This server-to-client request is sent to retrieve device adjustment information.01234567891012345678920123456789301Header (variable)...cbDevModeInpDevmodeIn (variable)...cbInBufferpInBuffer (variable)...numInPropspInProps (variable)...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to MXDC_GETPDEV_ADJUSTMENT_REQ (0x0000010C). cbDevModeIn (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of bytes in the pDevmodeIn field.pDevmodeIn (variable): A DEVMODE structure sent as an array of bytes. The content is generated by the printing subsystem and is treated as payload in the Printer Driver Interface.cbInBuffer (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of bytes in the pInBuffer field.pInBuffer (variable): An array of bytes. Opaque payload passed by the Printer Driver Interface from the printing subsystem to the client printer driver. numInProps (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of items in the pInProps field.pInProps (variable): An array of TSPRINTER_PROPERTY elements. The content is generated by the printing subsystem and is treated as payload in the Printer Driver Interface.Client Get Device Adjustment Reply (MXDC_GETPDEV_ADJUSTMENT_RSP) XE "MXDC_GETPDEV_ADJUSTMENT_RSP packet"A reply from client to server to the MXDC_GETPDEV_ADJUSTMENT_REQ (Server Get Device Adjustment Request) message.01234567891012345678920123456789301Header (variable)...numOutPropspOutProps (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding MXDC_GETPDEV_ADJUSTMENT_REQ request message.numOutProps (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of items in the pOutProps field.pOutProps (variable): An array of TSPRINTER_PROPERTY elements. This field is treated as payload in the Printer Driver Interface.Result (4 bytes): An HRESULT that describes the result of the call.User Interface Messages XE "User interface messages:Printer Driver interface" XE "Printer Driver interface:user interface messages"The following messages describe a set of request and reply exchanges that MAY be sent by either a client or a server. The primary purpose of these messages is to display a user interface (UI) on the client side and to provide the ability to cancel the UI from the server. There are two sets of UI messages: printer properties messages and document properties messages. Both sets are similar in functionality but differ in the payload of properties that they establish.Printer Properties UI XE "User interface messages:printer properties" XE "Printer properties UI"Server Async Printer Properties Request (ASYNC_PRINTER_PROPS_REQ) XE "ASYNC_PRINTER_PROPS_REQ packet" XE "User interface messages:printer properties" XE "Printer properties UI"This request is sent from the server to the client, and causes the client to display a printer properties user interface.01234567891012345678920123456789301Header (variable)...FlagshServerWindow...ReservedCallbackHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to ASYNC_PRINTER_PROPS_REQ (0x00000107).Flags (4 bytes): A 32-bit unsigned integer. The value of this field is used to determine the privilege level used to query for printer properties. Flags MUST be one of the following values. ValueMeaningXPSREDIR_PRINTER_PROPERTIES_Flags_WITH_PERMISSION 0x00000000If this value is set, the printer properties are queried with administrative privilege.XPSREDIR_PRINTER_PROPERTIES_Flags_NO_PERMISSION 0x00000001If this value is set, the printer properties are queried with user privilege.hServerWindow (8 bytes): A 64-bit unsigned integer. When an operating system calls into the server virtual printer driver to display the printer properties UI, it also supplies a WindowHandle to use as a parent for the UI displayed. The WindowHandle is passed to the client printer driver in this field.Reserved (4 bytes): A 32-bit unsigned integer. This field MUST be set to 0x00000001.Callback (4 bytes): A 32-bit unsigned integer. This value represents a unique InterfaceId (as described in section 3.1.1) that MUST be used in the InterfaceId field of a PRINTER_PROPS_CALLBACK_REQ request message. Client Async Printer Properties Response (ASYNC_PRINTER_PROPS_RSP) XE "ASYNC_PRINTER_PROPS_RSP packet"The client sends this message in response to the ASYNC_PRINTER_PROPS_REQ (Server Async Printer Properties Request).01234567891012345678920123456789301Header (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding ASYNC_PRINTER_PROPS_REQ request message.Result (4 bytes): An HRESULT that describes the result of the call.Client Printer Properties Callback Request (PRINTER_PROPS_CALLBACK_REQ) XE "PRINTER_PROPS_CALLBACK_REQ packet"A server requests that a printer properties UI be displayed by sending an ASYNC_PRINTER_PROPS_REQ message. The client responds to the message immediately, but the actual client UI is displayed asynchronously. After the UI is dismissed by the user, this message is sent from the client to the server along with the result of the operation.01234567891012345678920123456789301Header (variable)...ReturnValueErrorCodeHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId MUST match the value in the Callback field in the ASYNC_PRINTER_PROPS_REQ request message sent previously. The FunctionId field MUST be set to PRINTER_PROPS_CALLBACK_REQ (0x00000100). ReturnValue (4 bytes): A 32-bit unsigned integer. The return value from the client printer driver at the end of the request.ErrorCode (4 bytes): A WIN32 error code for the call.Server Printer Properties Callback Response (PRINTER_PROPS_CALLBACK_RSP) XE "PRINTER_PROPS_CALLBACK_RSP packet"An acknowledgment of the PRINTER_PROPS_CALLBACK_REQ (Client Printer Properties Callback Request) from server to client.01234567891012345678920123456789301Header (variable)...ReservedHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId MUST match the value previously sent in the Callback field in the ASYNC_PRINTER_PROPS_REQ request message. The InterfaceId and MessageId fields in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding PRINTER_PROPS_CALLBACK_REQ request message. Reserved (4 bytes): A 32-bit unsigned integer. This field MUST be set to 0x00000000.Server Cancel Async Printer Properties Request (CANCEL_ASYNC_PRINTER_PROPS_REQ) XE "CANCEL_ASYNC_PRINTER_PROPS_REQ packet"This request is sent from the server to the client to cancel the display of a printer properties UI. 01234567891012345678920123456789301Header (variable)...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to CANCEL_ASYNC_PRINTER_PROPS_REQ (0x0000010A). This message contains no payload.Client Cancel Async Printer Properties Response (CANCEL_ASYNC_PRINTER_PROPS_RSP) XE "CANCEL_ASYNC_PRINTER_PROPS_RSP packet"A reply to the CANCEL_ASYNC_PRINTER_PROPS_REQ (Server Cancel Async Printer Properties Request) message.01234567891012345678920123456789301Header (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding CANCEL_ASYNC_PRINTER_PROPS_REQ request message. Result (4 bytes): An HRESULT that describes the result of the call.Document Properties UI XE "User interface messages:document properties" XE "Document properties UI"Server Async Document Properties Request (ASYNC_DOC_PROPS_REQ) XE "ASYNC_DOC_PROPS_REQ packet" XE "User interface messages:document properties" XE "Document properties UI"This request is sent from server to client and is used to start the display of a document properties UI on the client.01234567891012345678920123456789301Header (variable)...fModehServerWindow...cbDevmodeInDevmodeIn (variable)...OutputDevModeSizeReservedCallbackHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to ASYNC_DOC_PROPS_REQ (0x00000106).fMode (4 bytes): A 32-bit unsigned integer. The content is generated by the printing subsystem and is treated as payload in the Printer Driver Interface.hServerWindow (8 bytes): A 64-bit unsigned integer. When an operating system calls into a server virtual printer driver to display the document properties UI, it also supplies a WindowHandle to use as a parent for the UI displayed. The WindowHandle is passed to the client printer driver in this field.cbDevmodeIn (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of bytes in the following DevmodeIn field.DevmodeIn (variable): An array of 8-bit unsigned integers. The content is generated by the printing subsystem and is treated as payload in the Printer Driver Interface. OutputDevModeSize (4 bytes): A 32-bit unsigned integer. This field MUST contain the maximum size in bytes of the Devmode field of the DOC_PROPS_CALLBACK_REQ request message.Reserved (4 bytes): A 32-bit unsigned integer. This field MUST be set to 0x00000001. Callback (4 bytes): A 32-bit unsigned integer. This value represents a unique interface ID to be used by a DOC_PROPS_CALLBACK_REQ request message.Client Async Document Properties Response (ASYNC_DOC_PROPS_RSP) XE "ASYNC_DOC_PROPS_RSP packet"This response is an acknowledgment of an ASYNC_DOC_PROPS_REQ (Async Document Properties Request) from client to server.01234567891012345678920123456789301Header (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding ASYNC_DOC_PROPS_REQ request message. Result (4 bytes): An HRESULT that describes the result of the call.Client Document Properties Callback Request (DOC_PROPS_CALLBACK_REQ) XE "DOC_PROPS_CALLBACK_REQ packet"This request is sent from client to server. The server requests the document properties UI be displayed by sending an ASYNC_DOC_PROPS_REQ request message. The client responds to the message immediately, but the actual client UI is displayed asynchronously. After the UI is dismissed by the user, this message is sent from the client to the server along with the result of the operation.01234567891012345678920123456789301Header (variable)...ReturnValueErrorCodecbDevmodeDevmode (variable)...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST match the value sent previously in the Callback field of the ASYNC_DOC_PROPS_REQ request message. The FunctionId field MUST be set to DOC_PROPS_CALLBACK_REQ (0x00000100).ReturnValue (4 bytes): A 32-bit unsigned integer. This value is returned by the client printer driver.ErrorCode (4 bytes): A WIN32 error code for the call.cbDevmode (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of bytes in the Devmode field.Devmode (variable): An array of 8-bit unsigned integers. The content is generated by the client printer driver and is treated as payload in the Printer Driver Interface.Server Document Properties Callback Response (DOC_PROPS_CALLBACK_RSP) XE "DOC_PROPS_CALLBACK_RSP packet"This packet is sent as an acknowledgment of a DOC_PROPS_CALLBACK_REQ (Client Document Properties Callback Request) from the server to the client.01234567891012345678920123456789301Header (variable)...ReservedHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId in this case MUST match the Callback field in ASYNC_DOC_PROPS_REQ. The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding DOC_PROPS_CALLBACK_REQ request message. Reserved (4 bytes): A 32-bit unsigned integer. This field MUST be set to 0x00000000.Server Cancel Async Document Properties Request (CANCEL_ASYNC_DOC_PROPS_REQ) XE "CANCEL_ASYNC_DOC_PROPS_REQ packet"This request is sent from server to client to cancel the display of a document properties UI.01234567891012345678920123456789301Header (variable)...Header (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to CANCEL_ASYNC_DOC_PROPS_REQ (0x00000109). This message contains no payload.Client Cancel Async Document Properties Response (CANCEL_ASYNC_DOC_PROPS_RSP) XE "CANCEL_ASYNC_DOC_PROPS_RSP packet"This packet is sent as a reply to a CANCEL_ASYNC_DOC_PROPS_REQ (Server Cancel Async Document Properties Request) from client to server.01234567891012345678920123456789301Header (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding CANCEL_ASYNC_DOC_PROPS_REQ request message. Result (4 bytes): An HRESULT that describes the result of the call.Server Move Document Properties Window Request (MOVE_DOC_PROPERTIES_REQ) XE "MOVE_DOC_PROPERTIES_REQ packet"This request is sent from server to client to reposition the document properties UI window at a specific location.01234567891012345678920123456789301Header (variable)...xPosyPosHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field MUST be set to 0x00000000. The FunctionId field MUST be set to MOVE_DOC_PROPERTIES_REQ (0x0000010B). xPos (4 bytes): A 32-bit unsigned integer. This field MUST contain the X axis coordinate of the window's target location.yPos (4 bytes): A 32-bit unsigned integer. This field MUST contain the Y axis coordinate of the window's target location.Client Move Document Properties Window Reply (MOVE_DOC_PROPERTIES_RSP) XE "MOVE_DOC_PROPERTIES_RSP packet"This packet is sent as a reply to a MOVE_DOC_PROPERTIES_REQ (Server Move Document Properties Window Request) from the client to the server.01234567891012345678920123456789301Header (variable)...ResultHeader (variable): The common message header (as specified in section 2.2.1). The InterfaceId field and the MessageId field in this message header MUST contain the same values as the InterfaceId and MessageId fields in the corresponding MOVE_DOC_PROPERTIES_REQ request message.Result (4 bytes): An HRESULT that describes the result of the call.XML Document (XML_DOCUMENT) XE "Messages:XML Document (XML_DOCUMENT)" XE "XML Document (XML_DOCUMENT) message" XE "XML_DOCUMENT packet"This sub-packet represents an XML document that is being sent inside another packet (for more information, see [MSFT-XMLPAPER]). The XML document is a single character string. The exact size of the document is specified by the cbXMLSize field; a protocol parser MUST use the value in the cbXMLSize field for the string length and MUST NOT use null-termination of the XMLDocument string to determine the size.01234567891012345678920123456789301cbXMLSizeXMLDocument (variable)...cbXMLSize (4 bytes): A 32-bit unsigned integer. This field MUST contain the number of bytes in the following XMLDocument field.XMLDocument (variable): An array of 8-bit unsigned integers. This field contains the serialized XML document. The contents are treated as opaque by this protocol.Device Capabilities (TSDEVICE_CAPABILITIES) XE "Messages:Device Capabilities (TSDEVICE_CAPABILITIES)" XE "Device Capabilities (TSDEVICE_CAPABILITIES) message" XE "TSDEVICE_CAPABILITIES packet"This structure is embedded inside other packets. It describes the resulting output when certain device capabilities are queried.01234567891012345678920123456789301ReturnValueErrorCodenumBytesData (variable)...numBytes2ReturnValue (4 bytes): A 32-bit unsigned integer. This field MUST contain a return code from the call to the printer driver that queries the device capability. ErrorCode (4 bytes): A WIN32 error code for the call.numBytes (2 bytes): A 16-bit unsigned integer. This field MUST contain the number of bytes in the Data field.Data (variable): An array of 8-bit unsigned integers. This field MUST contain the data returned from the local printer driver call. This data is provided by the printer driver and is not in any way processed or examined by the Remote Desktop Protocol: XPS Print Virtual Channel Extension.numBytes2 (2 bytes): A 16-bit unsigned integer. This field MUST contain the same value as the numBytes field.Printer Property (TSPRINTER_PROPERTY) XE "Messages:Printer Property (TSPRINTER_PROPERTY)" XE "Printer Property (TSPRINTER_PROPERTY) message" XE "TSPRINTER_PROPERTY packet"This structure is embedded inside other packets. It describes the resulting output when certain printer capabilities are queried.01234567891012345678920123456789301PropertyTypecbPropertyNamepPropertyName (variable)...cbPropertyValuepPropertyValue (variable)...PropertyType (4 bytes): A 32-bit integer that MUST have one of the following values that indicate the content of the cbPropertyValue and pPropertyValue fields.ValueMeaning0x00000002pPropertyValue contains a 32-bit integer; cbPropertyValue is equal to 4.0x00000003pPropertyValue contains a 64-bit integer; cbPropertyValue is equal to 8.0x00000004pPropertyValue contains an 8-bit integer; cbPropertyValue is equal to 1.0x0000000ApPropertyValue contains a variable size buffer; the size of the buffer is contained in the cbPropertyValue field.cbPropertyName (4 bytes): The number of bytes in pPropertyName.pPropertyName (variable): An array of Unicode (1) characters identifying the name of the property. This field MUST NOT be null-terminated. The size of the pPropertyName field is specified in bytes by the cbPropertyName field. This field is treated as payload in the Printer Driver Interface.cbPropertyValue (4 bytes): A 32-bit unsigned integer. This field contains the number of bytes in the pPropertyValue field.pPropertyValue (variable): The value of the property. This field is treated as payload in the Remote Desktop Protocol: XPS Print Virtual Channel Extension, as specified in [MS-RDPEXPS].Protocol DetailsCommon DetailsAbstract Data Model XE "MessageId" XE "InterfaceId" XE "ClientPrinterId" XE "FunctionId" XE "Data model - abstract:server" XE "Abstract data model:server" XE "Server:abstract data model" XE "Data model - abstract:client" XE "Abstract data model:client" XE "Client:abstract data model"This section describes a conceptual model of possible data organization that an implementation maintains to participate in this protocol. The described organization is provided to facilitate the explanation of how the protocol behaves. This document does not mandate that implementations adhere to this model as long as their external behavior is consistent with that described in this document.ClientPrinterId: For each client printer driver that is to be redirected, the client generates a unique printer ID. The client sends this ID to the server in the DeviceId field of the Device Announce packet, as specified in [MS-RDPEFS]. The server maintains a list of redirected printer IDs. It uses these IDs to refer to the client-side printer. In the context of this document, ClientPrinterId is the same as the DeviceId specified in [MS-RDPEFS] (section 3.1.1); this means direct mapping of the two IDs, with an expectation that the DeviceId is valid within the lifetime of the channel for this protocol. Before the client recycles the DeviceId, it has to deactivate the protocol channel for the corresponding printer. This will avoid any collisions with recycled IDs.InterfaceId: An InterfaceId is a unique ID that identifies groups of messages. The FunctionId in the SHARED_MSG_HEADER request has meaning only in the context of a given InterfaceId. This means that the FunctionIds used in packets with different InterfaceIds are not guaranteed to have the same meaning. The default InterfaceId is 0x00000000. The group of messages identified by this ID is explicitly known on both sides, until an Interface Release message is sent. After an Interface Release message has been sent, that ID MAY be reused for another interface. New InterfaceIds MAY be retrieved in the following two ways:As a reply to an Interface Query request.As a field in a request or reply packet.In either case, the ID is valid until a release request is issued or the channel is closed.MessageId: A MessageId identifies request-reply pairs. This ID MUST be unique within the same InterfaceId. This means that if two request messages have different InterfaceIds but identical MessageIds, they MUST be interpreted as two different requests. A MessageId MAY be reused after the reply message with that ID is received.FunctionId: The FunctionId identifies the type of request being made. It has meaning only within the context of the InterfaceId. It MUST be present only in request type messages. There MUST NOT be duplicate FunctionIds within the same interface.WindowHandle: This 64-bit ID has meaning only when the [MS-RDPERP] protocol is active; otherwise, the value MUST be ignored. The lower 32 bits of this ID are equal to the WindowId field in the New or Existing Window message as described in [MS-RDPERP] section 2.2.1.3.1.2.1. The client maintains the window handle until Delete Window order is received ([MS-RDPERP] section 2.2.1.3.1.2.4). The high 32 bits are always ignored. Timers XE "Timers:server" XE "Server:timers" XE "Timers:client" XE "Client:timers"A timer is started for every request. The timer expires in 60 seconds. If by that time the reply does not arrive, the client or server fails the request with the error STATUS_TRANSACTION_TIMED_OUT and disconnects the virtual channel over which the request was issued. HYPERLINK \l "Appendix_A_1" \o "Product behavior note 1" \h <1>Initialization XE "Initialization:server" XE "Server:initialization" XE "Initialization:client" XE "Client:initialization"None.Higher-Layer Triggered Events XE "Triggered events - higher-layer:server" XE "Higher-layer triggered events:server" XE "Server:higher-layer triggered events" XE "Triggered events - higher-layer:client" XE "Higher-layer triggered events:client" XE "Client:higher-layer triggered events"No higher-layer triggered events are used.Processing Events and Sequencing Rules XE "Sequencing rules:server" XE "Message processing:server" XE "Server:sequencing rules" XE "Server:message processing" XE "Sequencing rules:client" XE "Message processing:client" XE "Client:sequencing rules" XE "Client:message processing"Processing a Shared Message Header XE "Shared message header"When processing the SHARED_MSG_HEADER, the following rules apply to both the client and server side:An InterfaceId MUST be considered valid if the following conditions are true:The InterfaceId has been issued through an Interface Query message or some other packet that contains the InterfaceId, or it is the default value 0x00000000.The InterfaceId has not been released through an Interface Release message.If the InterfaceId or MessageId fields are invalid, the packet MUST be treated as invalid and the connection SHOULD HYPERLINK \l "Appendix_A_2" \o "Product behavior note 2" \h <2> be dropped immediately. A MessageId MUST be considered invalid if: It is in a reply type packet, and its value does not match any MessageId from a previously issued request.The reply has been sent twice for the same request.If the FunctionId field is invalid, the packet MUST be treated as if a newer version of the protocol is sending the packet. In response, the receiver MUST return a failure packet containing only the InterfaceId and MessageId fields. The InterfaceId and MessageId values MUST match the request values. MessagePayload MUST be of zero length. A message with this footprint indicates to the receiver that the request is not supported by the current protocol implementation.An invalid FunctionId is a value that is either not in the list of Common IDs (section 2.2.1) or not listed as a valid value for the particular InterfaceId. For example, if a message has an InterfaceId for the Print Ticket Interface (section 2.2.3.1), then the valid values for FunctionId are the Common IDs and those listed under the Print Ticket Interface description.If there is an error in parsing the payload data of a request or a response packet, the payload MUST be treated as invalid data and the connection MUST be dropped immediately. Interface Manipulation XE "Server:interface manipulation" XE "Interface manipulation:server" XE "Client:interface manipulation" XE "Interface manipulation:client"Interface Query Message XE "Interface Query"This message is not implemented by this protocol. See sections 3.1.5.2.1.1 and 3.1.5.2.1.2 for details.Sending an Interface Query MessageThe server MUST NOT send a QI_REQ request message. Receiving an Interface Query MessageThe Interface Query request message is symmetrical. It MAY originate from the client or from the server side for any valid InterfaceId. Processing MUST be handled on any side of the connection. The receiver SHOULD return the failure version of the QI_RSP message. This is a QI_RSP message omitting the optional NewInterfaceId field. This version of the message MUST be interpreted by the originating side as if the requested interface is not supported. This message MUST be processed as described in 3.2.5.1.1.1.Interface Release Message XE "Interface Release"Sending an Interface Release Message XE "Interface Release"When a client or a server no longer needs to make function calls on a given interface and all requests have received their corresponding replies, either entity MAY send an Interface Release message to the other side, freeing the interface ID for reuse.Receiving an Interface Release MessageUpon receipt of an Interface Release message, the InterfaceId contained in the packet MUST be disabled. Any other packets that contain the released InterfaceId SHOULD be treated as failure cases and SHOULD result in termination of the connection. After being released, interface IDs MAY be reused by other calls that pass interface IDs. This message is one-way only and does not require sending a reply. Releasing an interface MUST NOT generate an error code.Timer Events XE "Timer events:server" XE "Server:timer events" XE "Timer events:client" XE "Client:timer events"None.Other Local Events XE "Local events:server" XE "Server:local events" XE "Local events:client" XE "Client:local events"None.Client DetailsAbstract Data Model XE "Client:abstract data model" XE "Abstract data model:client" XE "Data model - abstract:client" XE "Data model - abstract:client" XE "Abstract data model:client" XE "Client:abstract data model"The abstract data model is as specified in section 3.1.1.Timers XE "Client:timers" XE "Timers:client" XE "Timers:client" XE "Client:timers"None.Initialization XE "Client:initialization" XE "Initialization:client" XE "Initialization:client" XE "Client:initialization"Initialization is as specified in section 3.1.3.Higher-Layer Triggered Events XE "Client:higher-layer triggered events" XE "Higher-layer triggered events:client" XE "Triggered events - higher-layer:client" XE "Triggered events - higher-layer:client" XE "Higher-layer triggered events:client" XE "Client:higher-layer triggered events"None.Processing Events and Sequencing Rules XE "Sequencing rules:client" XE "Message processing:client" XE "Client:sequencing rules" XE "Client:message processing"Interface Manipulation XE "Client:interface manipulation" XE "Interface manipulation:client"Interface Query Message XE "Interface Query"Processing a Query Interface RequestIf such a request is received, the reply SHOULD be a failure message, as specified in section 3.2.5.1.1.2. Sending a Query Interface ResponseThis response is sent when a Query Interface Request is received. If received, the response message SHOULD be a failure message. A failure message is a SHARED_MSG_HEADER with no FunctionId or payload. The InterfaceId and MessageId fields MUST match those of the request.Printer Ticket Interface XE "Client:Printer Ticket interface" XE "Printer Ticket interface:client"The Printer Ticket Interface is instantiated by the server side in response to the instantiation of the virtual printer driver. This protocol in essence bridges the support for print tickets from the client printer driver to the virtual printer driver that is installed on the server.Initialization Messages XE "Printer Ticket interface:initialization messages" XE "Initialization messages:Printer Ticket interface"Processing a Get Supported Versions Request XE "GET_SUPPORTED_VERSIONS_REQ"The client MUST retrieve the ClientPrinterId field upon receipt of the GET_SUPPORTED_VERSIONS_REQ message. The client MUST find the appropriate printer driver name by matching the ClientPrinterId to the DeviceId field in the Remote Desktop Protocol: File System Virtual Channel Extension which is described in [MS-RDPEFS] section 2.2.1.3. The client MUST retrieve the Version field data from the client printer driver. Sending a Get Supported Versions Response XE "GET_SUPPORTED_VERSIONS_RSP"The client MUST retrieve the number of versions supported and MUST populate the NumVersions field of the GET_SUPPORTED_VERSIONS_RSP message with that value. The Versions field MUST contain an array of versions supported by the driver. The return result from the driver call MUST be sent in the Result field of the response.Processing a Bind Printer Request XE "BIND_PRINTER_REQ"The client MUST retrieve the ClientPrinterId field from the BIND_PRINTER_REQ message, and find an appropriate printer driver name. It then associates the current dynamic channel connection with that printer. Thus, subsequent calls on the channel implicitly refer to the same printer. The Version field MUST be retrieved and passed to the printer driver.Sending a Bind Printer Response XE "BIND_PRINTER_RSP"The client MUST retrieve from the client printer driver the following fields: Options, DevModeFlags, and Namespaces. It MUST populate the fields of the BIND_PRINTER_RSP message with this information. These fields are opaque to the protocol and are meaningful only for the printer drivers. The return result of the call MUST be sent in the Result field of the response.Capability Negotiation Messages XE "Printer Ticket interface:capability negotiation messages" XE "Capability negotiation messages:Printer Ticket interface"Processing a Query Device Namespace Request XE "QUERY_DEV_NS_REQ"Upon receipt of the QUERY_DEV_NS_REQ message, the client MUST request that the client printer driver retrieve all parameters for the response. Sending a Query Device Namespace Response XE "QUERY_DEV_NS_RSP"The client responds with the QUERY_DEV_NS_RSP reply message after retrieving the DefaultNamespace from the printer driver. If the driver returns NULL for default namespace, the is_null_flag field MUST be set to TRUE (0x01) and the DefaultNamespace field MUST be omitted. Otherwise, the is_null_flag field MUST be set to FALSE (0x00) and the DefaultNamespace field MUST contain the string returned by the driver. The DefaultNamespace value has meaning only within the printer driver context and is not interpreted by the Printer Ticket Interface. The return result of the call MUST be sent in the Result field of the response.Processing a Print Ticket to Devmode Request XE "PRINT_TKT_TO_DEVMODE_REQ"Upon receipt of the PRINT_TKT_TO_DEVMODE_REQ request, the client MUST forward the data from PrintTicket and pDevmodeIn to the client printer driver.Sending a Print Ticket to Devmode Response XE "PRINT_TKT_TO_DEVMODE_RSP"The printer driver fills out the data for the pDevmodeOut field, which MUST be packaged in the PRINT_TKT_TO_DEVMODE_RSP response message. The return result of the call MUST be sent in the Result field of this response.Processing a Devmode to Print Ticket Request XE "DEVMODE_TO_PRINT_TKT_REQ"Upon receipt of the DEVMODE_TO_PRINT_TKT_REQ request, the client MUST pass the contents of the PrintTicket field and the pDevmodeIn field as input when calling the client printer driver. Sending a Devmode to Print Ticket Response XE "PrintTicket"The printer driver supplies the content of the PrintTicket field. If the field is NULL, the is_null_flag field MUST be set to TRUE (0x01). Otherwise, the flag is set to FALSE (0x00) and the PrintTicket field contains the driver output. The return result MUST be sent in the Result field of the response.Processing a Print Caps Request XE "PrintTicket"The client MUST retrieve capability data from the client printer driver, without specifying a print ticket.Sending a Print Caps Response XE "PrintTicket"The printer driver responds with data for the Capabilities field. If the field is NULL, the is_null_flag MUST be set to TRUE (0x01) and the Capabilities field MUST be omitted. Otherwise, the is_null_flag MUST be set to FALSE (0x00) and the Capabilities field MUST contain the driver-supplied data. The return result MUST be sent in the Result field of the response.Processing a Print Caps From Print Ticket Request XE "PRINT_CAPS_FROM_PRINT_TKT_REQ"The rules for processing the PRINT_CAPS_FROM_PRINT_TKT_REQ request message MUST be the same as specified in section 3.2.5.2.2.7 with the following exception: the PrintTicket field MUST be supplied to the driver.Sending a Print Caps From Print Ticket Response XE "PRINT_CAPS_FROM_PRINT_TKT_RSP"The rules for sending the PRINT_CAPS_FROM_PRINT_TKT_RSP response message MUST be the same as specified in section 3.2.5.2.2.8.Processing a Validate Print Ticket Request XE "VALIDATE_PRINT_TKT_REQ"The client MUST extract the contents of the PrintTicket field in the VALIDATE_PRINT_TKT_REQ message and MUST pass the contents to the printer driver for processing. Sending a Validate Print Ticket Response XE "VALIDATE_PRINT_TKT_RSP"The driver updates the PrintTicket from the request, which MUST be transmitted in the PrintTicket field of the VALIDATE_PRINT_TKT_RSP response message. If the updated ticket value is NULL, the is_null_flag field MUST be set to TRUE (0x01) and the PrintTicket field MUST be empty. The return result MUST be sent in the Result field of the response.Printer Driver Interface XE "Client:Printer Driver interface" XE "Printer Driver interface:client"The Printer Driver Interface is responsible for implementing a virtual printer driver on the server side that requests information from the original driver on the client side. These protocol messages MAY be grouped into three categories: initialization, capability negotiation, and user interface (UI) messages. The initialization messages SHOULD always be sent first in the protocol sequence. The capability and UI messages MAY be sent at any time.Initialization Messages XE "Printer Driver interface:initialization messages" XE "Initialization messages:Printer Driver interface"The client SHOULD receive the following initialization messages before any other requests. If the client receives capability negotiation or UI request messages before initialization messages, the requests MUST be ignored and the dynamic channel MUST be closed. Processing an Initialize Printer Request XE "INIT_PRINTER_REQ"When the client receives the INIT_PRINTER_REQ request message, the client initializes the interface by opening the client printer driver identified by the ClientPrinterId field.Sending an Initialize Printer Response XE "INIT_PRINTER_RSP"The INIT_PRINTER_RSP response MUST be sent by the client after the client completes interface initialization. The Result field MUST contain an HRESULT code that identifies the success or failure of the initialization.Capability Negotiation Messages XE "Capability Negotiation messages:Printer Driver interface" XE "Printer Driver interface:Capability Negotiation messages"Processing a Get All Dev Caps Request XE "GET_ALL_DEV_CAPS_REQ"Upon receipt of the GET_ALL_DEV_CAPS_REQ request, the client MUST begin collecting the printer-specific capabilities from the client printer driver.Sending a Get All Dev Caps Response XE "GET_ALL_DEV_CAPS_RSP"The GET_ALL_DEV_CAPS_RSP response MUST be returned by the client after it collects the printer capabilities. The data for the OutCapArray field is retrieved by the client printer driver. The Result field MUST contain an HRESULT returned by the client printer driver.Processing a Convert Devmode Request XE "CONVERT_DEVMODE_REQ"Upon receipt of the CONVERT_DEVMODE_REQ request, the client MUST invoke the printer driver to acquire its current DEVMODE. The contents of the DevmodeIn are ignored, and the result is stored in DevmodeOut. The field cbProvided MUST be used to identify how much data to return in the OutputBuffer field in the response.Sending a Convert Devmode Response XE "CONVERT_DEVMODE_RSP"The CONVERT_DEVMODE_RSP response is generated by the client after querying the client printer driver for its current DEVMODE. If the driver output contains more data than is specified in the cbProvided field of the request, the value contained in the cbNeeded field identifies the full length of the output, the ReturnValue field is set to FALSE (0x00000000), and the ErrorCode field MUST be set to ERROR_INSUFFICIENT_BUFFER (0x0000007A). The Result field MUST contain an HRESULT that describes the return error code from the client printer driver.Processing a Get Device Capability Request XE "GET_DEVICE_CAP_REQ"Upon receipt of a GET_DEVICE_CAP_REQ request, the client MUST pass the contents of the DevmodeIn and DeviceCap fields to the client printer driver. The value contained in the InputBufferSize field MUST be interpreted as the maximum allowable size of the OutputBuffer field that the client sends in the reply to this request.Sending a Get Device Capability Response XE "GET_DEVICE_CAP_RSP"The GET_DEVICE_CAP_RSP response MUST contain the output from the client printer driver. The OutputBuffer field MUST contain the block of data as returned by the printer driver. ReturnValue is returned by the client printer driver. The Result field MUST contain an HRESULT that describes the overall error code from the call.Processing a Document Properties Request XE "DOC_PROPERTIES_REQ"When processing the DOC_PROPERTIES_REQ request, the client MUST query the client printer driver for document properties. The fMode and DevmodeIn fields MUST be used as input to the driver, without any additional processing. The hServerWindow field MUST identify the WindowHandle in which the request MUST be executed. The client has the responsibility to map this window to the appropriate client window, or to the container window that owns the entire terminal server desktop. This mapped value MUST also be passed as input to the client printer driver. The OutputDevModeSizeProvided field MUST be interpreted as the limit on the size of the OutDevMode field in the reply to this request.Sending a Document Properties Response XE "DOC_PROPERTIES_RSP"The DOC_PROPERTIES_RSP reply MUST contain the DEVMODE BLOB that was acquired from the client printer driver. The BLOB MUST be returned in the OutDevMode field of this response. If the size of the BLOB data in the OutDevMode field is more than was specified in the OutputDevModeSizeProvided field of the request and the fMode field of the request was set to 0, the value in the ReturnValue field MUST indicate the required data size, and the ErrorCode field MUST be set to ERROR_INSUFFICIENT_BUFFER (0x0000007A), the Result field MUST be set to S_OK (0x00000000), and the OutDevMode field size in this case MUST be zero.If the client printer driver returns data that is larger than the size provided in the OutputDevModeSizeProvided field and the fMode field was not set to 0, the ReturnValue field MUST be set to 0xffffffff, the ErrorCode MUST be set to ERROR_INSUFFICIENT_BUFFER (0x0000007A) ), the Result field MUST be set to S_OK (0x00000000), and the OutDevMode field size in this case MUST be zero.Otherwise, the ReturnValue field MUST contain the return code returned by the client printer driver when it acquired document properties, and the ErrorCode field MUST contain the error code returned by the driver. The Result field MUST contain an HRESULT that describes the overall status of the entire operation.Processing a Get Device Adjustment Request XE "MXDC_GETPDEV_ADJUSTMENT_REQ"The client MUST pass the unchanged contents of the pDevmodeIn, pInBuffer, and pInProps fields to the client printer driver when processing the MXDC_GETPDEV_ADJUSTMENT_REQ request message.Sending a Get Device Adjustment Response XE "MXDC_GETPDEV_ADJUSTMENT_RSP"The client fills out the data for pOutProps field in the response. Result contains the return error code from the client printer driver.User Interface Messages XE "User interface messages:Printer Driver interface" XE "Printer Driver interface:user interface messages"Printer Properties UI XE "Printer properties UI"Processing an Async Printer Properties Request XE "ASYNC_PRINTER_PROPS_REQ"Upon receipt of the ASYNC_PRINTER_PROPS_REQ request, the client MUST query the client printer driver for printer properties. If the Flags field contains the XPSREDIR_PRINTER_PROPERTIES_Flags_NO_PERMISSION value (0x00000001), the printer driver MUST be opened with no required permissions. If the flag is set to XPSREDIR_PRINTER_PROPERTIES_Flags_WITH_PERMISSION (0x00000000), the printer MUST be opened with exclusive permissions. The hServerWindow parameter identifies the server window in which the request MUST be executed. The client owns the responsibility to map this window to the appropriate client window or to the container window that owns the entire terminal server Desktop. The Callback field is stored for when the call is complete.Sending an Async Printer Properties Response XE "ASYNC_PRINTER_PROPS_RSP"This response is sent as soon as the client starts to query the client printer driver for its printer properties. If the startup was successful, the Result field contains S_OK; otherwise, it contains an appropriate error code.Sending a Printer Properties Callback Request XE "Printer Properties Callback Request"When the query from the client to the client printer driver for printer properties has completed, the client sends this request to the server with ReturnValue containing the return code of the query, and ErrorCode extracted from the error code of the query.Processing a Printer Properties Callback Response XE "Printer Properties Callback Response"This response indicates that the server has received the request; no additional processing is required.Processing a Cancel Async Printer Properties Request XE "ASYNC_PRINTER_PROPS_REQ"When this request is received, the client closes any UI initiated by the ASYNC_PRINTER_PROPS_REQ started as specified in section 3.2.5.3.3.1.1.Sending a Cancel Async Printer Properties Response XE "ASYNC_PRINTER_PROPS_RSP"This response is sent after the client has canceled the request to the ASYNC_PRINTER_PROPS_REQ. The Result field contains the error code for the successful cancellation request.Document Properties UI XE "Document properties UI"Processing an Async Document Properties Request XE "Async Document Properties Request"This request is processed in the same way as the DOC_PROPERTIES_REQ (as specified in section 3.2.5.3.2.7), with the exception that the Callback field is stored for when the call is complete.Sending an Async Document Properties Response XE "Async Document Properties Response"This response is sent as soon as the client starts to query the client printer driver for its document properties. If the startup was successful, the Result field contains S_OK; otherwise, it contains an appropriate error code.Sending a Document Properties Callback Request XE "Document Properties Callback Request"When the request to the client printer driver that was started in the ASYNC_DOC_PROPS_REQ (as specified in section 3.2.5.3.3.2.1) finishes, the client sends this request to the server indicating the successful completion of the call. This request contains a DEVMODE that has been acquired by the printer driver and has to be returned in the Devmode field of this response. If the data in the Devmode parameter is more than specified in the OutputDevModeSizeProvided of the request, ReturnValue indicates that the required data size and ErrorCode MUST be set to ERROR_INSUFFICIENT_BUFFER. Otherwise, ReturnValue contains the return code that the driver returns when acquiring document properties, and ErrorCode contains the error code returned by the driver.Processing a Document Properties Callback Response XE "DOC_PROPS_CALLBACK_RSP"The server MUST send the DOC_PROPS_CALLBACK_RSP response to indicate that the callback was received. No additional processing is required.Processing a Cancel Async Document Properties Request XE "Cancel Async Document Properties Request"When the client receives this request, it MUST immediately cancel the request to the client printer driver started by the ASYNC_DOC_PROPS_REQ request message. Sending a Cancel Async Document Properties Response XE "CANCEL_ASYNC_DOC_PROPS_RSP"The client MUST send the CANCEL_ASYNC_DOC_PROPS_RSP response to indicate that the cancel request was received. No further processing is required.Processing a Move Document Properties Window Request XE "MOVE_DOC_PROPERTIES_REQ"When the client receives the MOVE_DOC_PROPERTIES_REQ request, it MUST reposition any user interface started by the ASYNC_DOC_PROPS_REQ request. The values in the xPos and yPos fields MUST indicate the x- and y-axis coordinates relative to the client's desktop. For example, coordinates (0,0) indicate the top leftmost corner of the client display area.Sending a Move Document Properties Window Reply XE "MOVE_DOC_PROPERTIES_RSP"The client MUST send the MOVE_DOC_PROPERTIES_RSP response after successfully moving any user interface. Result contains the error code for the operation. Timer Events XE "Client:timer events" XE "Timer events:client" XE "Timer events:client" XE "Client:timer events"None.Other Local Events XE "Client:other local events" XE "Other local events:client" XE "Local events:client" XE "Client:local events"None.Server DetailsAbstract Data Model XE "Server:abstract data model" XE "Abstract data model:server" XE "Data model - abstract:server" XE "Data model - abstract:server" XE "Abstract data model:server" XE "Server:abstract data model"The abstract data model is as specified in section 3.1.1.Timers XE "Server:timers" XE "Timers:server" XE "Timers:server" XE "Server:timers"None.Initialization XE "Server:initialization" XE "Initialization:server" XE "Initialization:server" XE "Server:initialization"Initialization is as specified in section 3.1.3.Higher-Layer Triggered Events XE "Server:higher-layer triggered events" XE "Higher-layer triggered events:server" XE "Triggered events - higher-layer:server" XE "Triggered events - higher-layer:server" XE "Higher-layer triggered events:server" XE "Server:higher-layer triggered events"None.Processing Events and Sequencing Rules XE "Sequencing rules:server" XE "Message processing:server" XE "Server:sequencing rules" XE "Server:message processing"Printer Ticket Interface XE "Client:Printer Ticket interface" XE "Printer Ticket interface:client" XE "Sequencing rules:server" XE "Message processing:server" XE "Server:sequencing rules" XE "Server:message processing"On the server, the virtual printer driver uses the Printer Ticket Interface to request information on print tickets from the client printer driver. Only one initialization request for this interface MUST be sent by the server.Initialization Messages XE "Printer Ticket interface:initialization messages" XE "Initialization messages:Printer Ticket interface"Sending a Get Supported Versions Request XE "GET_SUPPORTED_VERSIONS_REQ"The server MUST send the GET_SUPPORTED_VERSIONS_REQ request whenever a document is printed. The ClientPrinterId is retrieved, by using the Remote Desktop Protocol: File System Virtual Channel Extension, based on the client printer name that the virtual driver is supporting. The ClientPrinterId value MUST be the same as the DeviceId field in the DEVICE_ANNOUNCE header (as specified in [MS-RDPEFS] section 2.2.1.3) that is embedded in the DeviceList field of the DR_CORE_DEVICELIST_ANNOUNCE_REQ packet (as specified in [MS-RDPEFS] section 2.2.2.9).Processing a Get Supported Versions Response XE "GET_SUPPORTED_VERSIONS_RSP"If the Result field of the GET_SUPPORTED_VERSIONS_RSP reply indicates success, the virtual printer driver retrieves NumVersions and Versions and returns them to the printing subsystem on the server. If the Result field contains a failure the error MUST be propagated to the caller of the virtual printer driver.Sending a Bind Printer Request XE "BIND_PRINTER_REQ"The BIND_PRINTER_REQ request is sent by the server in response to a request from the printing subsystem that passes the Version.Processing a Bind Printer Response XE "BIND_PRINTER_RSP"On receipt of the BIND_PRINTER_RSP, the server MUST retrieve the content of the Options, DevModeFlags, Namespaces, and Result fields. The server MUST pass the content back to the printing subsystem.Capability Negotiation Messages XE "Printer Ticket interface:capability negotiation messages" XE "Capability negotiation messages:Printer Ticket interface"Sending a Query Device Namespace Request XE "QUERY_DEV_NS_REQ"The QUERY_DEV_NS_REQ request message is sent in response to a request from the printing subsystem. No further processing steps are required.Processing a Query Device Namespace Response XE "QUERY_DEV_NS_RSP"On receipt of the QUERY_DEV_NS_RSP response message, if the is_null_flag is TRUE (0x01), the server MUST pass NULL to the printing subsystem, indicating that the DefaultNamespace field is not present. Otherwise, the contents of the DefaultNamespace and Result fields are used to complete the subsystem request.Sending a Print Ticket to Devmode Request XE "PRINT_TKT_TO_DEVMODE_REQ"The printing subsystem MAY request that the virtual printer driver convert a print ticket into a DEVMODE. The printing subsystem provides a print ticket and input DEVMODE, which MUST be packed into the PrintTicket and pDevmodeIn fields (respectively) of the PRINT_TKT_TO_DEVMODE_REQ request message.Processing a Print Ticket to Devmode Response XE "PRINT_TKT_TO_DEVMODE_RSP"On receipt of the PRINT_TKT_TO_DEVMODE_RSP response message, the contents of the pDevmodeOut and Result fields MUST be passed to the printing subsystem.Sending a Devmode to Print Ticket Request XE "DEVMODE_TO_PRINT_TKT_REQ"The printing subsystem MAY request that the virtual printer driver convert a DEVMODE into a print ticket. The subsystem provides the print ticket and input DEVMODE, which MUST be packed into the pDevmodeIn and PrintTicket fields (respectively) of the DEVMODE_TO_PRINT_TKT_REQ request message.Processing a Devmode to Print Ticket Response XE "DEVMODE_TO_PRINT_TKT_RSP"On receipt of the DEVMODE_TO_PRINT_TKT_RSP response message, the server MUST pass the contents of the PrintTicket and Result fields to the printing subsystem. If is_null_flag is set to TRUE (0x01), the PrintTicket is assumed to be NULL. Sending a Print Caps Request XE "PRINT_CAPS_REQ"The PRINT_CAPS_REQ request message is sent by the server in response to the printing subsystem, requesting all printer capabilities from the client printer driver. No special processing steps are required.Processing a Print Caps Response XE "PRINT_CAPS_RSP"On receipt of the PRINT_CAPS_RSP response message, the contents of the Capabilities and Result fields MUST be passed to the printing subsystem. If is_null_flag is set to TRUE (0x01), the Capabilities field is assumed to be NULL.Sending a Print Caps from Print Ticket Request XE "PRINT_CAPS_FROM_PRINT_TKT_REQ"The PRINT_CAPS_FROM_PRINT_TKT_REQ request message is sent by the server in response to the printing subsystem, requesting all printer capabilities from the client printer driver. The printing subsystem MUST also have supplied a print ticket. The PrintTicket field MUST contain the print ticket received from the printing subsystem.Processing a Print Caps from Print Ticket Response XE "PRINT_CAPS_FROM_PRINT_TKT_RSP"The processing of the PRINT_CAPS_FROM_PRINT_TKT_RSP response message MUST be the same as what is specified in section 3.3.5.1.2.8.Sending a Validate Print Ticket Request XE "VALIDATE_PRINT_TKT_REQ"The printing subsystem MAY request that the server validate a print ticket. The server MUST pass the print ticket supplied by the printing subsystem in the PrintTicket field of the VALIDATE_PRINT_TKT_REQ request message.Processing a Validate Print Ticket Response XE "VALIDATE_PRINT_TKT_RSP"On receipt of the VALIDATE_PRINT_TKT_RSP response message, the contents of the PrintTicket and Result fields MUST be passed to the printing subsystem. If the is_null_flag is set to TRUE (0x01), the content of the PrintTicket field is assumed to be NULL. Printer Driver Interface XE "Client:Printer Driver interface" XE "Printer Driver interface:client"Initialization Messages XE "Printer Driver interface:initialization messages" XE "Initialization messages:Printer Driver interface" XE "Client:Printer Driver interface" XE "Printer Driver interface:client"Printer Driver Interface initialization messages SHOULD be sent before any other messages in this interface. These messages ensure that the printer driver is initialized on the client side.Sending an Initialize Printer Request XE "INIT_PRINTER_REQ"Whenever the virtual printer driver is initialized by the printing subsystem on the server, it sends the INIT_PRINTER_REQ request message to the client. The value for the ClientPrinterId field MUST be retrieved, using the Remote Desktop Protocol: File System Virtual Channel Extension, and is based on the client printer name that the virtual printer driver is supporting.Processing an Initialize Printer Response XE "INIT_PRINTER_RSP"On receipt of the INIT_PRINTER_RSP response message, if the content of the Result field indicates success, it is assumed that the virtual printer driver has been successfully initialized.Capability Negotiation Messages XE "Capability Negotiation messages:Printer Driver interface" XE "Printer Driver interface:Capability Negotiation messages"The Capability Negotiation messages exchange printing capabilities between the printing subsystem and the client printer driver. This protocol treats these capabilities as opaque and passes them unexamined between these two components.Sending a Get All Dev Caps Request XE "GET_ALL_DEV_CAPS_REQ"The GET_ALL_DEV_CAPS_REQ request message is sent from the server to the client immediately after the virtual printer driver is initialized. It collects all possible printing capabilities and caches them on the server. This cache is used to complete other capability requests from the printing subsystem.Processing a Get All Dev Caps Response XE "GET_ALL_DEV_CAPS_RSP"On receipt of the GET_ALL_DEV_CAPS_RSP response message, the contents of the OutCapArray and Result fields are passed back to the printing subsystem.Sending a Convert Dev Mode Request XE "CONVERT_DEVMODE_REQ"The CONVERT_DEVMODE_REQ request message is sent from the server to the client when the printing subsystem requests from the printer driver a conversion from one version of a DEVMODE to another. The driver then performs the conversion based on the value of fMode field. The exact interface for converting the DEVMODE is between the server printing subsystem and the client print driver, which is specific to the printing subsystem implementation, outside of this protocol. The protocol treats these fields as opaque payload. The fields cbDevmodeIn and DevmodeIn MUST contain the DEVMODE information supplied by the printing subsystem. The cbProvided field MUST indicate the maximum number of bytes for the OutputBuffer field in the response.Processing a Convert Dev Mode Response XE "CONVERT_DEVMODE_RSP"The CONVERT_DEVMODE_RSP packet is processed if the Result field indicates success. The fields cbOutputBufferSize and OutputBuffer MUST contain the DEVMODE converted by the client printer driver to be passed to the printing subsystem. The cbNeeded field MUST contain information indicating if the printing subsystem needs to allocate more space for the converted DEVMODE. The ErrorCode field is used to inform the printing subsystem of any errors in the conversion. If the Result field contains a failure, the error MUST be propagated to the caller of the virtual printer driver.Sending a Get Device Capability Request XE "GET_DEVICE_CAP_REQ"The server MUST send the GET_DEVICE_CAP_REQ request message in response to a printing subsystem query to the virtual printer driver for a specific device request. The content for the DeviceCap field is provided by the printing subsystem to indicate what capability is requested. The DevmodeIn field content is also provided by the printing subsystem to indicate a DEVMODE for the virtual printer driver. The InputBufferSize field indicates the maximum returned data size for the OutputBuffer field in the response.Processing a Get Device Capability Response XE "GET_DEVICE_CAP_RSP"This packet is processed if the Result field indicates success. The cbOutputBufferSize and OutputBuffer fields indicate the capability returned by the client printer driver and are passed to the printing subsystem. ReturnValue is also passed to the subsystem. If the Result field contains a failure, the error MUST be propagated to the caller of the virtual printer driver.Sending a Document Properties Request XE "DOC_PROPERTIES_REQ"The server MUST send the DOC_PROPERTIES_REQ request message when the printing subsystem requests a DEVMODE for document properties from the virtual printer driver. The printing subsystem provides the contents of the fMode and hServerWindow fields. The contents of the cbDevmodeIn and DevmodeIn fields, also provided by the printing subsystem, describe the DEVMODE. The OutputDevModeSizeProvided field describes the maximum data size expected in bytes in the OutDevMode field of the reply message.Processing a Document Properties Response XE "DOC_PROPERTIES_RSP"The DOC_PROPERTIES_RSP response message is processed if the Result field indicates success. The content of the OutDevMode field describes the document property DEVMODE returned by the client printer driver and, together with the contents of the Result and ErrorCode fields, MUST be passed to the printing subsystem. If the Result field contains a failure, the error MUST be propagated to the caller of the virtual printer driver.Sending a Get Device Adjustment Request XE "MXDC_GETPDEV_ADJUSTMENT_REQ"When sending the MXDC_GETPDEV_ADJUSTMENT_REQ request message, the pDevmodeIn, pInBuffer, and pInProps fields MUST be passed unchanged as received from the printing subsystem.Processing a Get Device Adjustment Response XE "MXDC_GETPDEV_ADJUSTMENT_RSP"On receipt of the MXDC_GETPDEV_ADJUSTMENT_RSP response message, the pOutProps and Result fields MUST be passed to the printing subsystem.User Interface Messages XE "User interface messages:Printer Driver interface" XE "Printer Driver interface:user interface messages"There are two groups of User Interface messages: Printer Properties UI and Document Properties UI. It is common that the request message is always sent by the server. The UI is displayed by the client. Canceling a UI display is handled identically on either side. The two UI types differ in the type of information displayed and returned to the server.Printer Properties UI XE "Printer properties UI"Sending an Async Printer Properties Request XE "ASYNC_PRINTER_PROPS_REQ"The server MUST send the ASYNC_PRINTER_PROPS_REQ request message whenever the printing subsystem requests that the virtual printer driver display its custom printer properties UI. The contents of the Flags and hServerWindow fields are passed by the printing subsystem, where Flags indicates the state in which the printer driver's UI SHOULD be opened and hServerWindow identifies the parent window on the server in which the UI MUST be displayed.Processing an Async Printer Properties Response XE "ASYNC_PRINTER_PROPS_RSP"On receiving the ASYNC_PRINTER_PROPS_RSP response message, a value indicating success in the Result field indicates that the UI has been successfully instantiated on the client. No additional processing is required by the server. The printing subsystem MUST be informed of the successful UI instantiation.Processing a Printer Properties Callback Request XE "PRINTER_PROPS_CALLBACK_REQ"The PRINTER_PROPS_CALLBACK_REQ request message indicates that the print properties UI has been closed on the client. The server MUST pass the contents of the ReturnValue and ErrorCode fields to the printing subsystem.Sending a Printer Properties Callback Response XE "PRINTER_PROPS_CALLBACK_RSP"The PRINTER_PROPS_CALLBACK_RSP response message MUST be sent immediately after the PRINTER_PROPS_CALLBACK_REQ message is received.Sending a Cancel Async Printer Properties Request XE "CANCEL_ASYNC_PRINTER_PROPS_REQ"The CANCEL_ASYNC_PRINTER_PROPS_REQ request message MUST be sent by the server whenever it wants to stop the display of a printer properties UI. No server-specific steps are required to construct this message. Processing a Cancel Async Printer Properties Response XE "CANCEL_ASYNC_PRINTER_PROPS_RSP"Receiving the CANCEL_ASYNC_PRINTER_PROPS_RSP response message means that the client UI is closed. No further processing is required.Document Properties UI XE "Document properties UI"Sending an Async Document Properties Request XE "ASYNC_DOC_PROPS_REQ"The ASYNC_DOC_PROPS_REQ request message MUST be sent by the server in response to a request from the printing subsystem to the virtual printer driver to display its custom document properties UI. The printing subsystem provides the contents of the fMode and hServerWindow fields. The contents of the cbDevmodeIn and DevmodeIn fields, also provided by the printing subsystem, describe the DEVMODE. The OutputDevModeSize field describes the maximum data size expected, in bytes, in the Devmode field of the reply message.Processing an Async Document Properties Response XE "ASYNC_DOC_PROPS_RSP"On receipt of the ASYNC_DOC_PROPS_RSP response message, a value indicating success in the Result field indicates that the document properties UI was successfully instantiated on the client. The printing subsystem MUST be informed of the document properties UI instantiation.Processing a Document Properties Callback Request XE "DOC_PROPS_CALLBACK_REQ"The DOC_PROPS_CALLBACK_REQ request message indicates that the client-side document properties UI has been closed by the user. The Devmode field contains the updated DEVMODE from the UI. The contents of the ReturnValue and ErrorCode fields MUST be passed to the printing subsystem.Sending a Document Properties Callback Response XE "DOC_PROPS_CALLBACK_RSP"The DOC_PROPS_CALLBACK_RSP response message MUST be sent immediately after the server receives the DOC_PROPS_CALLBACK_REQ. No server-specific steps are required to construct this message.Sending a Cancel Async Document Properties Request XE "CANCEL_ASYNC_DOC_PROPS_REQ"The CANCEL_ASYNC_DOC_PROPS_REQ request message MUST be sent by the server whenever it wants to stop the display of the document properties UI. No server-specific steps are required to construct this message.Processing a Cancel Async Document Properties Response XE "CANCEL_ASYNC_DOC_PROPS_RSP"The CANCEL_ASYNC_DOC_PROPS_RSP response message is sent immediately after the client UI is closed. No additional processing is required by the server upon receipt of this message.Sending a Move Document Properties Window Request XE "MOVE_DOC_PROPERTIES_REQ"The MOVE_DOC_PROPERTIES_REQ request message MUST be sent by the server immediately after an ASYNC_DOC_PROPS_RSP response is received. The MOVE_DOC_PROPERTIES_REQ request's purpose is to reposition the client UI to a particular location identified by the xPos and yPos fields so that the client UI overlaps the server parent window. The xPos and yPos fields are (respectively) an X and Y coordinate of the parent UI window that has been passed in the hServerWindow field in an ASYNC_DOC_PROPS_REQ message. Processing a Move Document Properties Window Reply XE "MOVE_DOC_PROPERTIES_RSP"The MOVE_DOC_PROPERTIES_RSP reply is received immediately after the client UI has been repositioned. The Result field indicates the success of the operation. No additional processing is required.Timer Events XE "Server:timer events" XE "Timer events:server" XE "Timer events:server" XE "Server:timer events"None.Other Local Events XE "Server:other local events" XE "Other local events:server" XE "Local events:server" XE "Server:local events"None.Protocol Examples XE "Examples"The following annotations describe several operations as used in common scenarios to illustrate the function of the Remote Desktop Protocol: XPS Print Virtual Channel Extension.Printer setup sequence: (1) Initialize Printer RequestChannelName = XPSRD,16,server to client00000000 00 00 00 00 00 00 00 00 00 01 00 00 0d 00 00 00 ................00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 01 00 00 -> INIT_PRINTER_REQ = 0x000001000d 00 00 00 -> ClientPrinterId = 0x0000000d(2) Initialize Printer ResponseChannelName = XPSRD,12,client to server00000000 00 00 00 00 00 00 00 00 00 00 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Result = S_OK(3) Get All Dev Caps RequestChannelName = XPSRD,12,server to client00000000 00 00 00 00 00 00 00 00 01 01 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000001 01 00 00 -> GET_ALL_DEV_CAPS_REQ = 0x00000101(4) Get All Dev Caps ResponseChannelName = XPSRD,8564,client to server00000000 00 00 00 00 00 00 00 00 24 00 00 00 00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000024 00 00 00 -> numCaps = 0x00000024 ff ff ff ff ........$.......00000010 00 00 00 00 00 00 00 00 ff ff ff ff -> TSDEVICE_CAPABILITIES: ReturnValue00 00 00 00 -> TSDEVICE_CAPABILITIES: ErrorCode = ERROR_SUCCESS00 00 -> TSDEVICE_CAPABILITIES: numBytes = 0 -> TSDEVICE_CAPABILITIES: Data(variable length=0)00 00 -> TSDEVICE_CAPABILITIES: numBytes2 = 0 53 ff 81 03 00 00 00 00 ........S.......00000020 00 00 00 00 53 ff 81 03 -> TSDEVICE_CAPABILITIES: ReturnValue = 0x0381ff5300 00 00 00 -> TSDEVICE_CAPABILITIES: ErrorCode = ERROR_SUCCESS00 00 -> TSDEVICE_CAPABILITIES: numBytes = 0 -> TSDEVICE_CAPABILITIES: Data(variable length=0)00 00 -> TSDEVICE_CAPABILITIES: numBytes2 = 0 19 00 00 00 00 00 00 00 32 00 01 00 ............2...00000030 05 00 06 00 07 00 08 00 09 00 0b 00 0c 00 0d 00 ................00000040 11 00 14 00 18 00 1b 00 1c 00 22 00 25 00 42 00 ..........".%.B.00000050 52 00 81 00 84 00 87 00 94 00 5e 01 d7 01 ff 7f R.........^.....00000060 32 00 19 00 00 00 -> TSDEVICE_CAPABILITIES: ReturnValue00 00 00 00 -> TSDEVICE_CAPABILITIES: ErrorCode = ERROR_SUCCESS32 00 -> TSDEVICE_CAPABILITIES: numBytes = 0x32 -> TSDEVICE_CAPABILITIES: Data (variable length=0x32)32 00 -> TSDEVICE_CAPABILITIES: numBytes2 = 0x32(skipped)00002160 00 00 14 01 00 00 15 01 00 00 16 01 00 00 5c 00 ..............\.00002170 00 00 00 00 ....00 00 00 00 - Result = S_OK(5) Server Convert Devmode RequestChannelName = XPSRD,28,server to client00000000 00 00 00 00 00 00 00 00 02 01 00 00 04 00 00 00 ................00000010 00 00 00 00 00 00 00 00 00 00 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000002 01 00 00 -> CONVERT_DEVMODE_REQ = 0x10204 00 00 00 -> CDM_DRIVER_DEFAULT = 0x400 00 00 00 -> cbDevmodeIn = 0 -> DevmodeIn (variable size=0)00 00 00 00 -> cbDevmodeOut = 0 -> DevmodeOut (variable size=0)00 00 00 00 -> cbProvided = 0(6) Client Convert Devmode Response ChannelName = XPSRD,28,client to server00000000 00 00 00 00 00 00 00 00 00 00 00 00 48 1f 00 00 ............H...00000010 00 00 00 00 7a 00 00 00 00 00 00 00 ....z.......00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> cbOutputBufferSize = 0 -> OutputBuffer (variable size=0)48 1f 00 00 -> cbNeeded = 0x1f4800 00 00 00 -> ReturnValue7a 00 00 00 -> ErrorCode = ERROR_INSUFFICIENT_BUFFER00 00 00 00 -> Result = S_OK(7) Server Convert Devmode RequestChannelName = XPSRD,28,server to client00000000 00 00 00 00 00 00 00 00 02 01 00 00 04 00 00 00 ................00000010 00 00 00 00 00 00 00 00 48 1f 00 00 ........H...00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000002 01 00 00 -> CONVERT_DEVMODE_REQ = 0x10204 00 00 00 -> CDM_DRIVER_DEFAULT = 0x400 00 00 00 -> cbDevmodeIn = 0 -> DevmodeIn (variable size=0)00 00 00 00 -> cbDevmodeOut = 0 -> DevmodeOut (variable size=0)48 1f 00 00 -> cbProvided = 0x1f48(8) Client Convert Devmode ResponseChannelName = XPSRD,8036,client to server00000000 00 00 00 00 00 00 00 00 48 1f 00 00 5c 00 5c 00 ........H...\.\.00000010 43 00 53 00 52 00 7c 00 4d 00 53 00 50 00 52 00 C.S.R.|.M.S.P.R.00000020 49 00 4e 00 54 00 34 00 34 00 5c 00 7b 00 44 00 I.N.T.4.4.\.{.D.00000030 37 00 34 00 39 00 37 00 35 00 39 00 45 00 2d 00 7.4.9.7.5.9.E.-.(skipped) 48 1f 00 00 01 00 00 00 00 00 00 00 ....H...........00001f60 00 00 00 00 ....00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000048 1f 00 00 -> cbOutputBufferSize = 0x1f48 -> OutputBuffer (variable size=0x1f48)48 1f 00 00 -> cbNeeded = 0x1f4801 00 00 00 -> ReturnValue00 00 00 00 -> ErrorCode = ERROR_SUCCESS00 00 00 00 -> Result = S_OKDocument Properties User Interface sequence: (1) Initialize Printer RequestChannelName = XPSRD,16,server to client00000000 00 00 00 00 00 00 00 00 00 01 00 00 0d 00 00 00 ................00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 01 00 00 -> INIT_PRINTER_REQ = 0x000001000d 00 00 00 -> ClientPrinterId = 0x0000000d(2) Initialize Printer ResponseChannelName = XPSRD,12,client to server00000000 00 00 00 00 00 00 00 00 00 00 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Result = S_OK(3) Server Document Properties RequestChannelName = XPSRD,32,server to client00000000 00 00 00 00 00 00 00 00 05 01 00 00 00 00 00 00 ................00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000005 01 00 00 -> DOC_PROPERTIES_REQ = 0x0000010500 00 00 00 -> fMode = 000 00 00 00 00 00 00 00 -> hServerWindow = 000 00 00 00 -> cbDevmodeIn -> DevmodeIn00 00 00 00 -> OutputDevModeSizeProvided(4) Client Document Properties ResponseChannelName = XPSRD,24,client to server00000000 00 00 00 00 00 00 00 00 48 1f 00 00 00 00 00 00 ........H.......00000010 00 00 00 00 00 00 00 00 ........00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000048 1f 00 00 -> ReturnValue = 0x1f4800 00 00 00 -> ErrorCode = ERROR_SUCCESS00 00 00 00 -> cbOutDevModeSize = 0 -> OutDevMode (variable size=0)00 00 00 00 -> Result = S_OK(5) Server Document Properties RequestChannelName = XPSRD,32,server to client00000000 00 00 00 00 00 00 00 00 05 01 00 00 02 00 00 00 ................00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 ................00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000005 01 00 00 -> DOC_PROPERTIES_REQ = 0x0000010502 00 00 00 -> fMode = DM_OUT_BUFFER00 00 00 00 00 00 00 00 -> hServerWindow = 000 00 00 00 -> cbDevmodeIn -> DevmodeIn00 00 01 00 -> OutputDevModeSizeProvided = 0x100000(6) Client Document Properties ResponseChannelName = XPSRD,8032,client to server00000000 00 00 00 00 00 00 00 00 01 00 00 00 7a 00 00 00 ............z...00000010 48 1f 00 00 5c 00 5c 00 4d 00 53 00 50 00 52 00 H...\.\.M.S.P.R.00000020 49 00 4e 00 54 00 34 00 34 00 5c 00 62 00 34 00 I.N.T.4.4.\.b.4.(skipped)00001f50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000001 00 00 00 -> ReturnValue = 17a 00 00 00 -> ErrorCode = ERROR_INSUFFICIENT_BUFFER48 1f 00 00 -> cbOutDevModeSize = 0x1f48 -> OutDevMode (variable size=0x1f48)00 00 00 00 -> Result = S_OK(7) Server Async Document Properties RequestChannelName = XPSRD,8048,server to client00000000 00 00 00 00 00 00 00 00 06 01 00 00 4e 00 00 00 ............N...00000010 2c 02 06 00 00 00 00 00 48 1f 00 00 62 00 34 00 ,.......H...b.4.00000020 33 00 2d 00 32 00 38 00 36 00 36 00 2d 00 61 00 3.-.2.8.6.6.-.a.00000030 20 00 6f 00 6e 00 20 00 4d 00 53 00 50 00 52 00 .o.n. .M.S.P.R.(skipped)00001f60 00 00 00 00 00 00 01 00 01 00 00 00 01 00 00 00 ................00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000006 01 00 00 -> ASYNC_DOC_PROPS_REQ = 0x1064e 00 00 00 -> fMode = DM_IN_BUFFER | DM_OUT_BUFFER | DM_IN_PROMPT | DM_USER_DEFAULT2c 02 06 00 00 00 00 00 -> hServerWindow = 0x6022c48 1f 00 00 -> cbDevmodeIn = 0x1f48 -> DevmodeIn (variable size=0x1f48)00 00 01 00 -> OutputDevModeSize = 0x10000001 00 00 00 -> NumCallbacks = 101 00 00 00 -> Callback = 1(8) Client Async Document Properties ResponseChannelName = XPSRD,12,client to server00000000 00 00 00 00 00 00 00 00 00 00 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Result = S_OK(9) Client Document Properties Callback RequestChannelName = XPSRD,8032,client to server00000000 01 00 00 00 00 00 00 00 00 01 00 00 01 00 00 00 ................00000010 00 00 00 00 48 1f 00 00 5c 00 5c 00 4d 00 53 00 ....H...\.\.M.S.00000020 50 00 52 00 49 00 4e 00 54 00 34 00 34 00 5c 00 P.R.I.N.T.4.4.\.(skipped)00001f50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000000 01 00 00 -> DOC_PROPS_CALLBACK_REQ = 0x10001 00 00 00 -> ReturnValue = 100 00 00 00 -> ErrorCode = ERROR_SUCCESS48 1f 00 00 -> cbDevmode = 0x1f48 -> Devmode (variable size=0x1f48)(10) Server Document Properties Callback ResponseChannelName = XPSRD,12,server to client00000000 01 00 00 00 00 00 00 00 00 00 00 00 ............01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Reserved = 0x00000000(11) Client to Server Interface releaseChannelName = XPSRD,12,client to server00000000 01 00 00 00 00 00 00 00 01 00 00 00 ............01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000001 00 00 00 -> RIMCALL_RELEASE = 0x00000001Printer Properties User Interface sequence:(1) Server Async Printer Properties RequestChannelName = XPSRD,32,server to client00000000 00 00 00 00 00 00 00 00 07 01 00 00 01 00 00 00 ................00000010 16 01 21 00 00 00 00 00 01 00 00 00 01 00 00 00 ..!.............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000007 01 00 00 -> ASYNC_PRINTER_PROPS_REQ = 0x10701 00 00 00 -> Flags = XPSREDIR_PRINTER_PROPERTIES_Flags_NO_PERMISSION16 01 21 00 00 00 00 00 -> hServerWindow = 0x21011601 00 00 00 -> Reserved = 0x0000000101 00 00 00 -> Callback = 0x00000001 (2) Client Async Printer Properties ResponseChannelName = XPSRD,12,client to server00000000 00 00 00 00 00 00 00 00 00 00 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Result = S_OK(3) Client Printer Properties Callback RequestChannelName = XPSRD,20,client to server00000000 01 00 00 00 00 00 00 00 00 01 00 00 01 00 00 00 ................00000010 00 00 00 00 ....01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000000 01 00 00 -> PRINTER_PROPS_CALLBACK_REQ = 0x10001 00 00 00 -> ReturnValue = 100 00 00 00 -> ErrorCode = ERROR_SUCCESS(4) Server Printer Properties Callback ResponseChannelName = XPSRD,12,server to client00000000 01 00 00 00 00 00 00 00 00 00 00 00 ............01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Reserved = 0x00000000(5) Client to Server Interface releaseChannelName = XPSRD,12,client to server00000000 01 00 00 00 00 00 00 00 01 00 00 00 ............01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000001 00 00 00 -> RIMCALL_RELEASE = 0x00000001Document Properties User Interface sequence (canceled): (1) Server Async Document Properties RequestChannelName = XPSRD,8048,server to client00000000 00 00 00 00 00 00 00 00 06 01 00 00 4e 00 00 00 ............N...00000010 fa 01 07 00 00 00 00 00 48 1f 00 00 62 00 34 00 ........H...b.4.00000020 33 00 2d 00 32 00 38 00 36 00 36 00 2d 00 61 00 3.-.2.8.6.6.-.a.00000030 20 00 6f 00 6e 00 20 00 4d 00 53 00 50 00 52 00 .o.n. .M.S.P.R.(skipped)00001f60 00 00 00 00 00 00 01 00 01 00 00 00 01 00 00 00 ................00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000006 01 00 00 -> ASYNC_DOC_PROPS_REQ = 0x1064e 00 00 00 -> fMode = DM_IN_BUFFER | DM_OUT_BUFFER | DM_IN_PROMPT | DM_USER_DEFAULTfa 01 07 00 00 00 00 00 -> hServerWindow = 0x701fa48 1f 00 00 -> cbDevmodeIn = 0x1f48 -> DevmodeIn (variable size=0x1f48)00 00 00 01 00 -> OutputDevModeSize = 0x10000001 00 00 00 -> NumCallbacks = 101 00 00 00 -> Callback = 1(2) Client Async Document Properties ResponseChannelName = XPSRD,12,client to server00000000 00 00 00 00 00 00 00 00 00 00 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Result = S_OK(3) Server Cancel Async Document Properties RequestChannelName = XPSRD,12,server to client00000000 00 00 00 00 00 00 00 00 09 01 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000009 01 00 00 -> CANCEL_ASYNC_DOC_PROPS_REQ = 0x109(4) Client Document Properties Callback RequestChannelName = XPSRD,8032,client to server00000000 01 00 00 00 00 00 00 00 00 01 00 00 02 00 00 00 ................00000010 00 00 00 00 48 1f 00 00 00 00 00 00 00 00 00 00 ....H...........00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................(skipped)00001f50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000000 01 00 00 -> DOC_PROPS_CALLBACK_REQ = 0x10002 00 00 00 -> ReturnValue = 200 00 00 00 -> ErrorCode = ERROR_SUCCESS48 1f 00 00 -> cbDevmode = 0x1f48 -> Devmode (variable size=0x1f48)(5) Server Document Properties Callback ResponseChannelName = XPSRD,12,server to client00000000 01 00 00 00 00 00 00 00 00 00 00 00 ............01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Result = S_OK(6) Client Cancel Async Document Properties ResponseChannelName = XPSRD,12,client to server00000000 00 00 00 00 00 00 00 00 00 00 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Result = S_OK(7) Client to Server Interface releaseChannelName = XPSRD,12,client to server00000000 01 00 00 00 00 00 00 00 01 00 00 00 ............01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000001 00 00 00 -> RIMCALL_RELEASE = 0x00000001Printer Properties User Interface sequence (canceled):(1) Server Async Printer Properties RequestChannelName = XPSRD,32,server to client00000000 00 00 00 00 00 00 00 00 07 01 00 00 01 00 00 00 ................00000010 16 01 21 00 00 00 00 00 01 00 00 00 01 00 00 00 ..!.............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000007 01 00 00 -> ASYNC_PRINTER_PROPS_REQ = 0x10701 00 00 00 -> Flags = XPSREDIR_PRINTER_PROPERTIES_Flags_NO_PERMISSION16 01 21 00 00 00 00 00 -> hServerWindow = 0x21011601 00 00 00 -> NumCallbacks01 00 00 00 -> Callback(2) Client Async Printer Properties ResponseChannelName = XPSRD,12,client to server00000000 00 00 00 00 00 00 00 00 00 00 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Result = S_OK(3) Server Cancel Async Printer Properties RequestChannelName = XPSRD,12,server to client00000000 00 00 00 00 00 00 00 00 0a 01 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x000000000a 01 00 00 -> CANCEL_ASYNC_PRINTER_PROPS_REQ = 0x10a(4) Client Printer Properties Callback RequestChannelName = XPSRD,20,client to server00000000 01 00 00 00 00 00 00 00 00 01 00 00 01 00 00 00 ................00000010 00 00 00 00 ....01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000000 01 00 00 -> PRINTER_PROPS_CALLBACK_REQ = 0x10001 00 00 00 -> ReturnValue = 100 00 00 00 -> ERROR_SUCCESS(5) Server Printer Properties Callback ResponseChannelName = XPSRD,12,server to client00000000 01 00 00 00 00 00 00 00 00 00 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Result = S_OK(7) Client Cancel Async Printer Properties ResponseChannelName = XPSRD,12,client to server00000000 00 00 00 00 00 00 00 00 00 00 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Result = S_OK(8) Client to Server Interface releaseChannelName = XPSRD,12,client to server00000000 01 00 00 00 00 00 00 00 01 00 00 00 ............01 00 00 00 -> InterfaceId (id of Callback) = 0x0000000100 00 00 00 -> MessageId = 0x0000000001 00 00 00 -> RIMCALL_RELEASE = 0x00000001Printing a document sequence: (1) Server Document Properties RequestChannelName = XPSRD,32,server to client00000000 00 00 00 00 00 00 00 00 05 01 00 00 00 00 00 00 ................00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000005 01 00 00 -> DOC_PROPERTIES_REQ = 0x10500 00 00 00 -> fMode = 000 00 00 00 00 00 00 -> hServerWindow = 000 00 00 00 -> cbDevmodeIn = 0 -> DevmodeIn (variable size=0)00 00 00 00 -> OutputDevModeSizeProvided = 0(2) Client Document Properties ResponseChannelName = XPSRD,24,client to server00000000 00 00 00 00 00 00 00 00 48 1f 00 00 00 00 00 00 ........H.......00000010 00 00 00 00 00 00 00 00 ........00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000048 1f 00 00 -> ReturnValue = 0x1f4800 00 00 00 -> ErrorCode = ERROR_SUCCESS00 00 00 00 -> cbOutDevModeSize = 0 -> OutDevMode (variable size=0)00 00 00 00 -> Result = S_OK(3) Server Get Supported Versions RequestChannelName = TSVCTKT,16,server to client00000000 00 00 00 00 00 00 00 00 00 01 00 00 0d 00 00 00 ................00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 01 00 00 -> GET_SUPPORTED_VERSIONS_REQ = 0x1000d 00 00 00 -> ClientPrinterId = 0xd(4) Client Get Supported Versions ResponseChannelName = TSVCTKT,20,client to server00000000 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 ................00000010 00 00 00 00 ....00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000001 00 00 00 -> NumVersions = 101 00 00 00 -> Versions (variable size=NumVersions * sizeof(UINT32) = 4) Versions[0] = 100 00 00 00 -> Result = S_OK(5) Server Bind Printer RequestChannelName = TSVCTKT,20,server to client00000000 00 00 00 00 00 00 00 00 01 01 00 00 0d 00 00 00 ................00000010 01 00 00 00 ....00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000001 01 00 00 -> BIND_PRINTER_REQ = 0x1010d 00 00 00 -> ClientPrinterId = 0xd01 00 00 00 -> Version = 1(6) Client Bind Printer ResponseChannelName = TSVCTKT,24,client to server00000000 00 00 00 00 00 00 00 00 00 00 00 00 0f f6 80 03 ................00000010 00 00 00 00 00 00 00 00 ........00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 00 00 00 -> Options = PTSHIM_DEFAULT0f f6 80 03 -> DevModeFlags = 0x0380f60f = DM_MEDIATYPE|DM_ICMINTENT|DM_ICMMETHOD|DM_DUPLEX| DM_YRESOLUTION|DM_TTOPTION|DM_COLLATE| DM_DEFAULTSOURCE|DM_PRINTQUALITY|DM_ORIENTATION| DM_PAPERSIZE|DM_PAPERLENGTH|DM_PAPERWIDTH00 00 00 00 -> NumNamespaces = 0 -> Namespaces (variable size=0)00 00 00 00 -> Result = S_OK(7) Server Query Device Namespace RequestChannelName = TSVCTKT,12,server to client00000000 00 00 00 00 00 00 00 00 02 01 00 00 ............00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000002 01 00 00 -> QUERY_DEV_NS_REQ = 0x102(8) Client Query Device Namespace ResponseChannelName = TSVCTKT,83,client to server00000000 00 00 00 00 00 00 00 00 00 68 00 74 00 74 00 70 .........h.t.t.p00000010 00 3a 00 2f 00 2f 00 77 00 77 00 77 00 2e 00 68 .:././.w.w.w...h00000020 00 70 00 2e 00 63 00 6f 00 6d 00 2f 00 70 00 72 .p...c.o.m./.p.r00000030 00 69 00 6e 00 74 00 73 00 63 00 68 00 65 00 6d .i.n.t.s.c.h.e.m00000040 00 61 00 2f 00 32 00 30 00 30 00 35 00 00 00 00 .a./.2.0.0.5....00000050 00 00 00 ...00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 -> is_null_flag = 0 (not null) -> DefaultNamespace(not null) = L""00 00 00 00 -> Result = S_OK(9) Server Devmode to Print Ticket RequestChannelName = TSVCTKT,19502,server to client00000000 00 00 00 00 00 00 00 00 04 01 00 00 48 1f 00 00 ............H...00000010 62 00 34 00 33 00 2d 00 32 00 38 00 36 00 36 00 b.4.3.-.2.8.6.6.00000020 2d 00 61 00 20 00 6f 00 6e 00 20 00 4d 00 53 00 -.a. .o.n. .M.S.00000030 50 00 52 00 49 00 4e 00 54 00 34 00 34 00 20 00 P.R.I.N.T.4.4. .(skipped)00001f50 00 00 00 00 00 00 00 00 d2 2c 00 00 3c 3f 78 6d .........,..<?xm 00001f60 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 l version="1.0" 00001f70 65 6e 63 6f 64 69 6e 67 3d 22 55 54 46 2d 38 22 encoding="UTF-8" 00001f80 3f 3e 0d 0a 3c 70 73 66 3a 50 72 69 6e 74 54 69 ?>..<psf:PrintTi (skipped)00004c20 50 72 69 6e 74 54 69 63 6b 65 74 3e 0d 0a PrintTicket>..00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000004 01 00 00 -> DEVMODE_TO_PRINT_TKT_REQ = 0x10448 1f 00 00 -> cbDevmodeIn = 0x1f48 -> pDevmodeIn (variable size=0x1f48)(continuing at offset 0x00001f58)d2 2c 00 00 -> XML_DOCUMENT:cbXMLSize = 0x2cd2 -> XML_DOCUMENT:XMLDocument (variable size=0x2cd2)(10) Client Devmode to Print Ticket ResponseChannelName = TSVCTKT,15431,client to server00000000 00 00 00 00 00 00 00 00 00 36 3c 00 00 3c 3f 78 .........6<..<?x00000010 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 ml version="1.0"00000020 20 65 6e 63 6f 64 69 6e 67 3d 22 55 54 46 2d 38 encoding="UTF-800000030 22 3f 3e 0d 0a 3c 70 73 66 3a 50 72 69 6e 74 54 "?>..<psf:PrintT(skipped)00003c30 2f 70 73 66 3a 50 72 69 6e 74 54 69 63 6b 65 74 /psf:PrintTicket00003c40 3e 0d 0a 00 00 00 00 >......00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 -> is_null_flag = 0 (not null)36 3c 00 00 -> XML_DOCUMENT:cbXMLSize = 0x3c36 -> XML_DOCUMENT:XMLDocument (variable size=0x3c36)00 00 00 00 -> Result = S_OK(11) Server Get Device Capability RequestChannelName = XPSRD,22,server to client00000000 00 00 00 00 00 00 00 00 04 01 00 00 00 00 00 00 ................00000010 0b 00 00 00 00 00 ......00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000004 01 00 00 -> GET_DEVICE_CAP_REQ = 0x10400 00 00 00 -> cbDevmodeIn = 0 -> DevmodeIn (variable size=0)0b 00 -> DeviceCap00 00 00 00 -> InputBufferSize = 0(12) Client Get Device Capability ResponseChannelName = XPSRD,20,client to server00000000 00 00 00 00 00 00 00 00 00 06 00 00 00 00 00 00 ................00000010 00 00 00 00 ....00 00 00 00 -> InterfaceId = 0x0000000000 00 00 00 -> MessageId = 0x0000000000 06 00 00 -> ReturnValue = 0x60000 00 00 00 -> cbOutputBufferSize = 0 -> OutputBuffer (variable size=0)00 00 00 00 -> Result = S_OKSecurity XE "Security"Security Considerations for Implementers XE "Security:implementer considerations" XE "Implementer - security considerations" XE "Implementers - security considerations"There are no security considerations for the Remote Desktop Protocol: XPS Print Virtual Channel Extension messages because all traffic is secured by the underlying RDP core protocol. An overview of the implemented security-related mechanisms is as specified in [MS-RDPBCGR] section 5. Index of Security Parameters XE "Security:parameter index" XE "Index of security parameters" XE "Parameters - security index" XE "Parameters - security"None.Appendix A: Product Behavior XE "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.Windows Vista operating system with Service Pack 1 (SP1)Windows Server 2008 operating systemWindows 7 operating systemWindows Server 2008 R2 operating systemWindows 8 operating systemWindows Server 2012 operating systemWindows 8.1 operating systemWindows Server 2012 R2 operating systemWindows 10 operating systemWindows Server 2016 operating systemWindows Server 2019 operating systemExceptions, 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. HYPERLINK \l "Appendix_A_Target_1" \h <1> Section 3.1.2: This timer is not implemented in Windows Vista SP1, Windows Server 2008, Windows 7, and Windows Server 2008 R2. HYPERLINK \l "Appendix_A_Target_2" \h <2> Section 3.1.5.1: In the Windows implementation of this protocol, an invalid packet always results in a dropped connection. This maintains protocol integrity and protects it from malicious attack.Change Tracking XE "Change tracking" XE "Tracking changes" This section identifies changes that were made to this document since the last release. Changes are classified as Major, Minor, or None. The revision class Major means that the technical content in the document was significantly revised. Major changes affect protocol interoperability or implementation. Examples of major changes are:A document revision that incorporates changes to interoperability requirements.A document revision that captures changes to protocol functionality.The revision class Minor means that the meaning of the technical content was clarified. Minor changes do not affect protocol interoperability or implementation. Examples of minor changes are updates to clarify ambiguity at the sentence, paragraph, or table level.The revision class None means that no new technical changes were introduced. Minor editorial and formatting changes may have been made, but the relevant technical content is identical to the last released version.The changes made to this document are listed in the following table. For more information, please contact dochelp@.SectionDescriptionRevision class6 Appendix A: Product BehaviorRemoved Windows Server operating system from the list of applicable products and added Windows Server 2019.MajorIndexAAbstract data model client (section 3.1.1 PAGEREF section_fd40e8bf2fa044de8fd142fe4afd74e054, section 3.2.1 PAGEREF section_eabc0678c82a4c2497a7679e7391865f56) server (section 3.1.1 PAGEREF section_fd40e8bf2fa044de8fd142fe4afd74e054, section 3.3.1 PAGEREF section_9ed3643dac0c480ea0d7e4d20b33391163)Applicability PAGEREF section_575459f5909f4508a1fde3fd0e9373c119Async Document Properties Request PAGEREF section_9b059690d85d49d29e4a9af5be14affc61Async Document Properties Response PAGEREF section_8d761a56514d4eb493a04b28019f557662ASYNC_DOC_PROPS_REQ PAGEREF section_e816c386429e41ec8efe4c5211dc7b4f67ASYNC_DOC_PROPS_REQ packet PAGEREF section_e9f754918013403895ffd7aa9d2ce77847ASYNC_DOC_PROPS_RSP PAGEREF section_1ce840ae359d4bb3bab6802393282e7268ASYNC_DOC_PROPS_RSP packet PAGEREF section_089447a4b1234f1dadd9bd2a92d8c88748ASYNC_PRINTER_PROPS_REQ (section 3.2.5.3.3.1.1 PAGEREF section_20a798c6377b415c936c6c8eaf64342a61, section 3.2.5.3.3.1.5 PAGEREF section_c173cb375fb549279f7c9ef9abac1c2a61, section 3.3.5.2.3.1.1 PAGEREF section_904ce562af904a3f8195c50eac93f7c067)ASYNC_PRINTER_PROPS_REQ packet PAGEREF section_d57e63d980f04722ad7e8bacb7ad78c644ASYNC_PRINTER_PROPS_RSP (section 3.2.5.3.3.1.2 PAGEREF section_e00636708aca4aae89b17c2feaa4310861, section 3.2.5.3.3.1.6 PAGEREF section_4de2390e36f94b0cbb128a37260cbe2961, section 3.3.5.2.3.1.2 PAGEREF section_fdca589d6c0a4800933b00fca0b6bb5667)ASYNC_PRINTER_PROPS_RSP packet PAGEREF section_77d508d509b84940b3879cbefa9484c244BBIND_PRINTER_REQ (section 3.2.5.2.1.3 PAGEREF section_471dd7aad9f94a7ebea768c6b105786757, section 3.3.5.1.1.3 PAGEREF section_1a1a2bc62bd24d7f9a9acfbeffa5a82a63)BIND_PRINTER_REQ packet PAGEREF section_2f290253c9c14cb28dfe8c982741b47d26BIND_PRINTER_RSP (section 3.2.5.2.1.4 PAGEREF section_1e3ebae28d4146e8981c45685f68814457, section 3.3.5.1.1.4 PAGEREF section_704aaaf7ece54a1893667254fc6eb15c63)BIND_PRINTER_RSP packet PAGEREF section_6ebc8867c16749f280c3704468b233fd26CCancel Async Document Properties Request PAGEREF section_d5c020b2b8574be8969c11763a778f1f62CANCEL_ASYNC_DOC_PROPS_REQ PAGEREF section_5a94951870f74990bb254afd4f7b4ad968CANCEL_ASYNC_DOC_PROPS_REQ packet PAGEREF section_e09c1198f44c4ba284f6537799fa190d49CANCEL_ASYNC_DOC_PROPS_RSP (section 3.2.5.3.3.2.6 PAGEREF section_1f842c6aa38543d292700adf48be968762, section 3.3.5.2.3.2.6 PAGEREF section_cffd6396cc2247d4aeeeb039318d177868)CANCEL_ASYNC_DOC_PROPS_RSP packet PAGEREF section_d01540d3ca5746238437595b28c63f8a49CANCEL_ASYNC_PRINTER_PROPS_REQ PAGEREF section_cb56174a3e5e45a3a1faaa2d03d0a82967CANCEL_ASYNC_PRINTER_PROPS_REQ packet PAGEREF section_384549ecae99479bb67f9d979ed3b77746CANCEL_ASYNC_PRINTER_PROPS_RSP PAGEREF section_91b7c14a48e44d328294dd039b60910c67CANCEL_ASYNC_PRINTER_PROPS_RSP packet PAGEREF section_f11f92df12ec4961b1a9a39ff23dae4b46Capability negotiation PAGEREF section_84707ffd1a494e60ad364543b200723f19Capability negotiation messages Printer Driver interface (section 1.3.2.3.2 PAGEREF section_a9de6afe183c4dc48db4d377e4f3858e16, section 2.2.4.2 PAGEREF section_bac57a0488024e0d9f73bb5a8e3fd1de35, section 3.2.5.3.2 PAGEREF section_ed6a7cc72ff94b8982182bb35ca642e259, section 3.3.5.2.2 PAGEREF section_a14bce76801d466ab5f280cc48a6b47465) Printer Ticket interface (section 1.3.2.2.2 PAGEREF section_df274b5e6d1b4bdea3f2d73df59e889814, section 2.2.3.2 PAGEREF section_7c279972ea8642d98f26e4c4696f5f0927, section 3.2.5.2.2 PAGEREF section_308b1fffbd564ed590a5904331ba758257, section 3.3.5.1.2 PAGEREF section_9ac2e01e734a485b9398c48f567471c864)Change tracking PAGEREF section_a86b16650912408bb4009a3eec6f2c0f82Client abstract data model (section 3.1.1 PAGEREF section_fd40e8bf2fa044de8fd142fe4afd74e054, section 3.2.1 PAGEREF section_eabc0678c82a4c2497a7679e7391865f56) higher-layer triggered events (section 3.1.4 PAGEREF section_ab040666b09e430a848e2f6bd901719455, section 3.2.4 PAGEREF section_267696dd0f56475aaf6b3fe31b2e6bc156) initialization (section 3.1.3 PAGEREF section_f3f37a4a7475493680911b31c74ae94c55, section 3.2.3 PAGEREF section_44af8caf56334fcca25ccc55e89a8efd56) interface manipulation (section 3.1.5.2 PAGEREF section_33afb86f9c9f4cd585e5a4c4ed6e13b455, section 3.2.5.1 PAGEREF section_ce1d3265c67441498e096799b3b4d6f257) local events (section 3.1.7 PAGEREF section_76e55335e1424406bd94c8e21125723256, section 3.2.7 PAGEREF section_cb01cd1d81ba441c989b3501b5e69d9c62) message processing (section 3.1.5 PAGEREF section_9d3aa5462aff4ae09b0364c9ce2a4faf55, section 3.2.5 PAGEREF section_340b4aa3ca924ff5a161e46cf31173e057) other local events PAGEREF section_cb01cd1d81ba441c989b3501b5e69d9c62 Printer Driver interface (section 3.2.5.3 PAGEREF section_57e3409ddce94cde9d8a6d80097a080259, section 3.3.5.2 PAGEREF section_b855a157914947fcb37ccdb826ef996f65, section 3.3.5.2.1 PAGEREF section_fbb13a069e8740979146020e8fa7466165) Printer Ticket interface (section 3.2.5.2 PAGEREF section_e41645a75e3848f5b129a81e99757cde57, section 3.3.5.1 PAGEREF section_ec01682f25d64b2cbd027f84a87202c463) sequencing rules (section 3.1.5 PAGEREF section_9d3aa5462aff4ae09b0364c9ce2a4faf55, section 3.2.5 PAGEREF section_340b4aa3ca924ff5a161e46cf31173e057) timer events (section 3.1.6 PAGEREF section_7b135c97205745dc8fe5d86ad626242c56, section 3.2.6 PAGEREF section_8b229825a3d54725a3ed9278e7eea53f62) timers (section 3.1.2 PAGEREF section_dc084ef1ddfb446d9ba1eb5582a0729f54, section 3.2.2 PAGEREF section_0299b4628eda4f67a6bee14a3ce79dd056)ClientPrinterId PAGEREF section_fd40e8bf2fa044de8fd142fe4afd74e054CONVERT_DEVMODE_REQ (section 3.2.5.3.2.3 PAGEREF section_75af2cf7957f4938a52c2944e38f368959, section 3.3.5.2.2.3 PAGEREF section_69db0fb2ea8842619f1649c529ee6ed765)CONVERT_DEVMODE_REQ packet PAGEREF section_6a6549a7685243919ff8c23820ff2b4e36CONVERT_DEVMODE_RSP (section 3.2.5.3.2.4 PAGEREF section_ab64d5602ca0493392d031336abc884960, section 3.3.5.2.2.4 PAGEREF section_075bd7e5f6da4ca5aaadf5a19a85ce5d66)CONVERT_DEVMODE_RSP packet PAGEREF section_acf9ab2c7ff84fe49fcfeb75de838d6137DData model - abstract client (section 3.1.1 PAGEREF section_fd40e8bf2fa044de8fd142fe4afd74e054, section 3.2.1 PAGEREF section_eabc0678c82a4c2497a7679e7391865f56) server (section 3.1.1 PAGEREF section_fd40e8bf2fa044de8fd142fe4afd74e054, section 3.3.1 PAGEREF section_9ed3643dac0c480ea0d7e4d20b33391163)Device Capabilities (TSDEVICE_CAPABILITIES) message PAGEREF section_4926fc650af84affbf4c03c3125088da51DEVMODE_TO_PRINT_TKT_REQ (section 3.2.5.2.2.5 PAGEREF section_b41b32ccc27d4139ae2ff5958bbab5e458, section 3.3.5.1.2.5 PAGEREF section_6d0c2ed92e3a45709b24f9875b0f0fdf64)DEVMODE_TO_PRINT_TKT_REQ packet PAGEREF section_fb1e79903a2a43e89dc9806b9c82780129DEVMODE_TO_PRINT_TKT_RSP PAGEREF section_9445dd64889c4b5989186625aa76e9c264DEVMODE_TO_PRINT_TKT_RSP packet PAGEREF section_177253cb9fc844ed836e0792a0e4e1c030DOC_PROPERTIES_REQ (section 3.2.5.3.2.7 PAGEREF section_02224b50615045f5be872613a9d134a760, section 3.3.5.2.2.7 PAGEREF section_e50613decb6443d9bd490c9ee66f21d666)DOC_PROPERTIES_REQ packet PAGEREF section_2b329d0f590e49beb58e33e19bc414b139DOC_PROPERTIES_RSP (section 3.2.5.3.2.8 PAGEREF section_25314442e2384d598093f0efc101900860, section 3.3.5.2.2.8 PAGEREF section_2a9bc3f1c66b4be3908a5446c9e1363f66)DOC_PROPERTIES_RSP packet PAGEREF section_cf18eb2665aa478fb064b08ff65dd95a40DOC_PROPS_CALLBACK_REQ PAGEREF section_a9849cbf788c41429c8ffc635dd9ec8268DOC_PROPS_CALLBACK_REQ packet PAGEREF section_f7f3eb21e95c4d9dba2ecb60dc400def48DOC_PROPS_CALLBACK_RSP (section 3.2.5.3.3.2.4 PAGEREF section_2cf029085c7c4ff685df267a521d4c1462, section 3.3.5.2.3.2.4 PAGEREF section_2474ff4c53ae4e7eb5d019465f1bb36e68)DOC_PROPS_CALLBACK_RSP packet PAGEREF section_c76f8a2d734f4b47ab424a4d4e2eec7349Document Properties Callback Request PAGEREF section_b7b95cf9d2474e55ac62d7db506bef5862Document properties UI (section 2.2.4.3.2 PAGEREF section_46063df5cf12474e8cb8d52dbb2ada1947, section 2.2.4.3.2.1 PAGEREF section_e9f754918013403895ffd7aa9d2ce77847, section 3.2.5.3.3.2 PAGEREF section_707768e391024ba6b02d69655c217eb361, section 3.3.5.2.3.2 PAGEREF section_c166c4d56d344cb8b9824d912f136e2067)EExamples PAGEREF section_5d69422d0a5040d4bb4ef4aa78151aab69FFields - vendor-extensible PAGEREF section_b9a3519f2702476ab2de63f28a0f6a7e19FunctionId PAGEREF section_fd40e8bf2fa044de8fd142fe4afd74e054GGET_ALL_DEV_CAPS_REQ (section 3.2.5.3.2.1 PAGEREF section_4fedbec6f72448b4b50d5796b6204bdf59, section 3.3.5.2.2.1 PAGEREF section_e270d2d0f1a341d586efddcb7fed16c865)GET_ALL_DEV_CAPS_REQ packet PAGEREF section_8b871735c85d41d18d02df347e6667e235GET_ALL_DEV_CAPS_RSP (section 3.2.5.3.2.2 PAGEREF section_79412f518320484e8fbaea80bae5093359, section 3.3.5.2.2.2 PAGEREF section_080e4f60b66846649019636c95e099e265)GET_ALL_DEV_CAPS_RSP packet PAGEREF section_a775309cd8844324b1ffc9beddad35dc35GET_DEVICE_CAP_REQ (section 3.2.5.3.2.5 PAGEREF section_b6cd51db4d92441c9900b1db7d5df0e460, section 3.3.5.2.2.5 PAGEREF section_ac874acbf3594557ac8c00b3f0915c6d66)GET_DEVICE_CAP_REQ packet PAGEREF section_584ebca3faad4bb88faa3452aae8545e38GET_DEVICE_CAP_RSP (section 3.2.5.3.2.6 PAGEREF section_e3d2165330d840d7b6d2caecbba2831460, section 3.3.5.2.2.6 PAGEREF section_3d344d0f83ef401e84485a25bee4210b66)GET_DEVICE_CAP_RSP packet PAGEREF section_53c906fd08f44cbfa30c6bd28969d29539GET_SUPPORTED_VERSIONS_REQ (section 3.2.5.2.1.1 PAGEREF section_b7fb1ee2d916402eb50c822586d5d62d57, section 3.3.5.1.1.1 PAGEREF section_d109c03d1d314a0a9e4d298b5d29814f63)GET_SUPPORTED_VERSIONS_REQ packet PAGEREF section_3213b91d7633436598039d01eaf7dda225GET_SUPPORTED_VERSIONS_RSP (section 3.2.5.2.1.2 PAGEREF section_0f48837b828f48f7901bcbc4953feb8957, section 3.3.5.1.1.2 PAGEREF section_b14f40b7cf8a49edae61c8137898805563)GET_SUPPORTED_VERSIONS_RSP packet PAGEREF section_cab9d189473348c794a4bbc8feee478c25Glossary PAGEREF section_9dd0529b655c4545aed79cc1b9f46a8010HHigher-layer triggered events client (section 3.1.4 PAGEREF section_ab040666b09e430a848e2f6bd901719455, section 3.2.4 PAGEREF section_267696dd0f56475aaf6b3fe31b2e6bc156) server (section 3.1.4 PAGEREF section_ab040666b09e430a848e2f6bd901719455, section 3.3.4 PAGEREF section_0c3f0a0b1c194e119b7e40095ee1eb4663)IIFACE_RELEASE packet PAGEREF section_5db96fd4617f432fb4ec58f75564eb0624Implementer - security considerations PAGEREF section_f1c1b9e1496a47158c91f7b8e0efddad80Implementers - security considerations PAGEREF section_f1c1b9e1496a47158c91f7b8e0efddad80Index of security parameters PAGEREF section_a2a553d93927438bbb9b0a1b441fd63780Informative references PAGEREF section_fa2637390c8343b48d6b0ef09dc4ba4411INIT_PRINTER_REQ (section 3.2.5.3.1.1 PAGEREF section_33acc52e019a4cccabdc38252fdc5d8a59, section 3.3.5.2.1.1 PAGEREF section_913ce090d8b84fd19b8eb0a85313e02765)INIT_PRINTER_REQ packet PAGEREF section_633795f3ab0e493980c8fdf5ad475e0b34INIT_PRINTER_RSP (section 3.2.5.3.1.2 PAGEREF section_79d15bf9b0de4a0d90ad68cd1f6e39b459, section 3.3.5.2.1.2 PAGEREF section_049962b6b56e4776836afd41ee5e577065)INIT_PRINTER_RSP packet PAGEREF section_645e3a5497fa46baa12c698c572c33bf35Initialization client (section 3.1.3 PAGEREF section_f3f37a4a7475493680911b31c74ae94c55, section 3.2.3 PAGEREF section_44af8caf56334fcca25ccc55e89a8efd56) server (section 3.1.3 PAGEREF section_f3f37a4a7475493680911b31c74ae94c55, section 3.3.3 PAGEREF section_64e569c1801c42a4ac98ba357eb3da5f63)Initialization messages Printer Driver interface (section 1.3.2.3.1 PAGEREF section_0c63470080e8443880c6361b897ae46216, section 2.2.4.1 PAGEREF section_a8d516a9f8994fdb94e8ec1ec24f02d534, section 3.2.5.3.1 PAGEREF section_51f5feed4f3d450a94e97aec1f4f8a8959, section 3.3.5.2.1 PAGEREF section_fbb13a069e8740979146020e8fa7466165) Printer Ticket interface (section 1.3.2.2.1 PAGEREF section_04d0d8946abd4294ab45f293895d655b14, section 2.2.3.1 PAGEREF section_ea453c12f64c4c40995bd83f47e2d9ed25, section 3.2.5.2.1 PAGEREF section_1b6f9e26b1ac49fc85f0ed919e0e8a3e57, section 3.3.5.1.1 PAGEREF section_d18362f7cdc747aa8dd985c88bb6f9f963)Interface manipulation client (section 3.1.5.2 PAGEREF section_33afb86f9c9f4cd585e5a4c4ed6e13b455, section 3.2.5.1 PAGEREF section_ce1d3265c67441498e096799b3b4d6f257) messages (section 2.2.2 PAGEREF section_ebe401f0f22e4de49cd32a55e549350023, section 2.2.2.1 PAGEREF section_dcf35466de314ee093bbff1b8cc95a9823) overview PAGEREF section_740d81f547b244248493a360032b751413 server PAGEREF section_33afb86f9c9f4cd585e5a4c4ed6e13b455Interface Query (section 1.3.2.1.1 PAGEREF section_e0418e874eb94b0f8af8f07c37dc20fa13, section 2.2.2.1 PAGEREF section_dcf35466de314ee093bbff1b8cc95a9823, section 3.1.5.2.1 PAGEREF section_e4067ded72e94c908d14626f3668322d55, section 3.2.5.1.1 PAGEREF section_1a6ab3405ae04d8283e3f2abf8fe62da57)Interface Release (section 1.3.2.1.2 PAGEREF section_a54941278a63437695f0a3260ee8880213, section 3.1.5.2.2 PAGEREF section_d363bb53e2af4cb1ad99643801f3694356, section 3.1.5.2.2.1 PAGEREF section_ae993b9cb41a4cc9805e0e99f4eea53556)InterfaceId PAGEREF section_fd40e8bf2fa044de8fd142fe4afd74e054Introduction PAGEREF section_4378b290c8cb4072b3d13beefe1cdc4410LLocal events client (section 3.1.7 PAGEREF section_76e55335e1424406bd94c8e21125723256, section 3.2.7 PAGEREF section_cb01cd1d81ba441c989b3501b5e69d9c62) server (section 3.1.7 PAGEREF section_76e55335e1424406bd94c8e21125723256, section 3.3.7 PAGEREF section_44ad8bdcca78448994c7b0ab6842d3c968)MMessage processing client (section 3.1.5 PAGEREF section_9d3aa5462aff4ae09b0364c9ce2a4faf55, section 3.2.5 PAGEREF section_340b4aa3ca924ff5a161e46cf31173e057) server (section 3.1.5 PAGEREF section_9d3aa5462aff4ae09b0364c9ce2a4faf55, section 3.3.5 PAGEREF section_4a5aa7c4b7674c58b01746b7dd2ddde263, section 3.3.5.1 PAGEREF section_ec01682f25d64b2cbd027f84a87202c463)MessageId PAGEREF section_fd40e8bf2fa044de8fd142fe4afd74e054Messages Device Capabilities (TSDEVICE_CAPABILITIES) PAGEREF section_4926fc650af84affbf4c03c3125088da51 interface manipulation (section 2.2.2 PAGEREF section_ebe401f0f22e4de49cd32a55e549350023, section 2.2.2.1 PAGEREF section_dcf35466de314ee093bbff1b8cc95a9823) Printer Driver Interface PAGEREF section_d380ca63ca864b0197f73b866577332834 Printer Property (TSPRINTER_PROPERTY) PAGEREF section_9dc067ba7d304447af2c07e7fe84712352 Printer Ticket Interface PAGEREF section_1b2d327c71074b959a407624f8b798b024 Shared Message Header (SHARED_MSG_HEADER) PAGEREF section_43cc70dfab19430f81998d29e2ce4a4c21 syntax PAGEREF section_d0dd4771c3e046f6a6095a1ecc98e24321 transport PAGEREF section_db7310526d6a48d29c5a9b12acb720f321 XML Document (XML_DOCUMENT) PAGEREF section_94c8e01cbe7f4f41b941a69080b40bd351MOVE_DOC_PROPERTIES_REQ (section 3.2.5.3.3.3 PAGEREF section_ccf3e21113b741bfba23db57ed39d49262, section 3.3.5.2.3.3 PAGEREF section_a9e9db88322a4968930ea35909254ae868)MOVE_DOC_PROPERTIES_REQ packet PAGEREF section_140c402b636244e58eb63d365602844e50MOVE_DOC_PROPERTIES_RSP (section 3.2.5.3.3.4 PAGEREF section_75ea35f9b91d4c16ac8728340a6d958a62, section 3.3.5.2.3.4 PAGEREF section_c020ba23bacf4800aa945154544946ae68)MOVE_DOC_PROPERTIES_RSP packet PAGEREF section_7f25cdd0688741feb75f20dce5f4712650MXDC_GETPDEV_ADJUSTMENT_REQ (section 3.2.5.3.2.9 PAGEREF section_d08e31c80c23435ea4333f1a8acb634761, section 3.3.5.2.2.9 PAGEREF section_ac7f2781ad594c7d975b15019b46fa5c66)MXDC_GETPDEV_ADJUSTMENT_REQ packet PAGEREF section_9bb9a4c68ea94ec09e97e1c528bbcf5042MXDC_GETPDEV_ADJUSTMENT_RSP (section 3.2.5.3.2.10 PAGEREF section_b22eca688db74130b307f695e5e8eb5b61, section 3.3.5.2.2.10 PAGEREF section_2817587fe8d443be938b75b1fb16cfb966)MXDC_GETPDEV_ADJUSTMENT_RSP packet PAGEREF section_daf9fda95d734ad088e854735fe4358b43NNormative references PAGEREF section_cba46c1fee624c68818108fc7750794811OOther local events client PAGEREF section_cb01cd1d81ba441c989b3501b5e69d9c62 server PAGEREF section_44ad8bdcca78448994c7b0ab6842d3c968Overview PAGEREF section_3867f560943342748d9c2575bcc76f3b12Overview (synopsis) PAGEREF section_3867f560943342748d9c2575bcc76f3b12PParameters - security PAGEREF section_a2a553d93927438bbb9b0a1b441fd63780Parameters - security index PAGEREF section_a2a553d93927438bbb9b0a1b441fd63780Preconditions PAGEREF section_c3a517a51c914cf380c61c40fb56c3f619Prerequisites PAGEREF section_c3a517a51c914cf380c61c40fb56c3f619PRINT_CAPS_FROM_PRINT_TKT_REQ (section 3.2.5.2.2.9 PAGEREF section_a7b6fdc720324848b0ad765ae80c897058, section 3.3.5.1.2.9 PAGEREF section_fb3cc73408634a12839a57e0253a348d64)PRINT_CAPS_FROM_PRINT_TKT_REQ packet PAGEREF section_c2327b0dfd934785beb77e88731667a132PRINT_CAPS_FROM_PRINT_TKT_RSP (section 3.2.5.2.2.10 PAGEREF section_b2349504d0c04ddaa6d7bcfa02e2026958, section 3.3.5.1.2.10 PAGEREF section_e92a8d5e40564cb1a94dc567e39e475e65)PRINT_CAPS_FROM_PRINT_TKT_RSP packet PAGEREF section_0bb17ff9e522418d8e51d228a70349e032PRINT_CAPS_REQ PAGEREF section_1b454d7658d34a3ba9e1812bfd5692db64PRINT_CAPS_REQ packet PAGEREF section_b35e01b79a054ef9a64ecf9a88b29ade31PRINT_CAPS_RSP PAGEREF section_fdf90fdbf6e848d9aa41b629b1c5f9bc64PRINT_CAPS_RSP packet PAGEREF section_4521b9cceaed4d2fb4f4773590c8e67231PRINT_TKT_TO_DEVMODE_REQ (section 3.2.5.2.2.3 PAGEREF section_4b65caf30c2947d4a1ee97c84856855258, section 3.3.5.1.2.3 PAGEREF section_00f643334d0c4e41915aec0df03ceb1a64)PRINT_TKT_TO_DEVMODE_REQ packet PAGEREF section_6575562af9914ffabc4faad88437600828PRINT_TKT_TO_DEVMODE_RSP (section 3.2.5.2.2.4 PAGEREF section_2503107c662e4eacb1db645d18d0f17158, section 3.3.5.1.2.4 PAGEREF section_382b23ff528246408286a58745e3ad0564)PRINT_TKT_TO_DEVMODE_RSP packet PAGEREF section_57e5206c22ed4ecb8fdf98ac5be49e5a29Printer Driver interface capability negotiation messages (section 1.3.2.3.2 PAGEREF section_a9de6afe183c4dc48db4d377e4f3858e16, section 2.2.4.2 PAGEREF section_bac57a0488024e0d9f73bb5a8e3fd1de35, section 3.2.5.3.2 PAGEREF section_ed6a7cc72ff94b8982182bb35ca642e259, section 3.3.5.2.2 PAGEREF section_a14bce76801d466ab5f280cc48a6b47465) client (section 3.2.5.3 PAGEREF section_57e3409ddce94cde9d8a6d80097a080259, section 3.3.5.2 PAGEREF section_b855a157914947fcb37ccdb826ef996f65, section 3.3.5.2.1 PAGEREF section_fbb13a069e8740979146020e8fa7466165) initialization messages (section 1.3.2.3.1 PAGEREF section_0c63470080e8443880c6361b897ae46216, section 2.2.4.1 PAGEREF section_a8d516a9f8994fdb94e8ec1ec24f02d534, section 3.2.5.3.1 PAGEREF section_51f5feed4f3d450a94e97aec1f4f8a8959, section 3.3.5.2.1 PAGEREF section_fbb13a069e8740979146020e8fa7466165) messages PAGEREF section_d380ca63ca864b0197f73b866577332834 overview PAGEREF section_9605c936119c4d8bbc489f174f3d227e14 user interface messages (section 1.3.2.3.3 PAGEREF section_ffc19f503b3c4f24bc2bd621e42747fe17, section 2.2.4.3 PAGEREF section_81923e7a18314713a812d74ff7886c5843, section 3.2.5.3.3 PAGEREF section_67a92d4994744ee39fee89c51ca051dc61, section 3.3.5.2.3 PAGEREF section_ba705c93e264411bb7ba86222485ca2d67)Printer Driver Interface message PAGEREF section_d380ca63ca864b0197f73b866577332834Printer Properties Callback Request PAGEREF section_6bd5fdebc79a4fbe82c828f1a0fbddda61Printer Properties Callback Response PAGEREF section_6297fb60cf0843a3a281bbe8500ccb5561Printer properties UI (section 2.2.4.3.1 PAGEREF section_5f4f160bc43245b08b6d419f3078bc0743, section 2.2.4.3.1.1 PAGEREF section_d57e63d980f04722ad7e8bacb7ad78c644, section 3.2.5.3.3.1 PAGEREF section_37cc70d9530448929fa0e5f8ba3b20de61, section 3.3.5.2.3.1 PAGEREF section_4854f4726b1247509eff9973a5a15c6767)Printer Property (TSPRINTER_PROPERTY) message PAGEREF section_9dc067ba7d304447af2c07e7fe84712352Printer Ticket interface capability negotiation messages (section 1.3.2.2.2 PAGEREF section_df274b5e6d1b4bdea3f2d73df59e889814, section 2.2.3.2 PAGEREF section_7c279972ea8642d98f26e4c4696f5f0927, section 3.2.5.2.2 PAGEREF section_308b1fffbd564ed590a5904331ba758257, section 3.3.5.1.2 PAGEREF section_9ac2e01e734a485b9398c48f567471c864) client (section 3.2.5.2 PAGEREF section_e41645a75e3848f5b129a81e99757cde57, section 3.3.5.1 PAGEREF section_ec01682f25d64b2cbd027f84a87202c463) initialization messages (section 1.3.2.2.1 PAGEREF section_04d0d8946abd4294ab45f293895d655b14, section 2.2.3.1 PAGEREF section_ea453c12f64c4c40995bd83f47e2d9ed25, section 3.2.5.2.1 PAGEREF section_1b6f9e26b1ac49fc85f0ed919e0e8a3e57, section 3.3.5.1.1 PAGEREF section_d18362f7cdc747aa8dd985c88bb6f9f963) messages PAGEREF section_1b2d327c71074b959a407624f8b798b024 overview PAGEREF section_f90d29ac94a249f8b7066f5c77a0f21813Printer Ticket Interface message PAGEREF section_1b2d327c71074b959a407624f8b798b024PRINTER_PROPS_CALLBACK_REQ PAGEREF section_6841df926c204ba5ae61d45156b9947867PRINTER_PROPS_CALLBACK_REQ packet PAGEREF section_c93b44393a044b3aa2649689d9944a8d45PRINTER_PROPS_CALLBACK_RSP PAGEREF section_05c32f8d09e049d0badb236e1809652667PRINTER_PROPS_CALLBACK_RSP packet PAGEREF section_921a7032c759442bb2547d263544449045PrintTicket (section 3.2.5.2.2.6 PAGEREF section_e78b9c448200485ba682a32ef114e37558, section 3.2.5.2.2.7 PAGEREF section_6c3a157a24464bd09b4c66164ebf618858, section 3.2.5.2.2.8 PAGEREF section_11596a52ae7944089fee277de4b138d758)Product behavior PAGEREF section_876df242dc51425a96934f19f092236581QQI_REQ packet PAGEREF section_10757445d7dd4602b75f772540c01a5d23QI_RSP packet PAGEREF section_bcf536704db2450ab53e879756ca18a824QUERY_DEV_NS_REQ (section 3.2.5.2.2.1 PAGEREF section_ade6b72a985e40149482389112f3e9b358, section 3.3.5.1.2.1 PAGEREF section_2e4072c3a68d4c8e8b5390222a3f44bb64)QUERY_DEV_NS_REQ packet PAGEREF section_c6bd00a1b68d4a788161d95da5add1e727QUERY_DEV_NS_RSP (section 3.2.5.2.2.2 PAGEREF section_54d14bfd2cec41039df375a90a6324da58, section 3.3.5.1.2.2 PAGEREF section_0782aa19265c416aaf7529d289235e9364)QUERY_DEV_NS_RSP packet PAGEREF section_ee17239f5986467696e813d654460f6d27RReferences PAGEREF section_75715a8a48a54f25930751ad2fc9151011 informative PAGEREF section_fa2637390c8343b48d6b0ef09dc4ba4411 normative PAGEREF section_cba46c1fee624c68818108fc7750794811Relationship to other protocols PAGEREF section_64a03cb1f87a490fbc2d414acf6753f618SSecurity PAGEREF section_a2aa20622a8340ebb4fe0bf1b29fe52c80 implementer considerations PAGEREF section_f1c1b9e1496a47158c91f7b8e0efddad80 parameter index PAGEREF section_a2a553d93927438bbb9b0a1b441fd63780Sequencing rules client (section 3.1.5 PAGEREF section_9d3aa5462aff4ae09b0364c9ce2a4faf55, section 3.2.5 PAGEREF section_340b4aa3ca924ff5a161e46cf31173e057) server (section 3.1.5 PAGEREF section_9d3aa5462aff4ae09b0364c9ce2a4faf55, section 3.3.5 PAGEREF section_4a5aa7c4b7674c58b01746b7dd2ddde263, section 3.3.5.1 PAGEREF section_ec01682f25d64b2cbd027f84a87202c463)Server abstract data model (section 3.1.1 PAGEREF section_fd40e8bf2fa044de8fd142fe4afd74e054, section 3.3.1 PAGEREF section_9ed3643dac0c480ea0d7e4d20b33391163) higher-layer triggered events (section 3.1.4 PAGEREF section_ab040666b09e430a848e2f6bd901719455, section 3.3.4 PAGEREF section_0c3f0a0b1c194e119b7e40095ee1eb4663) initialization (section 3.1.3 PAGEREF section_f3f37a4a7475493680911b31c74ae94c55, section 3.3.3 PAGEREF section_64e569c1801c42a4ac98ba357eb3da5f63) interface manipulation PAGEREF section_33afb86f9c9f4cd585e5a4c4ed6e13b455 local events (section 3.1.7 PAGEREF section_76e55335e1424406bd94c8e21125723256, section 3.3.7 PAGEREF section_44ad8bdcca78448994c7b0ab6842d3c968) message processing (section 3.1.5 PAGEREF section_9d3aa5462aff4ae09b0364c9ce2a4faf55, section 3.3.5 PAGEREF section_4a5aa7c4b7674c58b01746b7dd2ddde263, section 3.3.5.1 PAGEREF section_ec01682f25d64b2cbd027f84a87202c463) other local events PAGEREF section_44ad8bdcca78448994c7b0ab6842d3c968 sequencing rules (section 3.1.5 PAGEREF section_9d3aa5462aff4ae09b0364c9ce2a4faf55, section 3.3.5 PAGEREF section_4a5aa7c4b7674c58b01746b7dd2ddde263, section 3.3.5.1 PAGEREF section_ec01682f25d64b2cbd027f84a87202c463) timer events (section 3.1.6 PAGEREF section_7b135c97205745dc8fe5d86ad626242c56, section 3.3.6 PAGEREF section_e6b7a53753d045cbb052577c9c6dad1268) timers (section 3.1.2 PAGEREF section_dc084ef1ddfb446d9ba1eb5582a0729f54, section 3.3.2 PAGEREF section_27409d5e69ed472cacf8306ed3af1aed63)Shared message header PAGEREF section_903eef7e66a443c28dd6bf641ccf357155Shared Message Header (SHARED_MSG_HEADER) message PAGEREF section_43cc70dfab19430f81998d29e2ce4a4c21SHARED_MSG_HEADER packet PAGEREF section_43cc70dfab19430f81998d29e2ce4a4c21Standards assignments PAGEREF section_7a2a0929d08b45f9b1e0d2163dbee70820Syntax - message PAGEREF section_d0dd4771c3e046f6a6095a1ecc98e24321TTimer events client (section 3.1.6 PAGEREF section_7b135c97205745dc8fe5d86ad626242c56, section 3.2.6 PAGEREF section_8b229825a3d54725a3ed9278e7eea53f62) server (section 3.1.6 PAGEREF section_7b135c97205745dc8fe5d86ad626242c56, section 3.3.6 PAGEREF section_e6b7a53753d045cbb052577c9c6dad1268)Timers client (section 3.1.2 PAGEREF section_dc084ef1ddfb446d9ba1eb5582a0729f54, section 3.2.2 PAGEREF section_0299b4628eda4f67a6bee14a3ce79dd056) server (section 3.1.2 PAGEREF section_dc084ef1ddfb446d9ba1eb5582a0729f54, section 3.3.2 PAGEREF section_27409d5e69ed472cacf8306ed3af1aed63)Tracking changes PAGEREF section_a86b16650912408bb4009a3eec6f2c0f82Transport PAGEREF section_db7310526d6a48d29c5a9b12acb720f321Transport - message PAGEREF section_db7310526d6a48d29c5a9b12acb720f321Triggered events - higher-layer client (section 3.1.4 PAGEREF section_ab040666b09e430a848e2f6bd901719455, section 3.2.4 PAGEREF section_267696dd0f56475aaf6b3fe31b2e6bc156) server (section 3.1.4 PAGEREF section_ab040666b09e430a848e2f6bd901719455, section 3.3.4 PAGEREF section_0c3f0a0b1c194e119b7e40095ee1eb4663)TSDEVICE_CAPABILITIES packet PAGEREF section_4926fc650af84affbf4c03c3125088da51TSPRINTER_PROPERTY packet PAGEREF section_9dc067ba7d304447af2c07e7fe84712352UUser interface messages document properties (section 2.2.4.3.2 PAGEREF section_46063df5cf12474e8cb8d52dbb2ada1947, section 2.2.4.3.2.1 PAGEREF section_e9f754918013403895ffd7aa9d2ce77847) Printer Driver interface (section 1.3.2.3.3 PAGEREF section_ffc19f503b3c4f24bc2bd621e42747fe17, section 2.2.4.3 PAGEREF section_81923e7a18314713a812d74ff7886c5843, section 3.2.5.3.3 PAGEREF section_67a92d4994744ee39fee89c51ca051dc61, section 3.3.5.2.3 PAGEREF section_ba705c93e264411bb7ba86222485ca2d67) printer properties (section 2.2.4.3.1 PAGEREF section_5f4f160bc43245b08b6d419f3078bc0743, section 2.2.4.3.1.1 PAGEREF section_d57e63d980f04722ad7e8bacb7ad78c644)VVALIDATE_PRINT_TKT_REQ (section 3.2.5.2.2.11 PAGEREF section_d66f09f9e2864b7a8a389088e7c8d3ca59, section 3.3.5.1.2.11 PAGEREF section_f8ac2fa2ca1e4c51b3d7584bc630c78d65)VALIDATE_PRINT_TKT_REQ packet PAGEREF section_f5b9ac89fb8a48cb8ae0da5b9342c35333VALIDATE_PRINT_TKT_RSP (section 3.2.5.2.2.12 PAGEREF section_6a59af801e124a5dbc926e81ac2709c259, section 3.3.5.1.2.12 PAGEREF section_efaf07a9911a41e0b85fca5831ac4f7565)VALIDATE_PRINT_TKT_RSP packet PAGEREF section_c433be9081cb4ac3be25a224eb111bc533Vendor-extensible fields PAGEREF section_b9a3519f2702476ab2de63f28a0f6a7e19Versioning PAGEREF section_84707ffd1a494e60ad364543b200723f19XXML Document (XML_DOCUMENT) message PAGEREF section_94c8e01cbe7f4f41b941a69080b40bd351XML Paper Specification (XPS) overview PAGEREF section_69641057f594481ebd7447363a47f92113XML_DOCUMENT packet PAGEREF section_94c8e01cbe7f4f41b941a69080b40bd351 ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download