2.2.3.2 CACTransferBufferV1

The CACTransferBufferV1 structure is used to send and receive messages via MSMQ.

Following is the layout of the CACTransferBufferV1 structure with IDL annotations followed by descriptions of the structure members.

 typedef struct CACTransferBufferV1 {
   [range(0,2)] DWORD uTransferType;
   [switch_is(uTransferType)] union {
     [case(CACTB_SEND)] 
       struct {
       QUEUE_FORMAT* pAdminQueueFormat;
       QUEUE_FORMAT* pResponseQueueFormat;
     } Send;
     [case(CACTB_RECEIVE)] 
       struct {
       DWORD RequestTimeout;
       DWORD Action;
       DWORD Asynchronous;
       DWORD Cursor;
       [range(0,1024)] DWORD ulResponseFormatNameLen;
       [size_is(,ulResponseFormatNameLen)] 
         WCHAR** ppResponseFormatName;
       DWORD* pulResponseFormatNameLenProp;
       [range(0,1024)] DWORD ulAdminFormatNameLen;
       [size_is(,ulAdminFormatNameLen)] 
         WCHAR** ppAdminFormatName;
       DWORD* pulAdminFormatNameLenProp;
       [range(0,1024)] DWORD ulDestFormatNameLen;
       [size_is(,ulDestFormatNameLen)] 
         WCHAR** ppDestFormatName;
       DWORD* pulDestFormatNameLenProp;
       [range(0,1024)] DWORD ulOrderingFormatNameLen;
       [size_is(,ulOrderingFormatNameLen)] 
         WCHAR** ppOrderingFormatName;
       DWORD* pulOrderingFormatNameLenProp;
     } Receive;
     [case(CACTB_CREATECURSOR)] 
       struct CACCreateRemoteCursor CreateCursor;
   };
   unsigned short* pClass;
   OBJECTID** ppMessageID;
   [size_is(,20), length_is(,20)] unsigned char** ppCorrelationID;
   DWORD* pSentTime;
   DWORD* pArrivedTime;
   unsigned char* pPriority;
   unsigned char* pDelivery;
   unsigned char* pAcknowledge;
   unsigned char* pAuditing;
   DWORD* pApplicationTag;
   [size_is(,ulAllocBodyBufferInBytes), length_is(,ulBodyBufferSizeInBytes)] 
     unsigned char** ppBody;
   DWORD ulBodyBufferSizeInBytes;
   DWORD ulAllocBodyBufferInBytes;
   DWORD* pBodySize;
   [size_is(,ulTitleBufferSizeInWCHARs), length_is(,ulTitleBufferSizeInWCHARs)] 
     WCHAR** ppTitle;
   DWORD ulTitleBufferSizeInWCHARs;
   DWORD* pulTitleBufferSizeInWCHARs;
   DWORD ulAbsoluteTimeToQueue;
   DWORD* pulRelativeTimeToQueue;
   DWORD ulRelativeTimeToLive;
   DWORD* pulRelativeTimeToLive;
   unsigned char* pTrace;
   DWORD* pulSenderIDType;
   [size_is(,uSenderIDLen)] unsigned char** ppSenderID;
   DWORD* pulSenderIDLenProp;
   DWORD* pulPrivLevel;
   DWORD ulAuthLevel;
   unsigned char* pAuthenticated;
   DWORD* pulHashAlg;
   DWORD* pulEncryptAlg;
   [size_is(,ulSenderCertLen)] unsigned char** ppSenderCert;
   DWORD ulSenderCertLen;
   DWORD* pulSenderCertLenProp;
   [size_is(,ulProvNameLen)] WCHAR** ppwcsProvName;
   DWORD ulProvNameLen;
   DWORD* pulAuthProvNameLenProp;
   DWORD* pulProvType;
   long fDefaultProvider;
   [size_is(,ulSymmKeysSize)] unsigned char** ppSymmKeys;
   DWORD ulSymmKeysSize;
   DWORD* pulSymmKeysSizeProp;
   unsigned char bEncrypted;
   unsigned char bAuthenticated;
   unsigned short uSenderIDLen;
   [size_is(,ulSignatureSize)] unsigned char** ppSignature;
   DWORD ulSignatureSize;
   DWORD* pulSignatureSizeProp;
   GUID** ppSrcQMID;
   XACTUOW* pUow;
   [size_is(,ulMsgExtensionBufferInBytes), length_is(,ulMsgExtensionBufferInBytes)] 
     unsigned char** ppMsgExtension;
   DWORD ulMsgExtensionBufferInBytes;
   DWORD* pMsgExtensionSize;
   GUID** ppConnectorType;
   DWORD* pulBodyType;
   DWORD* pulVersion;
 } CACTransferBufferV1;

