PROPID_M_EXTENSION
Applies To: Windows 10, Windows 7, Windows 8, Windows 8.1, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server Technical Preview, Windows Vista
The PROPID_M_EXTENSION property provides a place to put additional application-defined information (called extension information) that is associated with the message.
Property ID
PROPID_M_EXTENSION
Type Indicator
VT_VECTOR | VT_UI1
MQPROPVARIANT Field
caub
Property Value
Array of bytes
Remarks
Sending Extension Information
To send extension information, specify PROPID_M_EXTENSION in the MQMSGPROPS structure, and call MQSendMessage.
Retrieving Extension Information
To retrieve extension information from a message, specify PROPID_M_EXTENSION and PROPID_M_EXTENSION_LEN in the MQMSGPROPS structure (the length property is used to verify that extension information was sent). Then call MQReceiveMessage or MQReceiveMessageByLookupId and examine the returned values.
If MQReceiveMessage or MQReceiveMessageByLookupId fails, returning an MQ_ERROR_BUFFER_OVERFLOW error, use the returned value of PROPID_M_EXTENSION_LEN to reallocate the extension information buffer and call the applicable function again.
Before using the returned extension information, always check the length property PROPID_M_EXTENSION_LEN to see if extension information was sent. If the returned value of the length property is 0, no information was sent. If the returned value is non-0, PROPID_M_EXTENSION contains extension information.
Equivalent COM Property
With COM components, the equivalent property for setting and retrieving extension information is MSMQMessage.Extension.
For information on | See |
---|---|
Sending or receiving messages from foreign queues | Connector Services |
Testing to see if extension information exists | PROPID_M_EXTENSION_LEN |
Example Code
The following code fragments show how PROPID_M_EXTENSION is specified in arrays that can be used to initialize an MQMSGPROPS structure for sending and retrieving extension information.
To Send Extension Information
aMsgPropId[i] = PROPID_M_EXTENSION; // Property ID
aMsgPropVar[i].vt = VT_VECTOR | VT_UI1; // Type indicator
aMsgPropVar[i].caub.pElems = ExtensionInformation;
aMsgPropVar[i].caub.cElems = sizeof(ExtensionInformation);
i++;
To Retrieve Extension Information
ULONG ulExtInfoBufferSize = 1024;
UCHAR * pucExtInfoBuffer = NULL;
pucExtInfoBuffer = (UCHAR*)malloc(ulExtInfoBufferSize);
if (pucExtInfoBuffer == NULL)
{
return MQ_ERROR_INSUFFICIENT_RESOURCES;
}
memset(pucExtInfoBuffer, 0, ulExtInfoBufferSize);
aMsgPropId[i] = PROPID_M_EXTENSION_LEN; // Property ID
aMsgPropVar[i].vt = VT_NULL; // Type indicator
i++;
aMsgPropId[i] = PROPID_M_EXTENSION; // Property ID
aMsgPropVar[i].vt = VT_VECTOR | VT_UI1; // Type indicator
aMsgPropVar[i].caub.pElems = (UCHAR*)pucExtInfoBuffer;
aMsgPropVar[i].caub.cElems = ulExtInfoBufferSize;
i++;
// Reallocate memory for the extension information buffer if necessary.
ulExtInfoBufferSize = aMsgPropVar[0].ulVal*sizeof(UCHAR);
pucExtInfoBuffer = (UCHAR*)realloc(pucExtInfoBuffer, ulExtInfoBufferSize);
if (pucExtInfoBuffer == NULL)
{
return MQ_ERROR_INSUFFICIENT_RESOURCES;
}
memset(pucExtInfoBuffer, 0, ulExtInfoBufferSize);
aMsgPropVar[1].caub.pElems = (UCHAR*)pucExtInfoBuffer; // Pointer to the new buffer
aMsgPropVar[1].caub.cElems = ulExtInfoBufferSize; // New buffer size
See Also
Message Properties
MQMSGPROPS
MQReceiveMessage
MQReceiveMessageByLookupId
MQSendMessage
MSMQMessage.Extension
PROPID_M_EXTENSION_LEN