[MC-COMQC]:
Component Object Model Plus (COM+) Queued Components Protocol

Intellectual Property Rights Notice for Open Specifications Documentation

§  Technical Documentation. Microsoft publishes Open Specifications documentation for protocols, file formats, languages, standards as well as overviews of the interaction among each of these technologies.

§  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 may make copies of it in order to develop implementations of the technologies described in the Open Specifications and may distribute portions of it in your implementations using these technologies or your documentation as necessary to properly document the implementation. You may also distribute in your implementation, with or without modification, any schema, IDL’s, or code samples that are included in the documentation. This permission also applies to any documents that are referenced in the Open Specifications.

§  No Trade Secrets. Microsoft does not claim any trade secret rights in this documentation.

§  Patents. Microsoft has patents that may cover your implementations of the technologies described in the Open Specifications. Neither this notice nor Microsoft's delivery of the documentation grants any licenses under those or any other Microsoft patents. However, a given Open Specification may be covered by Microsoft Open Specification Promise or the Community Promise. If you would prefer a written license, or if the technologies described in the Open Specifications are not covered by the Open Specifications Promise or Community Promise, as applicable, patent licenses are available by contacting .

§  Trademarks. The names of companies and products contained in this documentation may 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 www.microsoft.com/trademarks.

§  Fictitious Names. The example companies, organizations, products, domain names, email addresses, logos, people, places, and events 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 specifically described above, whether by implication, estoppel, or otherwise.

Tools. The Open Specifications do 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 are intended for use in conjunction with publicly available standard specifications and network programming art, and assumes that the reader either is familiar with the aforementioned material or has immediate access to it.

Revision Summary

Date / Revision History / Revision Class / Comments /
08/10/2007 / 0.1 / Major / Initial Availability
09/28/2007 / 0.2 / Minor / Updated the technical content.
10/23/2007 / 0.2.1 / Editorial / Revised and edited the technical content.
11/30/2007 / 0.3 / Minor / Updates to MS-MQMQ external references.
01/25/2008 / 0.3.1 / Editorial / Revised and edited the technical content.
03/14/2008 / 0.3.2 / Editorial / Revised and edited the technical content.
05/16/2008 / 0.3.3 / Editorial / Revised and edited the technical content.
06/20/2008 / 0.4 / Minor / Updated the technical content.
07/25/2008 / 0.4.1 / Editorial / Revised and edited the technical content.
08/29/2008 / 0.4.2 / Editorial / Revised and edited the technical content.
10/24/2008 / 0.4.3 / Editorial / Revised and edited the technical content.
12/05/2008 / 0.4.4 / Editorial / Revised and edited the technical content.
01/16/2009 / 0.4.5 / Editorial / Revised and edited the technical content.
02/27/2009 / 0.4.6 / Editorial / Revised and edited the technical content.
04/10/2009 / 0.4.7 / Editorial / Revised and edited the technical content.
05/22/2009 / 0.4.8 / Editorial / Revised and edited the technical content.
07/02/2009 / 0.5 / Minor / Updated the technical content.
08/14/2009 / 0.5.1 / Editorial / Revised and edited the technical content.
09/25/2009 / 0.6 / Minor / Updated the technical content.
11/06/2009 / 0.6.1 / Editorial / Revised and edited the technical content.
12/18/2009 / 0.6.2 / Editorial / Revised and edited the technical content.
01/29/2010 / 1.0 / Major / Updated and revised the technical content.
03/12/2010 / 1.0.1 / Editorial / Revised and edited the technical content.
04/23/2010 / 1.0.2 / Editorial / Revised and edited the technical content.
06/04/2010 / 1.0.3 / Editorial / Revised and edited the technical content.
07/16/2010 / 1.0.3 / No change / No changes to the meaning, language, or formatting of the technical content.
08/27/2010 / 1.1 / Minor / Clarified the meaning of the technical content.
10/08/2010 / 1.1 / No change / No changes to the meaning, language, or formatting of the technical content.
11/19/2010 / 1.1 / No change / No changes to the meaning, language, or formatting of the technical content.
01/07/2011 / 2.0 / Major / Significantly changed the technical content.
02/11/2011 / 2.0 / No change / No changes to the meaning, language, or formatting of the technical content.
03/25/2011 / 2.0 / No change / No changes to the meaning, language, or formatting of the technical content.
05/06/2011 / 2.0 / No change / No changes to the meaning, language, or formatting of the technical content.
06/17/2011 / 2.1 / Minor / Clarified the meaning of the technical content.
09/23/2011 / 3.0 / Major / Significantly changed the technical content.
12/16/2011 / 4.0 / Major / Significantly changed the technical content.
03/30/2012 / 4.0 / No change / No changes to the meaning, language, or formatting of the technical content.
07/12/2012 / 4.0 / No change / No changes to the meaning, language, or formatting of the technical content.
10/25/2012 / 5.0 / Major / Significantly changed the technical content.
01/31/2013 / 5.0 / No change / No changes to the meaning, language, or formatting of the technical content.
08/08/2013 / 5.1 / Minor / Clarified the meaning of the technical content.