uTransferType: The uTransferType member specifies which of the Send, Receive, or CreateCursor union members is present in the CACTransferBufferV1 structure. The uTransferType member MUST be assigned a value from the TRANSFER_TYPE (section 2.2.2.1) enumeration.

Send: The Send structure is present in the CACTransferBufferV1 structure when the value of the uTransferType member is 0x00000000 (CACTB_SEND). The Send structure is defined inline to the CACTransferBufferV1 structure. The Send structure members are defined as follows:

pAdminQueueFormat: The pAdminQueueFormat member is a QUEUE_FORMAT ([MS-MQMQ] section 2.2.7) structure. If present, the pAdminQueueFormat member describes the administration queue that is to be used for send operation acknowledgments.

pResponseQueueFormat: The pResponseQueueFormat member is a QUEUE_FORMAT structure. If present, the pResponseQueueFormat member describes the queue that is to be used for application-specific responses. As an application-specific value, this field SHOULD be ignored by the server.

Receive: The Receive structure is present in the CACTransferBufferV1 structure when the value of the uTransferType member is 0x00000001 (CACTB_RECEIVE). The Receive structure is defined inline to the CACTransferBufferV1 structure. The Receive structure members are defined as follows:

RequestTimeout: The RequestTimeout member specifies the amount of time (in milliseconds) to wait for a message to be returned before returning a failure.

Action: The Action member specifies the type of receive operation that is to be performed. The Action member MUST specify one of the values: 0x00000000 (MQ_ACTION_RECEIVE), 0x80000000 (MQ_ACTION_PEEK_CURRENT), or 0x80000001 (MQ_ACTION_PEEK_NEXT).

Name

Value

MQ_ACTION_RECEIVE

0x00000000

MQ_ACTION_PEEK_CURRENT

0x80000000

MQ_ACTION_PEEK_NEXT

0x80000001

Asynchronous: The Asynchronous member is used as a Boolean variable to indicate if the receive is to be performed asynchronously. An Asynchronous member value of 0x00000000 SHOULD be interpreted as specifying FALSE (receive operation is not to be performed asynchronously) and all other values SHOULD be interpreted as TRUE (receive operation is to be performed asynchronously).<4>

Cursor: A cursor handle obtained from rpc_ACCreateCursorEx (section 3.1.5.4). A cursor can be used to reference a specific position within the message queue, rather than the first message in the queue, from which the message will be retrieved.

ulResponseFormatNameLen: The ulResponseFormatNameLen member specifies the size (in count of Unicode characters) of the string allocated for the ppResponseFormatName member. The ulResponseFormatNameLen member MUST have a value in the range of 0 to 1024, inclusive.

ppResponseFormatName: A null-terminated Unicode string containing a format name (as specified in [MS-MQMQ]) which indicates an application-defined queue which can be used for response messages. This value is used only by MSMQ applications, and it MUST be ignored by MSMQ queue managers.

pulResponseFormatNameLenProp: The pulResponseFormatNameLenProp member specifies the size (in count of Unicode characters) of the string contained in the ppResponseFormatName member.

ulAdminFormatNameLen: The ulAdminFormatNameLen member specifies the size (in count of Unicode characters) of the string allocated for the ppAdminFormatName member. The ulAdminFormatNameLen member MUST have a value in the range of 0 to 1024, inclusive.

