Retrieving PROPID_Q_JOURNAL

The journaling level of the queue specifies whether messages retrieved from the queue are also copied to its journal queue. By default, messages are not copied to the journal queue.

To retrieve PROPID_Q_JOURNAL
  1. Define the structures needed to retrieve the properties. This includes the MQQUEUEPROPS structure.
    // Define number of properties to be retrieved.
    #define NumberOfProperties 1
    
    // Define property counter.
    DWORD PropIdCount = 0;
    
    // Define the MQQUEUPROPS structure.
    MQQUEUEPROPS QueueProps;
    PROPVARIANT aQueuePropVar[NumberOfProperties];
    QUEUEPROPID aQueuePropId[NumberOfProperties];
    HRESULT aQueueStatus[NumberOfProperties];
    
    // Define results.
    HRESULT hr;
    
    // Define format name buffer.
    DWORD dwFormatNameBufferLength = 256;
    WCHAR szFormatNameBuffer[256];
    
  2. Specify PROPID_Q_JOURNAL.
    aQueuePropId[PropIdCount] = PROPID_Q_JOURNAL;  //Property ID
    aQueuePropVar[PropIdCount].vt = VT_UI1;        //Type indicator
    PropIdCount++;
    
  3. Add any additional queue properties. When adding properties, increment the NumberOfProperties variable to reflect the number of properties added.
  4. Set the MQQUEUEPROPS structure.
    QueueProps.cProp = PropIdCount;           // Number of properties
    QueueProps.aPropID = aQueuePropId;        // Ids of properties
    QueueProps.aPropVar = aQueuePropVar;      // Values of properties
    QueueProps.aStatus = aQueueStatus;        // Error reports
    
  5. Obtain the format name of the queue. The example below uses MQPathNameToFormatName to obtain the format name of a known queue. Other functions that can be used are MQHandleToFormatName and MQInstanceToFormatName.
    hr = MQPathNameToFormatName(L"machinename\\queuename",
                                  szFormatNameBuffer,
                                      &dwFormatNameBufferLength);
    if (FAILED(hr))
       {
       fprintf(stderr, "Failed in MQPathNameToFormatName, error = 0x%x\n",hr);
       return -1;
       }
  6. Call MQGetQueueProperties.
    hr = MQGetQueueProperties(szFormatNameBuffer, &QueueProps);
    if (FAILED(hr))
       {
       fprintf(stderr, "Failed in MQGetQueueProperties, error = 0x%x\n",hr);
       return -1;
       }
     
  7. Examine the value of the returned property. In this example, the journaling level of the queue is printed to the screen.
    if (aQueuePropVar[0].bVal == MQ_JOURNAL)
     printf("PROPID_Q_JOURNAL is set to MQ_JOURNAL.\n");
     else
     printf("PROPID_Q_JOURNAL is set to MQ_JOURNAL_NONE.\n");
    

Example Code

The following example retrieves the PROPID_Q_JOURNAL property for a known queue and then prints the returned value to the screen.

#include <windows.h>
#include <stdio.h>
#include <mq.h>                       // MSMQ header file


int main(int arg, char *argv[])

{
  ///////////////////////////
  //  Define structures.
  ////////////////////////////

  // Define number of properties to be retrieved.
  #define NumberOfProperties 1

  // Define property counter.
  DWORD PropIdCount = 0;

  // Define the MQQUEUPROPS structure.
  MQQUEUEPROPS QueueProps;
  PROPVARIANT aQueuePropVar[NumberOfProperties];
  QUEUEPROPID aQueuePropId[NumberOfProperties];
  HRESULT aQueueStatus[NumberOfProperties];
  
  // Define results.
  HRESULT hr;
  
  // Define format name buffer.
  DWORD dwFormatNameBufferLength = 256;
  WCHAR szFormatNameBuffer[256];
  
  
  ///////////////////////////////////
  // Specify PROPID_Q_JOURNAL.
  ///////////////////////////////////
  
  aQueuePropId[PropIdCount] = PROPID_Q_JOURNAL;      // Property ID
  aQueuePropVar[PropIdCount].vt = VT_UI1;            // Type indicator
  PropIdCount++;
  
  
  ///////////////////////////////////////////////////////
  // Add additional queue properties here. When adding 
  // properties, increment NumberOfProperties to 
  // reflect total number of properties.
  ///////////////////////////////////////////////////////
  
  
  ////////////////////////////////
  // Set the MQQUEUEPROPS structure.
  /////////////////////////////////
  
  QueueProps.cProp = PropIdCount;           // Number of properties
  QueueProps.aPropID = aQueuePropId;        // Ids of properties
  QueueProps.aPropVar = aQueuePropVar;      // Values of properties
  QueueProps.aStatus = aQueueStatus;        // Error reports
  
  
  ////////////////////////////
  //Get format name of queue.
  ////////////////////////////
 
  hr = MQPathNameToFormatName(L"computername\\queuename",
                              szFormatNameBuffer,
                                  &dwFormatNameBufferLength);
  if (FAILED(hr))
  {
    fprintf(stderr, "Failed in MQPathNameToFormatName, error = 0x%x\n",hr);
  return -1;
  }
 
 
  ////////////////////////////
  // Get queue property.
  ////////////////////////////
  
  hr = MQGetQueueProperties(szFormatNameBuffer, &QueueProps);
  if (FAILED(hr))
  {
    fprintf(stderr, "Failed in MQGetQueueProperties, error = 0x%x\n",hr);
    return -1;
  }
  
  
  //////////////////////////////////////////////
  // Review returned value. This example prints 
  // out the journaling level of the queue.
  //////////////////////////////////////////////
  
  if (aQueuePropVar[0].bVal == MQ_JOURNAL)
        printf("PROPID_Q_JOURNAL is set to MQ_JOURNAL.\n");
  else
    printf("PROPID_Q_JOURNAL is set to MQ_JOURNAL_NONE.\n");
  
  
  return 0;
 
}