Click to Rate and Give Feedback
MSDN
MSDN Library
Networking
Message Properties
 PROPID_M_PROV_NAME

  Switch on low bandwidth view
Component Automation
PROPID_M_PROV_NAME

The PROPID_M_PROV_NAME property specifies the name of the cryptographic provider used to generate the digital signature attached to the message.

Property ID

PROPID_M_PROV_NAME

Type Indicator

VT_LPWSTR

MQPROPVARIANT Field

pwszVal

Property Value

Unicode string specifying the provider name. For MSMQ 1.0 and MSMQ 2.0, the only supported string is "Microsoft Base Cryptographic Provider, v1.0". For MSMQ 3.0, "Microsoft Enhanced Cryptographic Provider, v1.0" is also supported. In all cases, the default is the name of the base provider.

Remarks

The PROPID_M_PROV_NAME property can be used when working with foreign queues. The name and type (PROPID_M_PROV_TYPE) of the cryptographic provider are required to validate the digital signatures attached to messages sent to a foreign queue or to messages passed to Message Queuing from a foreign messaging system.

To send the name of the cryptographic provider with the message, specify PROPID_M_PROV_NAME and PROPID_M_PROV_TYPE in the MQMSGPROPS structure and call MQSendMessage.

When PROPID_M_PROV_NAME is specified, Message Queuing automatically sets PROPID_M_PROV_NAME_LEN to the length of the provider name.

To retrieve the name of the cryptographic provider from a message, specify PROPID_M_PROV_NAME and PROPID_M_PROV_NAME_LEN in the MQMSGPROPS structure (the length property can be used to verify that the cryptographic provider name was sent). Then call MQReceiveMessage or MQReceiveMessageByLookupId and examine the returned values.

If the name of the cryptographic provider was not sent with the message, the name of the default cryptographic provider is retrieved.

If MQReceiveMessage or MQReceiveMessageByLookupId fails, returning an MQ_ERROR_PROV_NAME_BUFFER_TOO_SMALL error, use the returned value of PROPID_M_PROV_NAME_LEN to reallocate the provider name buffer and call the applicable function again.

Before using the cryptographic provider name, always check the length property PROPID_M_PROV_NAME_LEN to see if the cryptographic provider name was sent with the message. If the returned value of PROPID_M_PROV_NAME_LEN is 0, no format name was sent with the message. If the returned value is non-0, PROPID_M_PROV_NAME contains the name of the cryptographic provider.

Equivalent COM Property

With COM components, the equivalent property for setting and retrieving the name of the cryptographic provider is MSMQMessage.AuthenticationProviderName.

For information on See

Working with foreign queues

Message Queuing Connector Services

Testing to see if a provider name was sent

PROPID_M_PROV_NAME_LEN

Example Code

The following code fragments show how PROPID_M_PROV_NAME is specified in arrays that can be used to initialize an MQMSGPROPS structure for setting and retrieving the cryptographic provider.

To Send the Cryptographic Provider Name

aMsgPropId[i] = PROPID_M_PROV_NAME;               // Property ID
aMsgPropVar[i].vt = VT_LPWSTR;                    // Type indicator
aMsgPropVar[i].pwszVal = wszProviderName;
i++;

aMsgPropId[i] = PROPID_M_PROV_TYPE;               // Property ID
aMsgPropVar[i].vt = VT_UI4;                       // Type indicator
aMsgPropVar[i].ulVal = dwProviderType;
i++;

To Retrieve the Cryptographic Provider Name

ULONG ulProviderNameLength = 64;
WCHAR * wszProviderNameBuffer = NULL;
wszProviderNameBuffer = (WCHAR*)malloc(ulProviderNameLength*sizeof(WCHAR));
if (wszProviderNameBuffer == NULL)
{
  return MQ_ERROR_INSUFFICIENT_RESOURCES;
}
memset(wszProviderNameBuffer, 0, ulProviderNameLength*sizeof(WCHAR));
aMsgPropId[i] = PROPID_M_PROV_NAME_LEN;           // Property ID
aMsgPropVar[i].vt = VT_UI4;                       // Type indicator
aMsgPropVar[i].ulVal = ulProviderNameLength;
i++;

aMsgPropId[i] = PROPID_M_PROV_NAME;               // Property ID
aMsgPropVar[i].vt = VT_LPWSTR;                    // Type indicator
aMsgPropVar[i].pwszVal = wszProviderNameBuffer;
i++;

// Reallocate the cryptographic provider name buffer if necessary.
wszProviderNameBuffer = (WCHAR*)realloc(wszProviderNameBuffer, aMsgPropVar[0].ulVal*sizeof(WCHAR));
if (wszProviderNameBuffer == NULL)
{
  return MQ_ERROR_INSUFFICIENT_RESOURCES;
}
memset(wszProviderNameBuffer, 0, aMsgPropVar[0].ulVal*sizeof(WCHAR));
aMsgPropVar[1].pwszVal = wszProviderNameBuffer;  // Pointer to the new buffer

See Also

Send comments about this topic to Microsoft.
Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
Processing
© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Page view tracker