ppAdminFormatName: A null-terminated Unicode string containing a format name (as specified in [MS-MQMQ]) which indicates an application-defined administration queue to which acknowledgment messages will be directed.

pulAdminFormatNameLenProp: The pulAdminFormatNameLenProp member specifies the size (in count of Unicode characters) of the string contained in the ppAdminFormatName member.

ulDestFormatNameLen: The ulDestFormatNameLen member specifies the size (in count of Unicode characters) of the string allocated for the ppDestFormatName member. The ulDestFormatNameLen member MUST have a value in the range of 0 to 1024, inclusive.

ppDestFormatName: A null-terminated Unicode string containing a format name (as specified in [MS-MQMQ]) that indicates the name of a message's destination queue.

pulDestFormatNameLenProp: The pulDestFormatNameLenProp member specifies the size (in count of Unicode characters) of the string contained in the ppDestFormatName member.

ulOrderingFormatNameLen: The ulOrderingFormatNameLen member specifies the size (in count of Unicode characters) of the string allocated for the ppOrderingFormatName member. The ulOrderingFormatNameLen member MUST have a value in the range of 0 to 1024, inclusive.

ppOrderingFormatName: A null-terminated Unicode string containing a format name (as specified in [MS-MQMQ]) that indicates the name of the MSMQ order queue that tracks the ordering of transactional messages.

pulOrderingFormatNameLenProp: The pulOrderingFormatNameLenProp member specifies the size (in count of Unicode characters) of the string contained in the ppOrderingFormatName member.

CreateCursor: The CreateCursor member contains information for creating a cursor which is used when receiving messages from a queue. The CreateCursor member is present in the CACTransferBufferV1 structure when the value of the uTransferType member is 0x00000002 (CACTB_CREATECURSOR). The CreateCursor member is not used by any of the methods defined by the qmcomm and qmcomm2 interfaces.

pClass: This field indicates the message classification, such as a positive acknowledgment, a system-generated report message, or a normal application-generated message. It contains a 16-bit structure as defined below:

0

1

2

3

4

5

6

7

8

9

1 0

1

2

3

4

5

Class Code

Reserved

H

R

S

Value

Meaning

Class Code

0x00 — 0xFF

Specifies the type of the acknowledgment. This field uniquely classifies the message type within the groupings defined by the fields described above. If the H bit is set, this field contains an HTTP status code.

Reserved

0x0000

MUST be set to all zeros. Clients and servers MUST ignore the Reserved member.

H

0 — 1

Specifies whether or not HTTP is being used. A value of 0 MUST be used to specify that HTTP is not being used. A value of 1 MUST be used to specify that HTTP is being used. If 1, the Class Code field contains an HTTP status code.

R

0 — 1

Specifies the stage at which the acknowledgment is to occur. A value of 0 MUST be used to specify that the acknowledgment is for the delivery (arrival) stage. A value of 1 MUST be used to specify that the acknowledgment is for the receive stage.

S

0 — 1

Specifies the type of acknowledgment. A value of 0 MUST be used to specify that normal (positive acknowledgment) message processing has occurred. A value of 1 MUST be used to specify that abnormal (negative acknowledgment) message processing has occurred.

The following table provides correspondence between the message class values defined in [MS-MQMQ] section 2.2.18.1.6 with the abstract message class types defined in [MS-MQDMPR] section 3.1.1.12.

Message Class Value

Message Class Type

MQMSG_CLASS_NORMAL

0x0000

Normal

MQMSG_CLASS_REPORT

0x0001

Report

MQMSG_CLASS_ACK_REACH_QUEUE

0x0002

AckReachQueue

MQMSG_CLASS_ACK_RECEIVE

0x4000

AckReceive

MQMSG_CLASS_NACK_BAD_DST_Q

0x8000

NackBadDestQueue

MQMSG_CLASS_NACK_DELETED

0x8001

NackPurged