2/2

[MC-COMQC] — v20130722

Component Object Model Plus (COM+) Queued Components Protocol

Copyright © 2013 Microsoft Corporation.

Release: Monday, July 22, 2013

Contents

1 Introduction 6

1.1 Glossary 6

1.2 References 7

1.2.1 Normative References 7

1.2.2 Informative References 8

1.3 Overview 8

1.3.1 Server Role 8

1.3.2 Client Role 9

1.4 Relationship to Other Protocols 9

1.5 Prerequisites/Preconditions 9

1.6 Applicability Statement 9

1.7 Versioning and Capability Negotiation 9

1.8 Vendor-Extensible Fields 9

1.9 Standards Assignments 9

2 Messages 11

2.1 Transport 11

2.2 Message Syntax 11

2.2.1 Common Header 13

2.2.2 Container Header 14

2.2.2.1 Call Target Identifier 15

2.2.3 Partition Identifier Header 16

2.2.4 Security Header 17

2.2.5 Security Reference Header 18

2.2.6 Method Header 18

2.2.6.1 Marshaled Data 20

2.2.6.1.1 NDR Marshaling 20

2.2.6.1.2 Dispatch Marshaling 20

2.2.6.1.3 Supported Types 20

2.2.6.1.4 Padding of the Marshaled Data 20

2.2.6.1.5 Object References 21

3 Protocol Details 23

3.1 Server Details 23

3.1.1 Abstract Data Model 23

3.1.2 Timers 23

3.1.3 Initialization 23

3.1.4 Higher-Layer Triggered Events 23

3.1.5 Message Processing Events and Sequencing Rules 23

3.1.6 Timer Events 24

3.1.7 Other Local Events 24

3.2 Client Details 24

3.2.1 Abstract Data Model 24

3.2.2 Timers 24

3.2.3 Initialization 24

3.2.4 Higher-Layer Triggered Events 25

3.2.4.1 Application Requesting Interface 25

3.2.4.2 Application Making Method Call 25

3.2.4.3 Application Signaling that Method Calls Are Complete 25

3.2.5 Message Processing Events and Sequencing Rules 25

3.2.6 Timer Events 25

3.2.7 Other Local Events 25

4 Protocol Examples 26

4.1 Client Creating and Sending a Message 26

4.2 Server Retrieving and Processing a Message 26

5 Security 28

5.1 Security Considerations for Implementers 28

5.2 Index of Security Parameters 28

6 Appendix A: Product Behavior 29

7 Change Tracking 30

8 Index 32

2/2

[MC-COMQC] — v20130722

Component Object Model Plus (COM+) Queued Components Protocol

Copyright © 2013 Microsoft Corporation.

Release: Monday, July 22, 2013

1 Introduction

The Component Object Model Plus (COM+) Queued Components Protocol (COMQC) is a protocol for persisting method calls made on COM+ objects in such a way that they can later be played back and executed. The protocol consists of a binary format used to store the information needed to achieve that goal.

Sections 1.8, 2, and 3 of this specification are normative and can contain the terms MAY, SHOULD, MUST, MUST NOT, and SHOULD NOT as defined in RFC 2119. Sections 1.5 and 1.9 are also normative but cannot contain those terms. All other sections and examples in this specification are informative.

1.1 Glossary

The following terms are defined in [MS-GLOS]:

Active Directory
ASCII
client
class identifier (CLSID)
Component Object Model (COM)
globally unique identifier (GUID)
handle
interface
Interface Definition Language (IDL)
interface identifier (IID)
little-endian
marshal
Microsoft Interface Definition Language (MIDL)
Network Data Representation (NDR)
object
object reference
opnum
security context
UTF-16

The following terms are specific to this document:

binary large object (BLOB): A collection of binary data stored in a single continuous block.

message: A data structure that represents a unit of data transfer between distributed applications. A message has message properties, which may include message header properties, a message body property, and message trailer properties.