MQMSG_CLASS_NACK_REACH_QUEUE_TIMEOUT

0x8002

NackReachQueueTimeout

MQMSG_CLASS_NACK_Q_EXCEED_QUOTA

0x8003

NackQueueExceedQuota

MQMSG_CLASS_NACK_ACCESS_DENIED

0x8004

NackAccessDenied

MQMSG_CLASS_NACK_HOP_COUNT_EXCEEDED

0x8005

NackHopCountExceeded

MQMSG_CLASS_NACK_BAD_SIGNATURE

0x8006

NackBadSignature

MQMSG_CLASS_NACK_BAD_ENCRYPTION

0x8007

NackBadEncryption

MQMSG_CLASS_NACK_NOT_TRANSACTIONAL_Q

0x8009

NackNotTransactionalQueue

MQMSG_CLASS_NACK_NOT_TRANSACTIONAL_MSG

0x800a

NackNotTransactionalMessage

MQMSG_CLASS_NACK_UNSUPPORTED_CRYPTO_PROVIDER

0x800b

NackUnsupportedCryptoProvider

MQMSG_CLASS_NACK_Q_DELETED

0xc000

NackQueueDeleted

MQMSG_CLASS_NACK_Q_PURGED

0xc001

NackQueuePurged

MQMSG_CLASS_NACK_RECEIVE_TIMEOUT

0xc002

NackReceiveTimeout

MQMSG_CLASS_NACK_RECEIVE_REJECTED

0xc004

NackReceiveRejected

ppMessageID: The ppMessageID member, if present, specifies a value that can be used to correlate response messages to sent messages.

ppCorrelationID: If present, the ppCorrelationID member is an array of bytes containing an OBJECTID structure (as specified in [MS-MQMQ] section 2.2.8). The ppCorrelationID member, if present, contains a value copied from the ppMessageID member of a previous request and can be used to correlate responses with previously sent messages. The size (in count of bytes) of ppCorrelationID MUST NOT exceed 20.

pSentTime: The pSentTime member is formatted in UTC. The pSentTime member specifies the time that the message was sent.

pArrivedTime: The pArrivedTime member is formatted in UTC. The pArrivedTime member specifies the time the message was received.

pPriority: The pPriority member is a single byte. The pPriority member specifies the processing priority for the message with larger values indicating a higher priority. The byte value MUST be in the range of 0x00 to 0x07. If no priority is set, the default priority value of 0x03 is used. The pPriority member is ignored for transactional messages. Messages that are not part of a transaction will be processed in arrival sequence within priority. The pPriority member is ignored if the message is a part of a transaction.

pDelivery: The pDelivery member is a single byte. The pDelivery member MUST specify a value of 0x00 or 0x01.

Value

Meaning

0x00

A value of 0x00 specifies that the message is not recoverable. The message can remain in volatile storage and is subject to loss in the event of a system crash. This value corresponds to Message.DeliveryGuarantee.Express as defined in [MS-MQDMPR] section 3.1.1.12.

0x01

A value of 0x01 specifies that the message is recoverable and is to be written to non-volatile storage as it moves through the network to its destination and can survive a system crash. Recoverable messages do not have to be part of a transaction. This value corresponds to Message.DeliveryGuarantee.Recoverable as defined in [MS-MQDMPR] section 3.1.1.12.

pAcknowledge: The pAcknowledge member is a single byte. The pAcknowledge member value specifies the types of acknowledgment messages that are to be generated for this message. Acknowledgment messages are returned in the administration queue. The pAcknowledge member value MUST be assigned from the following list:

Value

Meaning

MQMSG_ACKNOWLEDGMENT_NONE

0x00

No acknowledgment needed. This value corresponds to Message.AcknowledgementsRequested.None as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_ACKNOWLEDGMENT_POS_ARRIVAL

0x01

Positive acknowledgment is to be sent when the message is placed in the destination queue. This value corresponds to Message.AcknowledgementsRequested.AckPosArrival as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_ACKNOWLEDGMENT_POS_RECEIVE

0x02

Positive acknowledgment is to be sent when the message is received from the destination queue. This value corresponds to Message.AcknowledgementsRequested.AckPosReceive as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_ACKNOWLEDGMENT_NEG_ARRIVAL

0x04

Negative acknowledgment is to be sent when the message fails to arrive at the destination queue. This value corresponds to Message.AcknowledgementsRequested.AckNegArrival as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_ACKNOWLEDGMENT_NACK_REACH_QUEUE

0x04

Negative acknowledgment is to be sent when the message fails to arrive at the destination queue. This value corresponds to Message.AcknowledgementsRequested.AckNegArrival as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_ACKNOWLEDGMENT_FULL_REACH_QUEUE

0x05

Positive acknowledgment is to be sent when the message is placed in the destination queue and/or negative acknowledgment is to be sent when the message fails to arrive at the destination queue. This value corresponds to a combination of Message.AcknowledgementsRequested.AckPosArrival and AckNegArrival as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_ACKNOWLEDGMENT_NEG_RECEIVE

0x08

Negative acknowledgment is to be sent when the message fails to be received from the destination queue. This value corresponds to Message.AcknowledgementsRequested.AckNegReceive as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_ACKNOWLEDGMENT_NACK_RECEIVE

0x0C

Negative acknowledgment is to be sent when the message fails to arrive at the destination queue or when a receive for the message from the destination queue fails. This value corresponds to a combination of Message.AcknowledgementsRequested.AckNegReceive and AckNegArrival as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_ACKNOWLEDGMENT_FULL_RECEIVE

0x0E

Positive acknowledgment is to be sent when the message is received from the destination queue and a negative acknowledgment is to be sent when the message fails to arrive at the destination queue or a negative acknowledgment is to be sent when a receive for the message from the destination queue fails. This value corresponds to a combination of Message.AcknowledgementsRequested.AckNegReceive, AckNegArrival, and AckPosReceive as defined in [MS-MQDMPR] section 3.1.1.12.

pAuditing: The pAuditing member is a single byte. The pAuditing member value specifies the conditions under which copies of the message are to be stored as the message is routed to the destination queue. The pAuditing member value MUST be assigned from the following list:

Value

Meaning

MQMSG_JOURNAL_NONE

0x00

Do not store copies. This value corresponds to a Message.PositiveJournalingRequested value of False and a Message.NegativeJournalingRequested value of False, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_DEADLETTER

0x01

Store copy in dead-letter queue on failure. This value corresponds to a Message.PositiveJournalingRequested value of False and a Message.NegativeJournalingRequested value of True, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_JOURNAL

0x02

Store copy in queue journal upon successful delivery to next computer. This value corresponds to a Message.PositiveJournalingRequested value of True and a Message.NegativeJournalingRequested value of False, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_DEADLETTER|MQMSG_JOURNAL

0x03

Store copy in queue journal upon successful delivery to next computer. Store copy in dead-letter queue on failure. This value corresponds to a Message.PositiveJournalingRequested value of True and a Message.NegativeJournalingRequested value of True, as defined in [MS-MQDMPR] section 3.1.1.12.

pApplicationTag: The pApplicationTag member value is a user-provided item that is passed through unmodified to the message-receiving application. A common use of the pApplicationTag member value is to indicate to the receiving application the type of data contained in the ppMsgExtension member.

ppBody: The ppBody member is an array of bytes. When the ppBody member is present it contains the user message payload.

ulBodyBufferSizeInBytes: The ulBodyBufferSizeInBytes member specifies the size (in count of bytes) of the data present in the ppBody member. The value of the ulBodyBufferSizeInBytes member MUST be less than or equal to the value in the ulAllocBodyBufferInBytes member.

ulAllocBodyBufferInBytes: The ulAllocBodyBufferInBytes member specifies the size (in count of bytes) of the buffer that is allocated to contain the ppBody member.