message body: A distinguished message property that represents the application payload.

message queue: A data structure that contains an ordered list of zero or more messages. A message queue has a head and a tail and supports a first-in-first-out (FIFO) access pattern. Messages are appended to the tail through a write operation (Send) that appends the message. Messages are consumed from the head through a destructive read operation (Receive) that deletes the message. A message at the head may also be read through a nondestructive read operation (Peek).

message queuing: A communications service that provides asynchronous and reliable message passing between distributed client applications. In message queuing, clients send messages to message queues and consume messages from message queues. The message queues provide persistence of the messages, which enables the sending and receiving client applications to operate asynchronously from each other.

MSMQ: The message queuing protocol as defined in [MS-MQMQ].

partition: A container for a specific configuration of a COM+ object class.

partition identifier: A GUID that identifies a partition.

proxy object: A local object that acts as an intermediary between an application and a remote object. The purpose of the proxy object is to monitor the life span of the remote object and to forward calls to the remote object.

workgroup mode: The operation of message queuing without an Active Directory connection. For more information, see [MS-MQOD].

MAY, SHOULD, MUST, SHOULD NOT, MUST NOT: These terms (in all caps) are used as described in [RFC2119]. All statements of optional behavior use either MAY, SHOULD, or SHOULD NOT.

1.2 References

References to Microsoft Open Specifications documentation do not include a publishing year because links are to the latest version of the documents, which are updated frequently. References to other documents include a publishing year when one is available.

A reference marked "(Archived)" means that the reference document was either retired and is no longer being maintained or was replaced with a new document that provides current implementation details. We archive our documents online [Windows Protocol].

1.2.1 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 . We will assist you in finding the relevant information. Please check the archive site, http://msdn2.microsoft.com/en-us/library/E4BD6494-06AD-4aed-9823-445E921C9624, as an additional source.

[C706] The Open Group, "DCE 1.1: Remote Procedure Call", C706, August 1997, http://www.opengroup.org/public/pubs/catalog/c706.htm

[MS-COM] Microsoft Corporation, "Component Object Model Plus (COM+) Protocol".

[MS-DCOM] Microsoft Corporation, "Distributed Component Object Model (DCOM) Remote Protocol".

[MS-DTYP] Microsoft Corporation, "Windows Data Types".

[MS-MQDMPR] Microsoft Corporation, "Message Queuing (MSMQ): Common Data Model and Processing Rules".

[MS-MQMP] Microsoft Corporation, "Message Queuing (MSMQ): Queue Manager Client Protocol".

[MS-MQMQ] Microsoft Corporation, "Message Queuing (MSMQ): Data Structures".

[MS-OAUT] Microsoft Corporation, "OLE Automation Protocol".

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997, http://www.rfc-editor.org/rfc/rfc2119.txt

[RFC4234] Crocker, D., Ed., and Overell, P., "Augmented BNF for Syntax Specifications: ABNF", RFC 4234, October 2005, http://www.ietf.org/rfc/rfc4234.txt

1.2.2 Informative References

[MS-GLOS] Microsoft Corporation, "Windows Protocols Master Glossary".

[MS-MQOD] Microsoft Corporation, "Message Queuing Protocols Overview".

[MSDN-IPersistStream] Microsoft Corporation, "IPersistStream", http://msdn.microsoft.com/en-us/library/ms690091.aspx

1.3 Overview

The Component Object Model Plus (COM+) Queued Components Protocol enables a client to asynchronously invoke methods on a server in scenarios of limited or intermittent connectivity. It does so by writing all the necessary states into a self-contained binary large object (BLOB). That BLOB can be parsed and the method calls be replayed at a later point when it is possible to transmit the data to the recipient. As the BLOB is self-contained, the original creator of the BLOB is not required to be alive or connected for the operation to succeed.

To transmit the BLOB without regard to connectivity, the protocol relies on a message queuing transport. The following figure shows the layering of the protocol stack.

Figure 1: Protocol layering

COMQC is asynchronous and one-way with information flowing exclusively from the client to the server.

1.3.1 Server Role

The server is responsible for receiving COMQC messages and dispatching the recorded method calls.

Each COMQC server is associated with a single COM+ application using COMQC and services messages for all server objects in that COMQC application. Each COMQC server has its own message queue. There can be multiple COMQC servers per machine.

1.3.2 Client Role

The client is responsible for recording method calls, packaging them up into a COMQC message, and transmitting the message to the message queuing infrastructure.