pBodySize: The pBodySize member specifies the size (in count of bytes) of the data present in the ppBody member after an encryption or decryption operation has been performed on the ppBody member. The value of the pBodySize member MUST be less than or equal to the value in the ulAllocBodyBufferInBytes member.

ppTitle: The ppTitle member, when present, is a Unicode string. The ppTitle member specifies a title associated with the message.

ulTitleBufferSizeInWCHARs: The ulTitleBufferSizeInWCHARs member specifies the size (in count of Unicode characters) of the ppTitle member. The ulTitleBufferSizeInWCHARs member MUST NOT exceed 250.

pulTitleBufferSizeInWCHARs: The pulTitleBufferSizeInWCHARs member specifies the actual size (in count of Unicode characters) of the string, if present, in the ppTitle member Unicode string.

ulAbsoluteTimeToQueue: The ulAbsoluteTimeToQueue member value provided by the client specifies the number of seconds within which the message MUST reach the destination queue or be discarded. Internally, ulAbsoluteTimeToQueue is converted to a UTC time using the clock of the system on which the queue manager is executing.

pulRelativeTimeToQueue: The pulRelativeTimeToQueue member specifies the number of seconds within which the response message MUST reach the destination queue or be discarded.

ulRelativeTimeToLive: The ulRelativeTimeToLive member value specifies the number of seconds within which the message MUST be received from the destination queue or be discarded. Internally, ulRelativeTimeToLive is converted to a UTC time using the clock of the system on which the queue manager is executing.

pulRelativeTimeToLive: The pulRelativeTimeToLive member specifies the number of seconds remaining before the response message will be discarded if it is not received from the destination queue.

pTrace: The pTrace member MUST be a single byte and indicates whether or not tracing is active.

Value

Meaning

0x00

A value of 0x00 MUST be used to specify that tracing is not active. This value corresponds to Message.TracingRequested value of False, as defined in [MS-MQDMPR] section 3.1.1.12.

0x01

A value of 0x01 MUST be used to specify that tracing is active. This value corresponds to Message.TracingRequested value of True, as defined in [MS-MQDMPR] section 3.1.1.12.

pulSenderIDType: The pulSenderIDType member specifies the type of the ppSenderID member contents. The pulSenderIDType member value MUST be assigned from the following list:

Value

Meaning

MQMSG_SENDERID_TYPE_NONE

0x00000000

No sender ID is present. This value corresponds to Message.SenderIdentifierType value of None, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_SENDERID_TYPE_SID

0x00000001

The sender ID is a SID. This value corresponds to Message.SenderIdentifierType value of Sid, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_SENDERID_TYPE_QM

0x00000002

The sender ID is the GUID assigned to a queue manager. This value corresponds to Message.SenderIdentifierType value of QueueManagerIdentifier, as defined in [MS-MQDMPR] section 3.1.1.12.

ppSenderID: The ppSenderID member MUST be an array of bytes. When the value of the pulSenderIDType member is 0x00000000 (MQMSG_SENDERID_TYPE_NONE), the ppSenderID member MUST NOT be present. If the value of the pulSenderIDType member is 0x00000001 (MQMSG_SENDERID_TYPE_SID), the ppSenderID member MUST contain a SID. If the value of the pulSenderIDType member is 0x00000002 (MQMSG_SENDERID_TYPE_QM), the ppSenderID member MUST contain a valid MSMQ Site GUID.

pulSenderIDLenProp: The pulSenderIDLenProp member specifies the size (in count of bytes) of the data present in the ppSenderID member.

pulPrivLevel: The pulPrivLevel member specifies the privacy level that is used for processing the message. The pulPrivLevel member value MUST be assigned from the following list:

Value

Meaning

MQMSG_PRIV_LEVEL_NONE

0x00000000

The message is not private. This value corresponds to Message.PrivacyLevel value of None, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_PRIV_LEVEL_BODY_BASE

0x00000001

The message is private and the Cryptographic Service Provider (CSP) will use a 40-bit encryption key to encrypt and decrypt the message body. This value corresponds to Message.PrivacyLevel value of Base, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_PRIV_LEVEL_BODY_ENHANCED

0x00000002

The message is private and the CSP will use a 128-bit encryption key to encrypt and decrypt the message body. This value corresponds to Message.PrivacyLevel value of Enhanced, as defined in [MS-MQDMPR] section 3.1.1.12.

ulAuthLevel: The ulAuthLevel member is used only in local interprocess communication and therefore has no meaning when this protocol is used over a network. Servers MUST ignore this field, and clients can specify any value.

pAuthenticated: The pAuthenticated member is a single byte. The pAuthenticated member value is used to determine the level of authentication that has been performed on the message. The pAuthenticated member value MUST be assigned from the following list:

Value

Meaning

MQMSG_AUTHENTICATION_NOT_REQUESTED

0x00

Authentication has not been performed. This value corresponds to Message.AuthenticationLevel value of None, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_AUTHENTICATED_SIG10

0x01

Authentication has been performed using an MSMQ 1.0 digital signature. This value corresponds to Message.AuthenticationLevel value of Sig10, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_AUTHENTICATED_SIG20

0x03

Authentication has been performed using an MSMQ 2.0 digital signature. This value corresponds to Message.AuthenticationLevel value of Sig20, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_AUTHENTICATED_SIG30

0x05

Authentication has been performed using an MSMQ 3.0 digital signature. This value corresponds to Message.AuthenticationLevel value of Sig30, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_AUTHENTICATED_SIGXML

0x09

Authentication has been performed using an XML digital signature. This value corresponds to Message.AuthenticationLevel value of XMLSig, as defined in [MS-MQDMPR] section 3.1.1.12.

pulHashAlg: The pulHashAlg member specifies the hashing algorithm that is to be used in the digital signing process and by the authentication process. The pulHashAlg member value MUST be assigned from the following list:

Value

Meaning

MQMSG_CALG_MD2

0x00008001

Use the MD2 algorithm as specified in [RFC1319]. This value corresponds to the Message.HashAlgorithm value of MD2, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_CALG_MD4

0x00008002

Use the MD4 algorithm as specified in [RFC1320]. This value corresponds to the Message.HashAlgorithm value of MD4, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_CALG_MD5

0x00008003

Use the MD5 algorithm as specified in [RFC1321]. This value corresponds to the Message.HashAlgorithm value of MD5, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_CALG_SHA1

0x00008004

Use the SHA-1 algorithm as specified in [RFC3174]. This value corresponds to the Message.HashAlgorithm value of SHA1, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_CALG_SHA_256

 0x0000800C

Use the SHA-256 algorithm, as specified in [FIPS180-2]. This value corresponds to the Message.HashAlgorithm value of SHA_256, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_CALG_SHA_512

0x0000800E

Use the SHA-512 algorithm, as specified in [FIPS180-2]. This value corresponds to the Message.HashAlgorithm value of SHA_512, as defined in [MS-MQDMPR] section 3.1.1.12.

pulEncryptAlg: The pulEncryptAlg member specifies that the encryption algorithm is to be used to encrypt and decrypt the message body. The pulEncryptAlg member value MUST be assigned from the following list:

Value

Meaning

MQMSG_CALG_RC2

0x00006602

Use the RC2 encryption algorithm as specified in [RFC2268]. This value corresponds to Message.EncryptionAlgorithm value of RC2, as defined in [MS-MQDMPR] section 3.1.1.12.

MQMSG_CALG_RC4

0x00006801

Use the RC4 encryption algorithm as specified in [RC4]. This value corresponds to Message.EncryptionAlgorithm value of RC4, as defined in [MS-MQDMPR] section 3.1.1.12.

ppSenderCert: The ppSenderCert member is an array of bytes. If not NULL, the ppSenderCert member MUST contain the message sender's X509 certificate. The byte length of the buffer MUST be indicated by ulSenderCertLen.

ulSenderCertLen: The ulSenderCertLen member specifies the byte length of the certificate contained in ppSenderCert.

pulSenderCertLenProp: The pulSenderCertLenProp member specifies the length (in count of bytes) of the certificate contained in ppSenderCert.

ppwcsProvName: The ppwcsProvName member is a Unicode string. If present, the ppwcsProvName member specifies the name of the Cryptographic Service Provider (CSP) that is used to generate digital signatures for the message.

ulProvNameLen: The ulProvNameLen member specifies the size (in count of Unicode characters) of the buffer that was allocated to contain the ppwcsProvName string.

pulAuthProvNameLenProp: The pulAuthProvNameLenProp member specifies the size (in count of Unicode characters) of the CSP name contained in ppwcsProvName, plus the size of an enhanced signature appended to the ppSignature buffer. Rules for computing and understanding values for this field are defined in sections 3.1.5.3 and 3.1.5.4.

pulProvType: The pulProvType member specifies the type of CSP that is named by ppwcsProvName.

fDefaultProvider: The fDefaultProvider member specifies if the CSP named by ppwcsProvName is a default CSP. A value of 0x00000000 MUST be used to specify that the ppwcsProvName is not the default name and all other values MUST be interpreted as specifying that the ppwcsProvName is the default name.

ppSymmKeys: The ppSymmKeys member is an array of bytes. The ppSymmKeys member, if present, contains an encrypted symmetric key.

ulSymmKeysSize: The ulSymmKeysSize member specifies the size (in count of bytes) of the buffer that was allocated to contain the ppSymmKeys member.

pulSymmKeysSizeProp: The pulSymmKeysSizeProp member specifies the size (in count of bytes) of the ppSymmKeys member.

bEncrypted: The bEncrypted member is a single byte. The bEncrypted member specifies if the message body is encrypted or is not encrypted. A bEncrypted member value of 0x00 MUST be interpreted as specifying that the message is not encrypted (FALSE) and all other values MUST be interpreted as specifying that the message is encrypted (TRUE).

bAuthenticated: The bAuthenticated member is a single byte. The bAuthenticated member specifies if the message has been authenticated or has not been authenticated. A bAuthenticated member value of 0x00 MUST be used to specify that the message has not been authenticated (FALSE) and all other values MUST be interpreted as specifying that the message has been authenticated (TRUE).

uSenderIDLen: The uSenderIDLen member specifies the maximum size (in count of bytes) that is available to contain data in the ppSenderID member.

ppSignature: The ppSignature member is an array of bytes. The ppSignature member contains the signature(s) used to authenticate the message.<5>

ulSignatureSize: The ulSignatureSize member specifies the size (in count of bytes) allocated to hold the ppSignature member.

pulSignatureSizeProp: The pulSignatureSizeProp member specifies the size (in count of bytes) of the authentication signature(s) in the ppSignature member.

ppSrcQMID: The ppSrcQMID member is a GUID. The member contains the GUID assigned to the MSMQ installation that is the source of the message.

pUow: The pUow member is an XACTUOW structure ([MS-MQMQ] section 2.2.18.1.8). If not NULL, this field identifies a transaction for a Send or Receive operation.

ppMsgExtension: The ppMsgExtension member is an array of bytes. The ppMsgExtension member, when present, contains application-specific data. The ppMsgExtension member is primarily used to pass information to foreign queues.

ulMsgExtensionBufferInBytes: The ulMsgExtensionBufferInBytes member specifies the size (in count of bytes) of the buffer allocated for the ppMsgExtension array.

pMsgExtensionSize: The pMsgExtensionSize member specifies the size (in count of bytes) of the data contained in the ppMsgExtension array.

ppConnectorType: The ppConnectorType member, if present, is a GUID. The ppConnectorType member specifies the identifier of a foreign queue that is used to communicate with a foreign messaging system.

pulBodyType: The pulBodyType member value MUST be one of the valid values allowed for a VARTYPE as specified in [MS-MQMQ] section 2.2.12.

pulVersion: The pulVersion member specifies the MSMQ packet version.<6>