/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __RPCNDR_H_VERSION__
#error This stub requires an updated version of <rpcndr.h>
#endif

#ifndef __mqoai_h__
#define __mqoai_h__

#ifndef __IMSMQQuery_FWD_DEFINED__
#define __IMSMQQuery_FWD_DEFINED__
typedef interface IMSMQQuery IMSMQQuery;
#endif

#ifndef __IMSMQQueueInfo_FWD_DEFINED__
#define __IMSMQQueueInfo_FWD_DEFINED__
typedef interface IMSMQQueueInfo IMSMQQueueInfo;
#endif

#ifndef __IMSMQQueueInfo2_FWD_DEFINED__
#define __IMSMQQueueInfo2_FWD_DEFINED__
typedef interface IMSMQQueueInfo2 IMSMQQueueInfo2;
#endif

#ifndef __IMSMQQueueInfo3_FWD_DEFINED__
#define __IMSMQQueueInfo3_FWD_DEFINED__
typedef interface IMSMQQueueInfo3 IMSMQQueueInfo3;
#endif

#ifndef __IMSMQQueue_FWD_DEFINED__
#define __IMSMQQueue_FWD_DEFINED__
typedef interface IMSMQQueue IMSMQQueue;
#endif

#ifndef __IMSMQQueue2_FWD_DEFINED__
#define __IMSMQQueue2_FWD_DEFINED__
typedef interface IMSMQQueue2 IMSMQQueue2;
#endif

#ifndef __IMSMQMessage_FWD_DEFINED__
#define __IMSMQMessage_FWD_DEFINED__
typedef interface IMSMQMessage IMSMQMessage;
#endif

#ifndef __IMSMQQueueInfos_FWD_DEFINED__
#define __IMSMQQueueInfos_FWD_DEFINED__
typedef interface IMSMQQueueInfos IMSMQQueueInfos;
#endif

#ifndef __IMSMQQueueInfos2_FWD_DEFINED__
#define __IMSMQQueueInfos2_FWD_DEFINED__
typedef interface IMSMQQueueInfos2 IMSMQQueueInfos2;
#endif

#ifndef __IMSMQQueueInfos3_FWD_DEFINED__
#define __IMSMQQueueInfos3_FWD_DEFINED__
typedef interface IMSMQQueueInfos3 IMSMQQueueInfos3;
#endif

#ifndef __IMSMQEvent_FWD_DEFINED__
#define __IMSMQEvent_FWD_DEFINED__
typedef interface IMSMQEvent IMSMQEvent;
#endif

#ifndef __IMSMQEvent2_FWD_DEFINED__
#define __IMSMQEvent2_FWD_DEFINED__
typedef interface IMSMQEvent2 IMSMQEvent2;
#endif

#ifndef __IMSMQEvent3_FWD_DEFINED__
#define __IMSMQEvent3_FWD_DEFINED__
typedef interface IMSMQEvent3 IMSMQEvent3;
#endif

#ifndef __IMSMQTransaction_FWD_DEFINED__
#define __IMSMQTransaction_FWD_DEFINED__
typedef interface IMSMQTransaction IMSMQTransaction;
#endif

#ifndef __IMSMQCoordinatedTransactionDispenser_FWD_DEFINED__
#define __IMSMQCoordinatedTransactionDispenser_FWD_DEFINED__
typedef interface IMSMQCoordinatedTransactionDispenser IMSMQCoordinatedTransactionDispenser;
#endif

#ifndef __IMSMQTransactionDispenser_FWD_DEFINED__
#define __IMSMQTransactionDispenser_FWD_DEFINED__
typedef interface IMSMQTransactionDispenser IMSMQTransactionDispenser;
#endif

#ifndef __IMSMQQuery2_FWD_DEFINED__
#define __IMSMQQuery2_FWD_DEFINED__
typedef interface IMSMQQuery2 IMSMQQuery2;
#endif

#ifndef __IMSMQQuery3_FWD_DEFINED__
#define __IMSMQQuery3_FWD_DEFINED__
typedef interface IMSMQQuery3 IMSMQQuery3;
#endif

#ifndef __MSMQQuery_FWD_DEFINED__
#define __MSMQQuery_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQQuery MSMQQuery;
#else
typedef struct MSMQQuery MSMQQuery;
#endif
#endif

#ifndef __IMSMQMessage2_FWD_DEFINED__
#define __IMSMQMessage2_FWD_DEFINED__
typedef interface IMSMQMessage2 IMSMQMessage2;
#endif

#ifndef __IMSMQMessage3_FWD_DEFINED__
#define __IMSMQMessage3_FWD_DEFINED__
typedef interface IMSMQMessage3 IMSMQMessage3;
#endif

#ifndef __MSMQMessage_FWD_DEFINED__
#define __MSMQMessage_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQMessage MSMQMessage;
#else
typedef struct MSMQMessage MSMQMessage;
#endif
#endif

#ifndef __IMSMQQueue3_FWD_DEFINED__
#define __IMSMQQueue3_FWD_DEFINED__
typedef interface IMSMQQueue3 IMSMQQueue3;
#endif

#ifndef __MSMQQueue_FWD_DEFINED__
#define __MSMQQueue_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQQueue MSMQQueue;
#else
typedef struct MSMQQueue MSMQQueue;
#endif
#endif

#ifndef __IMSMQPrivateEvent_FWD_DEFINED__
#define __IMSMQPrivateEvent_FWD_DEFINED__
typedef interface IMSMQPrivateEvent IMSMQPrivateEvent;
#endif

#ifndef ___DMSMQEventEvents_FWD_DEFINED__
#define ___DMSMQEventEvents_FWD_DEFINED__
typedef interface _DMSMQEventEvents _DMSMQEventEvents;
#endif

#ifndef __MSMQEvent_FWD_DEFINED__
#define __MSMQEvent_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQEvent MSMQEvent;
#else
typedef struct MSMQEvent MSMQEvent;
#endif
#endif

#ifndef __MSMQQueueInfo_FWD_DEFINED__
#define __MSMQQueueInfo_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQQueueInfo MSMQQueueInfo;
#else
typedef struct MSMQQueueInfo MSMQQueueInfo;
#endif
#endif

#ifndef __MSMQQueueInfos_FWD_DEFINED__
#define __MSMQQueueInfos_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQQueueInfos MSMQQueueInfos;
#else
typedef struct MSMQQueueInfos MSMQQueueInfos;
#endif
#endif

#ifndef __IMSMQTransaction2_FWD_DEFINED__
#define __IMSMQTransaction2_FWD_DEFINED__
typedef interface IMSMQTransaction2 IMSMQTransaction2;
#endif

#ifndef __IMSMQTransaction3_FWD_DEFINED__
#define __IMSMQTransaction3_FWD_DEFINED__
typedef interface IMSMQTransaction3 IMSMQTransaction3;
#endif

#ifndef __MSMQTransaction_FWD_DEFINED__
#define __MSMQTransaction_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQTransaction MSMQTransaction;
#else
typedef struct MSMQTransaction MSMQTransaction;
#endif
#endif

#ifndef __IMSMQCoordinatedTransactionDispenser2_FWD_DEFINED__
#define __IMSMQCoordinatedTransactionDispenser2_FWD_DEFINED__
typedef interface IMSMQCoordinatedTransactionDispenser2 IMSMQCoordinatedTransactionDispenser2;
#endif

#ifndef __IMSMQCoordinatedTransactionDispenser3_FWD_DEFINED__
#define __IMSMQCoordinatedTransactionDispenser3_FWD_DEFINED__
typedef interface IMSMQCoordinatedTransactionDispenser3 IMSMQCoordinatedTransactionDispenser3;
#endif

#ifndef __MSMQCoordinatedTransactionDispenser_FWD_DEFINED__
#define __MSMQCoordinatedTransactionDispenser_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQCoordinatedTransactionDispenser MSMQCoordinatedTransactionDispenser;
#else
typedef struct MSMQCoordinatedTransactionDispenser MSMQCoordinatedTransactionDispenser;
#endif
#endif

#ifndef __IMSMQTransactionDispenser2_FWD_DEFINED__
#define __IMSMQTransactionDispenser2_FWD_DEFINED__
typedef interface IMSMQTransactionDispenser2 IMSMQTransactionDispenser2;
#endif

#ifndef __IMSMQTransactionDispenser3_FWD_DEFINED__
#define __IMSMQTransactionDispenser3_FWD_DEFINED__
typedef interface IMSMQTransactionDispenser3 IMSMQTransactionDispenser3;
#endif

#ifndef __MSMQTransactionDispenser_FWD_DEFINED__
#define __MSMQTransactionDispenser_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQTransactionDispenser MSMQTransactionDispenser;
#else
typedef struct MSMQTransactionDispenser MSMQTransactionDispenser;
#endif
#endif

#ifndef __IMSMQApplication_FWD_DEFINED__
#define __IMSMQApplication_FWD_DEFINED__
typedef interface IMSMQApplication IMSMQApplication;
#endif

#ifndef __IMSMQApplication2_FWD_DEFINED__
#define __IMSMQApplication2_FWD_DEFINED__
typedef interface IMSMQApplication2 IMSMQApplication2;
#endif

#ifndef __IMSMQApplication3_FWD_DEFINED__
#define __IMSMQApplication3_FWD_DEFINED__
typedef interface IMSMQApplication3 IMSMQApplication3;
#endif

#ifndef __MSMQApplication_FWD_DEFINED__
#define __MSMQApplication_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQApplication MSMQApplication;
#else
typedef struct MSMQApplication MSMQApplication;
#endif
#endif

#ifndef __IMSMQDestination_FWD_DEFINED__
#define __IMSMQDestination_FWD_DEFINED__
typedef interface IMSMQDestination IMSMQDestination;
#endif

#ifndef __IMSMQPrivateDestination_FWD_DEFINED__
#define __IMSMQPrivateDestination_FWD_DEFINED__
typedef interface IMSMQPrivateDestination IMSMQPrivateDestination;
#endif

#ifndef __MSMQDestination_FWD_DEFINED__
#define __MSMQDestination_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQDestination MSMQDestination;
#else
typedef struct MSMQDestination MSMQDestination;
#endif
#endif

#ifndef __IMSMQCollection_FWD_DEFINED__
#define __IMSMQCollection_FWD_DEFINED__
typedef interface IMSMQCollection IMSMQCollection;
#endif

#ifndef __MSMQCollection_FWD_DEFINED__
#define __MSMQCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQCollection MSMQCollection;
#else
typedef struct MSMQCollection MSMQCollection;
#endif
#endif

#ifndef __IMSMQManagement_FWD_DEFINED__
#define __IMSMQManagement_FWD_DEFINED__
typedef interface IMSMQManagement IMSMQManagement;
#endif

#ifndef __MSMQManagement_FWD_DEFINED__
#define __MSMQManagement_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQManagement MSMQManagement;
#else
typedef struct MSMQManagement MSMQManagement;
#endif
#endif

#ifndef __IMSMQOutgoingQueueManagement_FWD_DEFINED__
#define __IMSMQOutgoingQueueManagement_FWD_DEFINED__
typedef interface IMSMQOutgoingQueueManagement IMSMQOutgoingQueueManagement;
#endif

#ifndef __MSMQOutgoingQueueManagement_FWD_DEFINED__
#define __MSMQOutgoingQueueManagement_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQOutgoingQueueManagement MSMQOutgoingQueueManagement;
#else
typedef struct MSMQOutgoingQueueManagement MSMQOutgoingQueueManagement;
#endif
#endif

#ifndef __IMSMQQueueManagement_FWD_DEFINED__
#define __IMSMQQueueManagement_FWD_DEFINED__
typedef interface IMSMQQueueManagement IMSMQQueueManagement;
#endif

#ifndef __MSMQQueueManagement_FWD_DEFINED__
#define __MSMQQueueManagement_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSMQQueueManagement MSMQQueueManagement;
#else
typedef struct MSMQQueueManagement MSMQQueueManagement;
#endif
#endif

#ifdef __cplusplus
extern "C" {
#endif

  void *__RPC_API MIDL_user_allocate(size_t);
  void __RPC_API MIDL_user_free(void *);

#ifndef __MSMQ_LIBRARY_DEFINED__
#define __MSMQ_LIBRARY_DEFINED__

#ifndef BASETYPES
#define BASETYPES
  typedef unsigned long ULONG;
  typedef ULONG *PULONG;
  typedef unsigned short USHORT;
  typedef USHORT *PUSHORT;
  typedef unsigned char UCHAR;
  typedef UCHAR *PUCHAR;
  typedef char *PSZ;
#endif

  typedef short Boolean;
  typedef unsigned char BYTE;
  typedef unsigned long DWORD;
  typedef int WINBOOL;

  enum MQCALG {
    MQMSG_CALG_MD2 = 0x8000 + 1,MQMSG_CALG_MD4 = 0x8000 + 2,MQMSG_CALG_MD5 = 0x8000 + 3,MQMSG_CALG_SHA = 0x8000 + 4,
    MQMSG_CALG_SHA1 = 0x8000 + 4,MQMSG_CALG_MAC = 0x8000 + 5,MQMSG_CALG_RSA_SIGN = 0x2000 + 0x400,MQMSG_CALG_DSS_SIGN = 0x2000 + 0x200,
    MQMSG_CALG_RSA_KEYX = 0xa000 + 0x400,MQMSG_CALG_DES = 0x6000 + 0x600 + 1,MQMSG_CALG_RC2 = 0x6000 + 0x600 + 2,MQMSG_CALG_RC4 = 0x6000 + 0x800 + 1,
    MQMSG_CALG_SEAL = 0x6000 + 0x800 + 2
  };
  enum MQTRANSACTION {
    MQ_NO_TRANSACTION = 0,MQ_MTS_TRANSACTION = 1,MQ_XA_TRANSACTION = 2,MQ_SINGLE_MESSAGE = 3
  };

  enum RELOPS {
    REL_NOP = 0,REL_EQ = REL_NOP + 1,REL_NEQ = REL_EQ + 1,REL_LT = REL_NEQ + 1,REL_GT = REL_LT + 1,REL_LE = REL_GT + 1,REL_GE = REL_LE + 1
  };

  enum MQCERT_REGISTER {
    MQCERT_REGISTER_ALWAYS = 1,MQCERT_REGISTER_IF_NOT_EXIST = 2
  };

  enum MQMSGCURSOR {
    MQMSG_FIRST = 0,MQMSG_CURRENT = 1,MQMSG_NEXT = 2
  };

  enum MQMSGCLASS {
    MQMSG_CLASS_NORMAL = 0,MQMSG_CLASS_REPORT = 0x1,MQMSG_CLASS_ACK_REACH_QUEUE = 0x2,MQMSG_CLASS_ACK_RECEIVE = 0x4000,
    MQMSG_CLASS_NACK_BAD_DST_Q = 0x8000,MQMSG_CLASS_NACK_PURGED = 0x8000 + 0x1,MQMSG_CLASS_NACK_REACH_QUEUE_TIMEOUT = 0x8000 + 0x2,
    MQMSG_CLASS_NACK_Q_EXCEED_QUOTA = 0x8000 + 0x3,MQMSG_CLASS_NACK_ACCESS_DENIED = 0x8000 + 0x4,MQMSG_CLASS_NACK_HOP_COUNT_EXCEEDED = 0x8000 + 0x5,
    MQMSG_CLASS_NACK_BAD_SIGNATURE = 0x8000 + 0x6,MQMSG_CLASS_NACK_BAD_ENCRYPTION = 0x8000 + 0x7,MQMSG_CLASS_NACK_COULD_NOT_ENCRYPT = 0x8000 + 0x8,
    MQMSG_CLASS_NACK_NOT_TRANSACTIONAL_Q = 0x8000 + 0x9,MQMSG_CLASS_NACK_NOT_TRANSACTIONAL_MSG = 0x8000 + 0xa,
    MQMSG_CLASS_NACK_UNSUPPORTED_CRYPTO_PROVIDER = 0x8000 + 0xb,MQMSG_CLASS_NACK_SOURCE_COMPUTER_GUID_CHANGED = 0x8000 + 0xc,
    MQMSG_CLASS_NACK_Q_DELETED = 0x8000 + 0x4000,MQMSG_CLASS_NACK_Q_PURGED = 0x8000 + 0x4000 + 0x1,
    MQMSG_CLASS_NACK_RECEIVE_TIMEOUT = 0x8000 + 0x4000 + 0x2,MQMSG_CLASS_NACK_RECEIVE_TIMEOUT_AT_SENDER = 0x8000 + 0x4000 + 0x3
  };

  enum MQMSGDELIVERY {
    MQMSG_DELIVERY_EXPRESS = 0,MQMSG_DELIVERY_RECOVERABLE = 1
  };

  enum MQMSGACKNOWLEDGEMENT {
    MQMSG_ACKNOWLEDGMENT_NONE = 0,MQMSG_ACKNOWLEDGMENT_POS_ARRIVAL = 0x1,MQMSG_ACKNOWLEDGMENT_POS_RECEIVE = 0x2,MQMSG_ACKNOWLEDGMENT_NEG_ARRIVAL = 0x4,
    MQMSG_ACKNOWLEDGMENT_NEG_RECEIVE = 0x8,MQMSG_ACKNOWLEDGMENT_NACK_REACH_QUEUE = 0x4,MQMSG_ACKNOWLEDGMENT_FULL_REACH_QUEUE = 0x4 + 0x1,
    MQMSG_ACKNOWLEDGMENT_NACK_RECEIVE = 0x4 + 0x8,MQMSG_ACKNOWLEDGMENT_FULL_RECEIVE = 0x4 + 0x8 + 0x2
  };

  enum MQMSGJOURNAL {
    MQMSG_JOURNAL_NONE = 0,MQMSG_DEADLETTER = 1,MQMSG_JOURNAL = 2
  };

  enum MQMSGTRACE {
    MQMSG_TRACE_NONE = 0,MQMSG_SEND_ROUTE_TO_REPORT_QUEUE = 1
  };

  enum MQMSGSENDERIDTYPE {
    MQMSG_SENDERID_TYPE_NONE = 0,MQMSG_SENDERID_TYPE_SID = 1
  };

  enum MQMSGPRIVLEVEL {
    MQMSG_PRIV_LEVEL_NONE = 0,MQMSG_PRIV_LEVEL_BODY_BASE = 1,MQMSG_PRIV_LEVEL_BODY_ENHANCED = 3
  };

  enum MQMSGAUTHLEVEL {
    MQMSG_AUTH_LEVEL_NONE = 0,MQMSG_AUTH_LEVEL_ALWAYS = 1,MQMSG_AUTH_LEVEL_MSMQ10 = 2,MQMSG_AUTH_LEVEL_SIG10 = 2,MQMSG_AUTH_LEVEL_MSMQ20 = 4,
    MQMSG_AUTH_LEVEL_SIG20 = 4,MQMSG_AUTH_LEVEL_SIG30 = 8
  };

  enum MQMSGIDSIZE {
    MQMSG_MSGID_SIZE = 20,MQMSG_CORRELATIONID_SIZE = 20,MQMSG_XACTID_SIZE = 20
  };

  enum MQMSGMAX {
    MQ_MAX_MSG_LABEL_LEN = 249
  };

  enum MQMSGAUTHENTICATION {
    MQMSG_AUTHENTICATION_NOT_REQUESTED = 0,MQMSG_AUTHENTICATION_REQUESTED = 1,MQMSG_AUTHENTICATED_SIG10 = 1,MQMSG_AUTHENTICATION_REQUESTED_EX = 3,
    MQMSG_AUTHENTICATED_SIG20 = 3,MQMSG_AUTHENTICATED_SIG30 = 5,MQMSG_AUTHENTICATED_SIGXML = 9
  };

  enum MQSHARE {
    MQ_DENY_NONE = 0,MQ_DENY_RECEIVE_SHARE = 1
  };

  enum MQACCESS {
    MQ_RECEIVE_ACCESS = 1,MQ_SEND_ACCESS = 2,MQ_PEEK_ACCESS = 0x20,MQ_ADMIN_ACCESS = 0x80
  };

  enum MQJOURNAL {
    MQ_JOURNAL_NONE = 0,MQ_JOURNAL = 1
  };

  enum MQTRANSACTIONAL {
    MQ_TRANSACTIONAL_NONE = 0,MQ_TRANSACTIONAL = 1
  };

  enum MQAUTHENTICATE {
    MQ_AUTHENTICATE_NONE = 0,MQ_AUTHENTICATE = 1
  };

  enum MQPRIVLEVEL {
    MQ_PRIV_LEVEL_NONE = 0,MQ_PRIV_LEVEL_OPTIONAL = 1,MQ_PRIV_LEVEL_BODY = 2
  };

  enum MQPRIORITY {
    MQ_MIN_PRIORITY = 0,MQ_MAX_PRIORITY = 7
  };

  enum MQMAX {
    MQ_MAX_Q_NAME_LEN = 124,MQ_MAX_Q_LABEL_LEN = 124
  };

  enum QUEUE_TYPE {
    MQ_TYPE_PUBLIC = 0,MQ_TYPE_PRIVATE = MQ_TYPE_PUBLIC + 1,MQ_TYPE_MACHINE = MQ_TYPE_PRIVATE + 1,MQ_TYPE_CONNECTOR = MQ_TYPE_MACHINE + 1,
    MQ_TYPE_MULTICAST = MQ_TYPE_CONNECTOR + 1
  };

  enum FOREIGN_STATUS {
    MQ_STATUS_FOREIGN = 0,MQ_STATUS_NOT_FOREIGN = MQ_STATUS_FOREIGN + 1,MQ_STATUS_UNKNOWN = MQ_STATUS_NOT_FOREIGN + 1
  };

  enum XACT_STATUS {
    MQ_XACT_STATUS_XACT = 0,MQ_XACT_STATUS_NOT_XACT = MQ_XACT_STATUS_XACT + 1,MQ_XACT_STATUS_UNKNOWN = MQ_XACT_STATUS_NOT_XACT + 1
  };

  enum QUEUE_STATE {
    MQ_QUEUE_STATE_LOCAL_CONNECTION = 0,MQ_QUEUE_STATE_DISCONNECTED = MQ_QUEUE_STATE_LOCAL_CONNECTION + 1,
    MQ_QUEUE_STATE_WAITING = MQ_QUEUE_STATE_DISCONNECTED + 1,MQ_QUEUE_STATE_NEEDVALIDATE = MQ_QUEUE_STATE_WAITING + 1,
    MQ_QUEUE_STATE_ONHOLD = MQ_QUEUE_STATE_NEEDVALIDATE + 1,MQ_QUEUE_STATE_NONACTIVE = MQ_QUEUE_STATE_ONHOLD + 1,
    MQ_QUEUE_STATE_CONNECTED = MQ_QUEUE_STATE_NONACTIVE + 1,MQ_QUEUE_STATE_DISCONNECTING = MQ_QUEUE_STATE_CONNECTED + 1,
    MQ_QUEUE_STATE_LOCKED = MQ_QUEUE_STATE_DISCONNECTING + 1
  };

  enum MQDEFAULT {
    DEFAULT_M_PRIORITY = 3,DEFAULT_M_DELIVERY = 0,DEFAULT_M_ACKNOWLEDGE = 0,DEFAULT_M_JOURNAL = 0,DEFAULT_M_APPSPECIFIC = 0,
    DEFAULT_M_PRIV_LEVEL = 0,DEFAULT_M_AUTH_LEVEL = 0,DEFAULT_M_SENDERID_TYPE = 1,DEFAULT_Q_JOURNAL = 0,DEFAULT_Q_BASEPRIORITY = 0,
    DEFAULT_Q_QUOTA = 0xffffffff,DEFAULT_Q_JOURNAL_QUOTA = 0xffffffff,DEFAULT_Q_TRANSACTION = 0,DEFAULT_Q_AUTHENTICATE = 0,DEFAULT_Q_PRIV_LEVEL = 1,
    DEFAULT_M_LOOKUPID = 0
  };

  enum MQERROR {
    MQ_ERROR = 0xc00e0001,MQ_ERROR_PROPERTY = 0xc00e0002,MQ_ERROR_QUEUE_NOT_FOUND = 0xc00e0003,MQ_ERROR_QUEUE_NOT_ACTIVE = 0xc00e0004,
    MQ_ERROR_QUEUE_EXISTS = 0xc00e0005,MQ_ERROR_INVALID_PARAMETER = 0xc00e0006,MQ_ERROR_INVALID_HANDLE = 0xc00e0007,
    MQ_ERROR_OPERATION_CANCELLED = 0xc00e0008,MQ_ERROR_SHARING_VIOLATION = 0xc00e0009,MQ_ERROR_SERVICE_NOT_AVAILABLE = 0xc00e000b,
    MQ_ERROR_MACHINE_NOT_FOUND = 0xc00e000d,MQ_ERROR_ILLEGAL_SORT = 0xc00e0010,MQ_ERROR_ILLEGAL_USER = 0xc00e0011,MQ_ERROR_NO_DS = 0xc00e0013,
    MQ_ERROR_ILLEGAL_QUEUE_PATHNAME = 0xc00e0014,MQ_ERROR_ILLEGAL_PROPERTY_VALUE = 0xc00e0018,MQ_ERROR_ILLEGAL_PROPERTY_VT = 0xc00e0019,
    MQ_ERROR_BUFFER_OVERFLOW = 0xc00e001a,MQ_ERROR_IO_TIMEOUT = 0xc00e001b,MQ_ERROR_ILLEGAL_CURSOR_ACTION = 0xc00e001c,
    MQ_ERROR_MESSAGE_ALREADY_RECEIVED = 0xc00e001d,MQ_ERROR_ILLEGAL_FORMATNAME = 0xc00e001e,MQ_ERROR_FORMATNAME_BUFFER_TOO_SMALL = 0xc00e001f,
    MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION = 0xc00e0020,MQ_ERROR_ILLEGAL_SECURITY_DESCRIPTOR = 0xc00e0021,
    MQ_ERROR_SENDERID_BUFFER_TOO_SMALL = 0xc00e0022,MQ_ERROR_SECURITY_DESCRIPTOR_TOO_SMALL = 0xc00e0023,
    MQ_ERROR_CANNOT_IMPERSONATE_CLIENT = 0xc00e0024,MQ_ERROR_ACCESS_DENIED = 0xc00e0025,MQ_ERROR_PRIVILEGE_NOT_HELD = 0xc00e0026,
    MQ_ERROR_INSUFFICIENT_RESOURCES = 0xc00e0027,MQ_ERROR_USER_BUFFER_TOO_SMALL = 0xc00e0028,MQ_ERROR_MESSAGE_STORAGE_FAILED = 0xc00e002a,
    MQ_ERROR_SENDER_CERT_BUFFER_TOO_SMALL = 0xc00e002b,MQ_ERROR_INVALID_CERTIFICATE = 0xc00e002c,
    MQ_ERROR_CORRUPTED_INTERNAL_CERTIFICATE = 0xc00e002d,MQ_ERROR_INTERNAL_USER_CERT_EXIST = 0xc00e002e,
    MQ_ERROR_NO_INTERNAL_USER_CERT = 0xc00e002f,MQ_ERROR_CORRUPTED_SECURITY_DATA = 0xc00e0030,MQ_ERROR_CORRUPTED_PERSONAL_CERT_STORE = 0xc00e0031,
    MQ_ERROR_COMPUTER_DOES_NOT_SUPPORT_ENCRYPTION = 0xc00e0033,MQ_ERROR_BAD_SECURITY_CONTEXT = 0xc00e0035,MQ_ERROR_COULD_NOT_GET_USER_SID = 0xc00e0036,
    MQ_ERROR_COULD_NOT_GET_ACCOUNT_INFO = 0xc00e0037,MQ_ERROR_ILLEGAL_MQCOLUMNS = 0xc00e0038,MQ_ERROR_ILLEGAL_PROPID = 0xc00e0039,
    MQ_ERROR_ILLEGAL_RELATION = 0xc00e003a,MQ_ERROR_ILLEGAL_PROPERTY_SIZE = 0xc00e003b,MQ_ERROR_ILLEGAL_RESTRICTION_PROPID = 0xc00e003c,
    MQ_ERROR_ILLEGAL_MQQUEUEPROPS = 0xc00e003d,MQ_ERROR_PROPERTY_NOTALLOWED = 0xc00e003e,MQ_ERROR_INSUFFICIENT_PROPERTIES = 0xc00e003f,
    MQ_ERROR_MACHINE_EXISTS = 0xc00e0040,MQ_ERROR_ILLEGAL_MQQMPROPS = 0xc00e0041,MQ_ERROR_DS_IS_FULL = 0xc00e0042L,MQ_ERROR_DS_ERROR = 0xc00e0043,
    MQ_ERROR_INVALID_OWNER = 0xc00e0044,MQ_ERROR_UNSUPPORTED_ACCESS_MODE = 0xc00e0045,MQ_ERROR_RESULT_BUFFER_TOO_SMALL = 0xc00e0046,
    MQ_ERROR_DELETE_CN_IN_USE = 0xc00e0048L,MQ_ERROR_NO_RESPONSE_FROM_OBJECT_SERVER = 0xc00e0049,MQ_ERROR_OBJECT_SERVER_NOT_AVAILABLE = 0xc00e004a,
    MQ_ERROR_QUEUE_NOT_AVAILABLE = 0xc00e004b,MQ_ERROR_DTC_CONNECT = 0xc00e004c,MQ_ERROR_TRANSACTION_IMPORT = 0xc00e004e,
    MQ_ERROR_TRANSACTION_USAGE = 0xc00e0050,MQ_ERROR_TRANSACTION_SEQUENCE = 0xc00e0051,MQ_ERROR_MISSING_CONNECTOR_TYPE = 0xc00e0055,
    MQ_ERROR_STALE_HANDLE = 0xc00e0056,MQ_ERROR_TRANSACTION_ENLIST = 0xc00e0058,MQ_ERROR_QUEUE_DELETED = 0xc00e005a,
    MQ_ERROR_ILLEGAL_CONTEXT = 0xc00e005b,MQ_ERROR_ILLEGAL_SORT_PROPID = 0xc00e005c,MQ_ERROR_LABEL_TOO_LONG = 0xc00e005d,
    MQ_ERROR_LABEL_BUFFER_TOO_SMALL = 0xc00e005e,MQ_ERROR_MQIS_SERVER_EMPTY = 0xc00e005fL,MQ_ERROR_MQIS_READONLY_MODE = 0xc00e0060L,
    MQ_ERROR_SYMM_KEY_BUFFER_TOO_SMALL = 0xc00e0061,MQ_ERROR_SIGNATURE_BUFFER_TOO_SMALL = 0xc00e0062,MQ_ERROR_PROV_NAME_BUFFER_TOO_SMALL = 0xc00e0063,
    MQ_ERROR_ILLEGAL_OPERATION = 0xc00e0064,MQ_ERROR_WRITE_NOT_ALLOWED = 0xc00e0065L,MQ_ERROR_WKS_CANT_SERVE_CLIENT = 0xc00e0066L,
    MQ_ERROR_DEPEND_WKS_LICENSE_OVERFLOW = 0xc00e0067L,MQ_CORRUPTED_QUEUE_WAS_DELETED = 0xc00e0068L,MQ_ERROR_REMOTE_MACHINE_NOT_AVAILABLE = 0xc00e0069L,
    MQ_ERROR_UNSUPPORTED_OPERATION = 0xc00e006aL,MQ_ERROR_ENCRYPTION_PROVIDER_NOT_SUPPORTED = 0xc00e006bL,
    MQ_ERROR_CANNOT_SET_CRYPTO_SEC_DESCR = 0xc00e006cL,MQ_ERROR_CERTIFICATE_NOT_PROVIDED = 0xc00e006dL,
    MQ_ERROR_Q_DNS_PROPERTY_NOT_SUPPORTED = 0xc00e006eL,MQ_ERROR_CANT_CREATE_CERT_STORE = 0xc00e006fL,MQ_ERROR_CANNOT_CREATE_CERT_STORE = 0xc00e006fL,
    MQ_ERROR_CANT_OPEN_CERT_STORE = 0xc00e0070L,MQ_ERROR_CANNOT_OPEN_CERT_STORE = 0xc00e0070L,MQ_ERROR_ILLEGAL_ENTERPRISE_OPERATION = 0xc00e0071L,
    MQ_ERROR_CANNOT_GRANT_ADD_GUID = 0xc00e0072L,MQ_ERROR_CANNOT_LOAD_MSMQOCM = 0xc00e0073L,MQ_ERROR_NO_ENTRY_POINT_MSMQOCM = 0xc00e0074L,
    MQ_ERROR_NO_MSMQ_SERVERS_ON_DC = 0xc00e0075L,MQ_ERROR_CANNOT_JOIN_DOMAIN = 0xc00e0076L,MQ_ERROR_CANNOT_CREATE_ON_GC = 0xc00e0077L,
    MQ_ERROR_GUID_NOT_MATCHING = 0xc00e0078L,MQ_ERROR_PUBLIC_KEY_NOT_FOUND = 0xc00e0079L,MQ_ERROR_PUBLIC_KEY_DOES_NOT_EXIST = 0xc00e007aL,
    MQ_ERROR_ILLEGAL_MQPRIVATEPROPS = 0xc00e007bL,MQ_ERROR_NO_GC_IN_DOMAIN = 0xc00e007cL,MQ_ERROR_NO_MSMQ_SERVERS_ON_GC = 0xc00e007dL,
    MQ_ERROR_CANNOT_GET_DN = 0xc00e007eL,MQ_ERROR_CANNOT_HASH_DATA_EX = 0xc00e007fL,MQ_ERROR_CANNOT_SIGN_DATA_EX = 0xc00e0080L,
    MQ_ERROR_CANNOT_CREATE_HASH_EX = 0xc00e0081L,MQ_ERROR_FAIL_VERIFY_SIGNATURE_EX = 0xc00e0082L,MQ_ERROR_CANNOT_DELETE_PSC_OBJECTS = 0xc00e0083L,
    MQ_ERROR_NO_MQUSER_OU = 0xc00e0084L,MQ_ERROR_CANNOT_LOAD_MQAD = 0xc00e0085L,MQ_ERROR_CANNOT_LOAD_MQDSSRV = 0xc00e0086L,
    MQ_ERROR_PROPERTIES_CONFLICT = 0xc00e0087L,MQ_ERROR_MESSAGE_NOT_FOUND = 0xc00e0088L,MQ_ERROR_CANT_RESOLVE_SITES = 0xc00e0089L,
    MQ_ERROR_NOT_SUPPORTED_BY_DEPENDENT_CLIENTS = 0xc00e008aL,MQ_ERROR_OPERATION_NOT_SUPPORTED_BY_REMOTE_COMPUTER = 0xc00e008bL,
    MQ_ERROR_NOT_A_CORRECT_OBJECT_CLASS = 0xc00e008cL,MQ_ERROR_MULTI_SORT_KEYS = 0xc00e008dL,MQ_ERROR_GC_NEEDED = 0xc00e008eL,
    MQ_ERROR_DS_BIND_ROOT_FOREST = 0xc00e008fL,MQ_ERROR_DS_LOCAL_USER = 0xc00e0090L,MQ_ERROR_Q_ADS_PROPERTY_NOT_SUPPORTED = 0xc00e0091L,
    MQ_ERROR_BAD_XML_FORMAT = 0xc00e0092L,MQ_ERROR_UNSUPPORTED_CLASS = 0xc00e0093,MQ_ERROR_UNINITIALIZED_OBJECT = 0xc00e0094,
    MQ_ERROR_CANNOT_CREATE_PSC_OBJECTS = 0xc00e0095,MQ_ERROR_CANNOT_UPDATE_PSC_OBJECTS = 0xc00e0096
  };

  enum MQWARNING {
    MQ_INFORMATION_PROPERTY = 0x400e0001,MQ_INFORMATION_ILLEGAL_PROPERTY = 0x400e0002,MQ_INFORMATION_PROPERTY_IGNORED = 0x400e0003,
    MQ_INFORMATION_UNSUPPORTED_PROPERTY = 0x400e0004,MQ_INFORMATION_DUPLICATE_PROPERTY = 0x400e0005,MQ_INFORMATION_OPERATION_PENDING = 0x400e0006,
    MQ_INFORMATION_FORMATNAME_BUFFER_TOO_SMALL = 0x400e0009,MQ_INFORMATION_INTERNAL_USER_CERT_EXIST = 0x400e000aL,
    MQ_INFORMATION_OWNER_IGNORED = 0x400e000bL
  };

  EXTERN_C const IID LIBID_MSMQ;
#ifndef __IMSMQQuery_INTERFACE_DEFINED__
#define __IMSMQQuery_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQuery;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQuery : public IDispatch {
  public:
    virtual HRESULT WINAPI LookupQueue(VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,IMSMQQueueInfos **ppqinfos) = 0;
  };
#else
  typedef struct IMSMQQueryVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQuery *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQuery *This);
      ULONG (WINAPI *Release)(IMSMQQuery *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQuery *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQuery *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQuery *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQuery *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *LookupQueue)(IMSMQQuery *This,VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,IMSMQQueueInfos **ppqinfos);
    END_INTERFACE
  } IMSMQQueryVtbl;
  interface IMSMQQuery {
    CONST_VTBL struct IMSMQQueryVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQuery_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQuery_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQuery_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQuery_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQuery_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQuery_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQuery_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQuery_LookupQueue(This,QueueGuid,ServiceTypeGuid,Label,CreateTime,ModifyTime,RelServiceType,RelLabel,RelCreateTime,RelModifyTime,ppqinfos) (This)->lpVtbl->LookupQueue(This,QueueGuid,ServiceTypeGuid,Label,CreateTime,ModifyTime,RelServiceType,RelLabel,RelCreateTime,RelModifyTime,ppqinfos)
#endif
#endif
  HRESULT WINAPI IMSMQQuery_LookupQueue_Proxy(IMSMQQuery *This,VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,IMSMQQueueInfos **ppqinfos);
  void __RPC_STUB IMSMQQuery_LookupQueue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQQueueInfo_INTERFACE_DEFINED__
#define __IMSMQQueueInfo_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQueueInfo;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQueueInfo : public IDispatch {
  public:
    virtual HRESULT WINAPI get_QueueGuid(BSTR *pbstrGuidQueue) = 0;
    virtual HRESULT WINAPI get_ServiceTypeGuid(BSTR *pbstrGuidServiceType) = 0;
    virtual HRESULT WINAPI put_ServiceTypeGuid(BSTR bstrGuidServiceType) = 0;
    virtual HRESULT WINAPI get_Label(BSTR *pbstrLabel) = 0;
    virtual HRESULT WINAPI put_Label(BSTR bstrLabel) = 0;
    virtual HRESULT WINAPI get_PathName(BSTR *pbstrPathName) = 0;
    virtual HRESULT WINAPI put_PathName(BSTR bstrPathName) = 0;
    virtual HRESULT WINAPI get_FormatName(BSTR *pbstrFormatName) = 0;
    virtual HRESULT WINAPI put_FormatName(BSTR bstrFormatName) = 0;
    virtual HRESULT WINAPI get_IsTransactional(Boolean *pisTransactional) = 0;
    virtual HRESULT WINAPI get_PrivLevel(long *plPrivLevel) = 0;
    virtual HRESULT WINAPI put_PrivLevel(long lPrivLevel) = 0;
    virtual HRESULT WINAPI get_Journal(long *plJournal) = 0;
    virtual HRESULT WINAPI put_Journal(long lJournal) = 0;
    virtual HRESULT WINAPI get_Quota(long *plQuota) = 0;
    virtual HRESULT WINAPI put_Quota(long lQuota) = 0;
    virtual HRESULT WINAPI get_BasePriority(long *plBasePriority) = 0;
    virtual HRESULT WINAPI put_BasePriority(long lBasePriority) = 0;
    virtual HRESULT WINAPI get_CreateTime(VARIANT *pvarCreateTime) = 0;
    virtual HRESULT WINAPI get_ModifyTime(VARIANT *pvarModifyTime) = 0;
    virtual HRESULT WINAPI get_Authenticate(long *plAuthenticate) = 0;
    virtual HRESULT WINAPI put_Authenticate(long lAuthenticate) = 0;
    virtual HRESULT WINAPI get_JournalQuota(long *plJournalQuota) = 0;
    virtual HRESULT WINAPI put_JournalQuota(long lJournalQuota) = 0;
    virtual HRESULT WINAPI get_IsWorldReadable(Boolean *pisWorldReadable) = 0;
    virtual HRESULT WINAPI Create(VARIANT *IsTransactional,VARIANT *IsWorldReadable) = 0;
    virtual HRESULT WINAPI Delete(void) = 0;
    virtual HRESULT WINAPI Open(long Access,long ShareMode,IMSMQQueue **ppq) = 0;
    virtual HRESULT WINAPI Refresh(void) = 0;
    virtual HRESULT WINAPI Update(void) = 0;
  };
#else
  typedef struct IMSMQQueueInfoVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQueueInfo *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQueueInfo *This);
      ULONG (WINAPI *Release)(IMSMQQueueInfo *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQueueInfo *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQueueInfo *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQueueInfo *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQueueInfo *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_QueueGuid)(IMSMQQueueInfo *This,BSTR *pbstrGuidQueue);
      HRESULT (WINAPI *get_ServiceTypeGuid)(IMSMQQueueInfo *This,BSTR *pbstrGuidServiceType);
      HRESULT (WINAPI *put_ServiceTypeGuid)(IMSMQQueueInfo *This,BSTR bstrGuidServiceType);
      HRESULT (WINAPI *get_Label)(IMSMQQueueInfo *This,BSTR *pbstrLabel);
      HRESULT (WINAPI *put_Label)(IMSMQQueueInfo *This,BSTR bstrLabel);
      HRESULT (WINAPI *get_PathName)(IMSMQQueueInfo *This,BSTR *pbstrPathName);
      HRESULT (WINAPI *put_PathName)(IMSMQQueueInfo *This,BSTR bstrPathName);
      HRESULT (WINAPI *get_FormatName)(IMSMQQueueInfo *This,BSTR *pbstrFormatName);
      HRESULT (WINAPI *put_FormatName)(IMSMQQueueInfo *This,BSTR bstrFormatName);
      HRESULT (WINAPI *get_IsTransactional)(IMSMQQueueInfo *This,Boolean *pisTransactional);
      HRESULT (WINAPI *get_PrivLevel)(IMSMQQueueInfo *This,long *plPrivLevel);
      HRESULT (WINAPI *put_PrivLevel)(IMSMQQueueInfo *This,long lPrivLevel);
      HRESULT (WINAPI *get_Journal)(IMSMQQueueInfo *This,long *plJournal);
      HRESULT (WINAPI *put_Journal)(IMSMQQueueInfo *This,long lJournal);
      HRESULT (WINAPI *get_Quota)(IMSMQQueueInfo *This,long *plQuota);
      HRESULT (WINAPI *put_Quota)(IMSMQQueueInfo *This,long lQuota);
      HRESULT (WINAPI *get_BasePriority)(IMSMQQueueInfo *This,long *plBasePriority);
      HRESULT (WINAPI *put_BasePriority)(IMSMQQueueInfo *This,long lBasePriority);
      HRESULT (WINAPI *get_CreateTime)(IMSMQQueueInfo *This,VARIANT *pvarCreateTime);
      HRESULT (WINAPI *get_ModifyTime)(IMSMQQueueInfo *This,VARIANT *pvarModifyTime);
      HRESULT (WINAPI *get_Authenticate)(IMSMQQueueInfo *This,long *plAuthenticate);
      HRESULT (WINAPI *put_Authenticate)(IMSMQQueueInfo *This,long lAuthenticate);
      HRESULT (WINAPI *get_JournalQuota)(IMSMQQueueInfo *This,long *plJournalQuota);
      HRESULT (WINAPI *put_JournalQuota)(IMSMQQueueInfo *This,long lJournalQuota);
      HRESULT (WINAPI *get_IsWorldReadable)(IMSMQQueueInfo *This,Boolean *pisWorldReadable);
      HRESULT (WINAPI *Create)(IMSMQQueueInfo *This,VARIANT *IsTransactional,VARIANT *IsWorldReadable);
      HRESULT (WINAPI *Delete)(IMSMQQueueInfo *This);
      HRESULT (WINAPI *Open)(IMSMQQueueInfo *This,long Access,long ShareMode,IMSMQQueue **ppq);
      HRESULT (WINAPI *Refresh)(IMSMQQueueInfo *This);
      HRESULT (WINAPI *Update)(IMSMQQueueInfo *This);
    END_INTERFACE
  } IMSMQQueueInfoVtbl;
  interface IMSMQQueueInfo {
    CONST_VTBL struct IMSMQQueueInfoVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQueueInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQueueInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQueueInfo_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQueueInfo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQueueInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQueueInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQueueInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQueueInfo_get_QueueGuid(This,pbstrGuidQueue) (This)->lpVtbl->get_QueueGuid(This,pbstrGuidQueue)
#define IMSMQQueueInfo_get_ServiceTypeGuid(This,pbstrGuidServiceType) (This)->lpVtbl->get_ServiceTypeGuid(This,pbstrGuidServiceType)
#define IMSMQQueueInfo_put_ServiceTypeGuid(This,bstrGuidServiceType) (This)->lpVtbl->put_ServiceTypeGuid(This,bstrGuidServiceType)
#define IMSMQQueueInfo_get_Label(This,pbstrLabel) (This)->lpVtbl->get_Label(This,pbstrLabel)
#define IMSMQQueueInfo_put_Label(This,bstrLabel) (This)->lpVtbl->put_Label(This,bstrLabel)
#define IMSMQQueueInfo_get_PathName(This,pbstrPathName) (This)->lpVtbl->get_PathName(This,pbstrPathName)
#define IMSMQQueueInfo_put_PathName(This,bstrPathName) (This)->lpVtbl->put_PathName(This,bstrPathName)
#define IMSMQQueueInfo_get_FormatName(This,pbstrFormatName) (This)->lpVtbl->get_FormatName(This,pbstrFormatName)
#define IMSMQQueueInfo_put_FormatName(This,bstrFormatName) (This)->lpVtbl->put_FormatName(This,bstrFormatName)
#define IMSMQQueueInfo_get_IsTransactional(This,pisTransactional) (This)->lpVtbl->get_IsTransactional(This,pisTransactional)
#define IMSMQQueueInfo_get_PrivLevel(This,plPrivLevel) (This)->lpVtbl->get_PrivLevel(This,plPrivLevel)
#define IMSMQQueueInfo_put_PrivLevel(This,lPrivLevel) (This)->lpVtbl->put_PrivLevel(This,lPrivLevel)
#define IMSMQQueueInfo_get_Journal(This,plJournal) (This)->lpVtbl->get_Journal(This,plJournal)
#define IMSMQQueueInfo_put_Journal(This,lJournal) (This)->lpVtbl->put_Journal(This,lJournal)
#define IMSMQQueueInfo_get_Quota(This,plQuota) (This)->lpVtbl->get_Quota(This,plQuota)
#define IMSMQQueueInfo_put_Quota(This,lQuota) (This)->lpVtbl->put_Quota(This,lQuota)
#define IMSMQQueueInfo_get_BasePriority(This,plBasePriority) (This)->lpVtbl->get_BasePriority(This,plBasePriority)
#define IMSMQQueueInfo_put_BasePriority(This,lBasePriority) (This)->lpVtbl->put_BasePriority(This,lBasePriority)
#define IMSMQQueueInfo_get_CreateTime(This,pvarCreateTime) (This)->lpVtbl->get_CreateTime(This,pvarCreateTime)
#define IMSMQQueueInfo_get_ModifyTime(This,pvarModifyTime) (This)->lpVtbl->get_ModifyTime(This,pvarModifyTime)
#define IMSMQQueueInfo_get_Authenticate(This,plAuthenticate) (This)->lpVtbl->get_Authenticate(This,plAuthenticate)
#define IMSMQQueueInfo_put_Authenticate(This,lAuthenticate) (This)->lpVtbl->put_Authenticate(This,lAuthenticate)
#define IMSMQQueueInfo_get_JournalQuota(This,plJournalQuota) (This)->lpVtbl->get_JournalQuota(This,plJournalQuota)
#define IMSMQQueueInfo_put_JournalQuota(This,lJournalQuota) (This)->lpVtbl->put_JournalQuota(This,lJournalQuota)
#define IMSMQQueueInfo_get_IsWorldReadable(This,pisWorldReadable) (This)->lpVtbl->get_IsWorldReadable(This,pisWorldReadable)
#define IMSMQQueueInfo_Create(This,IsTransactional,IsWorldReadable) (This)->lpVtbl->Create(This,IsTransactional,IsWorldReadable)
#define IMSMQQueueInfo_Delete(This) (This)->lpVtbl->Delete(This)
#define IMSMQQueueInfo_Open(This,Access,ShareMode,ppq) (This)->lpVtbl->Open(This,Access,ShareMode,ppq)
#define IMSMQQueueInfo_Refresh(This) (This)->lpVtbl->Refresh(This)
#define IMSMQQueueInfo_Update(This) (This)->lpVtbl->Update(This)
#endif
#endif
  HRESULT WINAPI IMSMQQueueInfo_get_QueueGuid_Proxy(IMSMQQueueInfo *This,BSTR *pbstrGuidQueue);
  void __RPC_STUB IMSMQQueueInfo_get_QueueGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_ServiceTypeGuid_Proxy(IMSMQQueueInfo *This,BSTR *pbstrGuidServiceType);
  void __RPC_STUB IMSMQQueueInfo_get_ServiceTypeGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_put_ServiceTypeGuid_Proxy(IMSMQQueueInfo *This,BSTR bstrGuidServiceType);
  void __RPC_STUB IMSMQQueueInfo_put_ServiceTypeGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_Label_Proxy(IMSMQQueueInfo *This,BSTR *pbstrLabel);
  void __RPC_STUB IMSMQQueueInfo_get_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_put_Label_Proxy(IMSMQQueueInfo *This,BSTR bstrLabel);
  void __RPC_STUB IMSMQQueueInfo_put_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_PathName_Proxy(IMSMQQueueInfo *This,BSTR *pbstrPathName);
  void __RPC_STUB IMSMQQueueInfo_get_PathName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_put_PathName_Proxy(IMSMQQueueInfo *This,BSTR bstrPathName);
  void __RPC_STUB IMSMQQueueInfo_put_PathName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_FormatName_Proxy(IMSMQQueueInfo *This,BSTR *pbstrFormatName);
  void __RPC_STUB IMSMQQueueInfo_get_FormatName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_put_FormatName_Proxy(IMSMQQueueInfo *This,BSTR bstrFormatName);
  void __RPC_STUB IMSMQQueueInfo_put_FormatName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_IsTransactional_Proxy(IMSMQQueueInfo *This,Boolean *pisTransactional);
  void __RPC_STUB IMSMQQueueInfo_get_IsTransactional_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_PrivLevel_Proxy(IMSMQQueueInfo *This,long *plPrivLevel);
  void __RPC_STUB IMSMQQueueInfo_get_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_put_PrivLevel_Proxy(IMSMQQueueInfo *This,long lPrivLevel);
  void __RPC_STUB IMSMQQueueInfo_put_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_Journal_Proxy(IMSMQQueueInfo *This,long *plJournal);
  void __RPC_STUB IMSMQQueueInfo_get_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_put_Journal_Proxy(IMSMQQueueInfo *This,long lJournal);
  void __RPC_STUB IMSMQQueueInfo_put_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_Quota_Proxy(IMSMQQueueInfo *This,long *plQuota);
  void __RPC_STUB IMSMQQueueInfo_get_Quota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_put_Quota_Proxy(IMSMQQueueInfo *This,long lQuota);
  void __RPC_STUB IMSMQQueueInfo_put_Quota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_BasePriority_Proxy(IMSMQQueueInfo *This,long *plBasePriority);
  void __RPC_STUB IMSMQQueueInfo_get_BasePriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_put_BasePriority_Proxy(IMSMQQueueInfo *This,long lBasePriority);
  void __RPC_STUB IMSMQQueueInfo_put_BasePriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_CreateTime_Proxy(IMSMQQueueInfo *This,VARIANT *pvarCreateTime);
  void __RPC_STUB IMSMQQueueInfo_get_CreateTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_ModifyTime_Proxy(IMSMQQueueInfo *This,VARIANT *pvarModifyTime);
  void __RPC_STUB IMSMQQueueInfo_get_ModifyTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_Authenticate_Proxy(IMSMQQueueInfo *This,long *plAuthenticate);
  void __RPC_STUB IMSMQQueueInfo_get_Authenticate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_put_Authenticate_Proxy(IMSMQQueueInfo *This,long lAuthenticate);
  void __RPC_STUB IMSMQQueueInfo_put_Authenticate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_JournalQuota_Proxy(IMSMQQueueInfo *This,long *plJournalQuota);
  void __RPC_STUB IMSMQQueueInfo_get_JournalQuota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_put_JournalQuota_Proxy(IMSMQQueueInfo *This,long lJournalQuota);
  void __RPC_STUB IMSMQQueueInfo_put_JournalQuota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_get_IsWorldReadable_Proxy(IMSMQQueueInfo *This,Boolean *pisWorldReadable);
  void __RPC_STUB IMSMQQueueInfo_get_IsWorldReadable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_Create_Proxy(IMSMQQueueInfo *This,VARIANT *IsTransactional,VARIANT *IsWorldReadable);
  void __RPC_STUB IMSMQQueueInfo_Create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_Delete_Proxy(IMSMQQueueInfo *This);
  void __RPC_STUB IMSMQQueueInfo_Delete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_Open_Proxy(IMSMQQueueInfo *This,long Access,long ShareMode,IMSMQQueue **ppq);
  void __RPC_STUB IMSMQQueueInfo_Open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_Refresh_Proxy(IMSMQQueueInfo *This);
  void __RPC_STUB IMSMQQueueInfo_Refresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo_Update_Proxy(IMSMQQueueInfo *This);
  void __RPC_STUB IMSMQQueueInfo_Update_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQQueueInfo2_INTERFACE_DEFINED__
#define __IMSMQQueueInfo2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQueueInfo2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQueueInfo2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_QueueGuid(BSTR *pbstrGuidQueue) = 0;
    virtual HRESULT WINAPI get_ServiceTypeGuid(BSTR *pbstrGuidServiceType) = 0;
    virtual HRESULT WINAPI put_ServiceTypeGuid(BSTR bstrGuidServiceType) = 0;
    virtual HRESULT WINAPI get_Label(BSTR *pbstrLabel) = 0;
    virtual HRESULT WINAPI put_Label(BSTR bstrLabel) = 0;
    virtual HRESULT WINAPI get_PathName(BSTR *pbstrPathName) = 0;
    virtual HRESULT WINAPI put_PathName(BSTR bstrPathName) = 0;
    virtual HRESULT WINAPI get_FormatName(BSTR *pbstrFormatName) = 0;
    virtual HRESULT WINAPI put_FormatName(BSTR bstrFormatName) = 0;
    virtual HRESULT WINAPI get_IsTransactional(Boolean *pisTransactional) = 0;
    virtual HRESULT WINAPI get_PrivLevel(long *plPrivLevel) = 0;
    virtual HRESULT WINAPI put_PrivLevel(long lPrivLevel) = 0;
    virtual HRESULT WINAPI get_Journal(long *plJournal) = 0;
    virtual HRESULT WINAPI put_Journal(long lJournal) = 0;
    virtual HRESULT WINAPI get_Quota(long *plQuota) = 0;
    virtual HRESULT WINAPI put_Quota(long lQuota) = 0;
    virtual HRESULT WINAPI get_BasePriority(long *plBasePriority) = 0;
    virtual HRESULT WINAPI put_BasePriority(long lBasePriority) = 0;
    virtual HRESULT WINAPI get_CreateTime(VARIANT *pvarCreateTime) = 0;
    virtual HRESULT WINAPI get_ModifyTime(VARIANT *pvarModifyTime) = 0;
    virtual HRESULT WINAPI get_Authenticate(long *plAuthenticate) = 0;
    virtual HRESULT WINAPI put_Authenticate(long lAuthenticate) = 0;
    virtual HRESULT WINAPI get_JournalQuota(long *plJournalQuota) = 0;
    virtual HRESULT WINAPI put_JournalQuota(long lJournalQuota) = 0;
    virtual HRESULT WINAPI get_IsWorldReadable(Boolean *pisWorldReadable) = 0;
    virtual HRESULT WINAPI Create(VARIANT *IsTransactional,VARIANT *IsWorldReadable) = 0;
    virtual HRESULT WINAPI Delete(void) = 0;
    virtual HRESULT WINAPI Open(long Access,long ShareMode,IMSMQQueue2 **ppq) = 0;
    virtual HRESULT WINAPI Refresh(void) = 0;
    virtual HRESULT WINAPI Update(void) = 0;
    virtual HRESULT WINAPI get_PathNameDNS(BSTR *pbstrPathNameDNS) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
    virtual HRESULT WINAPI get_Security(VARIANT *pvarSecurity) = 0;
    virtual HRESULT WINAPI put_Security(VARIANT varSecurity) = 0;
  };
#else
  typedef struct IMSMQQueueInfo2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQueueInfo2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQueueInfo2 *This);
      ULONG (WINAPI *Release)(IMSMQQueueInfo2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQueueInfo2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQueueInfo2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQueueInfo2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQueueInfo2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_QueueGuid)(IMSMQQueueInfo2 *This,BSTR *pbstrGuidQueue);
      HRESULT (WINAPI *get_ServiceTypeGuid)(IMSMQQueueInfo2 *This,BSTR *pbstrGuidServiceType);
      HRESULT (WINAPI *put_ServiceTypeGuid)(IMSMQQueueInfo2 *This,BSTR bstrGuidServiceType);
      HRESULT (WINAPI *get_Label)(IMSMQQueueInfo2 *This,BSTR *pbstrLabel);
      HRESULT (WINAPI *put_Label)(IMSMQQueueInfo2 *This,BSTR bstrLabel);
      HRESULT (WINAPI *get_PathName)(IMSMQQueueInfo2 *This,BSTR *pbstrPathName);
      HRESULT (WINAPI *put_PathName)(IMSMQQueueInfo2 *This,BSTR bstrPathName);
      HRESULT (WINAPI *get_FormatName)(IMSMQQueueInfo2 *This,BSTR *pbstrFormatName);
      HRESULT (WINAPI *put_FormatName)(IMSMQQueueInfo2 *This,BSTR bstrFormatName);
      HRESULT (WINAPI *get_IsTransactional)(IMSMQQueueInfo2 *This,Boolean *pisTransactional);
      HRESULT (WINAPI *get_PrivLevel)(IMSMQQueueInfo2 *This,long *plPrivLevel);
      HRESULT (WINAPI *put_PrivLevel)(IMSMQQueueInfo2 *This,long lPrivLevel);
      HRESULT (WINAPI *get_Journal)(IMSMQQueueInfo2 *This,long *plJournal);
      HRESULT (WINAPI *put_Journal)(IMSMQQueueInfo2 *This,long lJournal);
      HRESULT (WINAPI *get_Quota)(IMSMQQueueInfo2 *This,long *plQuota);
      HRESULT (WINAPI *put_Quota)(IMSMQQueueInfo2 *This,long lQuota);
      HRESULT (WINAPI *get_BasePriority)(IMSMQQueueInfo2 *This,long *plBasePriority);
      HRESULT (WINAPI *put_BasePriority)(IMSMQQueueInfo2 *This,long lBasePriority);
      HRESULT (WINAPI *get_CreateTime)(IMSMQQueueInfo2 *This,VARIANT *pvarCreateTime);
      HRESULT (WINAPI *get_ModifyTime)(IMSMQQueueInfo2 *This,VARIANT *pvarModifyTime);
      HRESULT (WINAPI *get_Authenticate)(IMSMQQueueInfo2 *This,long *plAuthenticate);
      HRESULT (WINAPI *put_Authenticate)(IMSMQQueueInfo2 *This,long lAuthenticate);
      HRESULT (WINAPI *get_JournalQuota)(IMSMQQueueInfo2 *This,long *plJournalQuota);
      HRESULT (WINAPI *put_JournalQuota)(IMSMQQueueInfo2 *This,long lJournalQuota);
      HRESULT (WINAPI *get_IsWorldReadable)(IMSMQQueueInfo2 *This,Boolean *pisWorldReadable);
      HRESULT (WINAPI *Create)(IMSMQQueueInfo2 *This,VARIANT *IsTransactional,VARIANT *IsWorldReadable);
      HRESULT (WINAPI *Delete)(IMSMQQueueInfo2 *This);
      HRESULT (WINAPI *Open)(IMSMQQueueInfo2 *This,long Access,long ShareMode,IMSMQQueue2 **ppq);
      HRESULT (WINAPI *Refresh)(IMSMQQueueInfo2 *This);
      HRESULT (WINAPI *Update)(IMSMQQueueInfo2 *This);
      HRESULT (WINAPI *get_PathNameDNS)(IMSMQQueueInfo2 *This,BSTR *pbstrPathNameDNS);
      HRESULT (WINAPI *get_Properties)(IMSMQQueueInfo2 *This,IDispatch **ppcolProperties);
      HRESULT (WINAPI *get_Security)(IMSMQQueueInfo2 *This,VARIANT *pvarSecurity);
      HRESULT (WINAPI *put_Security)(IMSMQQueueInfo2 *This,VARIANT varSecurity);
    END_INTERFACE
  } IMSMQQueueInfo2Vtbl;
  interface IMSMQQueueInfo2 {
    CONST_VTBL struct IMSMQQueueInfo2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQueueInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQueueInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQueueInfo2_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQueueInfo2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQueueInfo2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQueueInfo2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQueueInfo2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQueueInfo2_get_QueueGuid(This,pbstrGuidQueue) (This)->lpVtbl->get_QueueGuid(This,pbstrGuidQueue)
#define IMSMQQueueInfo2_get_ServiceTypeGuid(This,pbstrGuidServiceType) (This)->lpVtbl->get_ServiceTypeGuid(This,pbstrGuidServiceType)
#define IMSMQQueueInfo2_put_ServiceTypeGuid(This,bstrGuidServiceType) (This)->lpVtbl->put_ServiceTypeGuid(This,bstrGuidServiceType)
#define IMSMQQueueInfo2_get_Label(This,pbstrLabel) (This)->lpVtbl->get_Label(This,pbstrLabel)
#define IMSMQQueueInfo2_put_Label(This,bstrLabel) (This)->lpVtbl->put_Label(This,bstrLabel)
#define IMSMQQueueInfo2_get_PathName(This,pbstrPathName) (This)->lpVtbl->get_PathName(This,pbstrPathName)
#define IMSMQQueueInfo2_put_PathName(This,bstrPathName) (This)->lpVtbl->put_PathName(This,bstrPathName)
#define IMSMQQueueInfo2_get_FormatName(This,pbstrFormatName) (This)->lpVtbl->get_FormatName(This,pbstrFormatName)
#define IMSMQQueueInfo2_put_FormatName(This,bstrFormatName) (This)->lpVtbl->put_FormatName(This,bstrFormatName)
#define IMSMQQueueInfo2_get_IsTransactional(This,pisTransactional) (This)->lpVtbl->get_IsTransactional(This,pisTransactional)
#define IMSMQQueueInfo2_get_PrivLevel(This,plPrivLevel) (This)->lpVtbl->get_PrivLevel(This,plPrivLevel)
#define IMSMQQueueInfo2_put_PrivLevel(This,lPrivLevel) (This)->lpVtbl->put_PrivLevel(This,lPrivLevel)
#define IMSMQQueueInfo2_get_Journal(This,plJournal) (This)->lpVtbl->get_Journal(This,plJournal)
#define IMSMQQueueInfo2_put_Journal(This,lJournal) (This)->lpVtbl->put_Journal(This,lJournal)
#define IMSMQQueueInfo2_get_Quota(This,plQuota) (This)->lpVtbl->get_Quota(This,plQuota)
#define IMSMQQueueInfo2_put_Quota(This,lQuota) (This)->lpVtbl->put_Quota(This,lQuota)
#define IMSMQQueueInfo2_get_BasePriority(This,plBasePriority) (This)->lpVtbl->get_BasePriority(This,plBasePriority)
#define IMSMQQueueInfo2_put_BasePriority(This,lBasePriority) (This)->lpVtbl->put_BasePriority(This,lBasePriority)
#define IMSMQQueueInfo2_get_CreateTime(This,pvarCreateTime) (This)->lpVtbl->get_CreateTime(This,pvarCreateTime)
#define IMSMQQueueInfo2_get_ModifyTime(This,pvarModifyTime) (This)->lpVtbl->get_ModifyTime(This,pvarModifyTime)
#define IMSMQQueueInfo2_get_Authenticate(This,plAuthenticate) (This)->lpVtbl->get_Authenticate(This,plAuthenticate)
#define IMSMQQueueInfo2_put_Authenticate(This,lAuthenticate) (This)->lpVtbl->put_Authenticate(This,lAuthenticate)
#define IMSMQQueueInfo2_get_JournalQuota(This,plJournalQuota) (This)->lpVtbl->get_JournalQuota(This,plJournalQuota)
#define IMSMQQueueInfo2_put_JournalQuota(This,lJournalQuota) (This)->lpVtbl->put_JournalQuota(This,lJournalQuota)
#define IMSMQQueueInfo2_get_IsWorldReadable(This,pisWorldReadable) (This)->lpVtbl->get_IsWorldReadable(This,pisWorldReadable)
#define IMSMQQueueInfo2_Create(This,IsTransactional,IsWorldReadable) (This)->lpVtbl->Create(This,IsTransactional,IsWorldReadable)
#define IMSMQQueueInfo2_Delete(This) (This)->lpVtbl->Delete(This)
#define IMSMQQueueInfo2_Open(This,Access,ShareMode,ppq) (This)->lpVtbl->Open(This,Access,ShareMode,ppq)
#define IMSMQQueueInfo2_Refresh(This) (This)->lpVtbl->Refresh(This)
#define IMSMQQueueInfo2_Update(This) (This)->lpVtbl->Update(This)
#define IMSMQQueueInfo2_get_PathNameDNS(This,pbstrPathNameDNS) (This)->lpVtbl->get_PathNameDNS(This,pbstrPathNameDNS)
#define IMSMQQueueInfo2_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#define IMSMQQueueInfo2_get_Security(This,pvarSecurity) (This)->lpVtbl->get_Security(This,pvarSecurity)
#define IMSMQQueueInfo2_put_Security(This,varSecurity) (This)->lpVtbl->put_Security(This,varSecurity)
#endif
#endif
  HRESULT WINAPI IMSMQQueueInfo2_get_QueueGuid_Proxy(IMSMQQueueInfo2 *This,BSTR *pbstrGuidQueue);
  void __RPC_STUB IMSMQQueueInfo2_get_QueueGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_ServiceTypeGuid_Proxy(IMSMQQueueInfo2 *This,BSTR *pbstrGuidServiceType);
  void __RPC_STUB IMSMQQueueInfo2_get_ServiceTypeGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_ServiceTypeGuid_Proxy(IMSMQQueueInfo2 *This,BSTR bstrGuidServiceType);
  void __RPC_STUB IMSMQQueueInfo2_put_ServiceTypeGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_Label_Proxy(IMSMQQueueInfo2 *This,BSTR *pbstrLabel);
  void __RPC_STUB IMSMQQueueInfo2_get_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_Label_Proxy(IMSMQQueueInfo2 *This,BSTR bstrLabel);
  void __RPC_STUB IMSMQQueueInfo2_put_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_PathName_Proxy(IMSMQQueueInfo2 *This,BSTR *pbstrPathName);
  void __RPC_STUB IMSMQQueueInfo2_get_PathName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_PathName_Proxy(IMSMQQueueInfo2 *This,BSTR bstrPathName);
  void __RPC_STUB IMSMQQueueInfo2_put_PathName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_FormatName_Proxy(IMSMQQueueInfo2 *This,BSTR *pbstrFormatName);
  void __RPC_STUB IMSMQQueueInfo2_get_FormatName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_FormatName_Proxy(IMSMQQueueInfo2 *This,BSTR bstrFormatName);
  void __RPC_STUB IMSMQQueueInfo2_put_FormatName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_IsTransactional_Proxy(IMSMQQueueInfo2 *This,Boolean *pisTransactional);
  void __RPC_STUB IMSMQQueueInfo2_get_IsTransactional_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_PrivLevel_Proxy(IMSMQQueueInfo2 *This,long *plPrivLevel);
  void __RPC_STUB IMSMQQueueInfo2_get_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_PrivLevel_Proxy(IMSMQQueueInfo2 *This,long lPrivLevel);
  void __RPC_STUB IMSMQQueueInfo2_put_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_Journal_Proxy(IMSMQQueueInfo2 *This,long *plJournal);
  void __RPC_STUB IMSMQQueueInfo2_get_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_Journal_Proxy(IMSMQQueueInfo2 *This,long lJournal);
  void __RPC_STUB IMSMQQueueInfo2_put_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_Quota_Proxy(IMSMQQueueInfo2 *This,long *plQuota);
  void __RPC_STUB IMSMQQueueInfo2_get_Quota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_Quota_Proxy(IMSMQQueueInfo2 *This,long lQuota);
  void __RPC_STUB IMSMQQueueInfo2_put_Quota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_BasePriority_Proxy(IMSMQQueueInfo2 *This,long *plBasePriority);
  void __RPC_STUB IMSMQQueueInfo2_get_BasePriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_BasePriority_Proxy(IMSMQQueueInfo2 *This,long lBasePriority);
  void __RPC_STUB IMSMQQueueInfo2_put_BasePriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_CreateTime_Proxy(IMSMQQueueInfo2 *This,VARIANT *pvarCreateTime);
  void __RPC_STUB IMSMQQueueInfo2_get_CreateTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_ModifyTime_Proxy(IMSMQQueueInfo2 *This,VARIANT *pvarModifyTime);
  void __RPC_STUB IMSMQQueueInfo2_get_ModifyTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_Authenticate_Proxy(IMSMQQueueInfo2 *This,long *plAuthenticate);
  void __RPC_STUB IMSMQQueueInfo2_get_Authenticate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_Authenticate_Proxy(IMSMQQueueInfo2 *This,long lAuthenticate);
  void __RPC_STUB IMSMQQueueInfo2_put_Authenticate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_JournalQuota_Proxy(IMSMQQueueInfo2 *This,long *plJournalQuota);
  void __RPC_STUB IMSMQQueueInfo2_get_JournalQuota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_JournalQuota_Proxy(IMSMQQueueInfo2 *This,long lJournalQuota);
  void __RPC_STUB IMSMQQueueInfo2_put_JournalQuota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_IsWorldReadable_Proxy(IMSMQQueueInfo2 *This,Boolean *pisWorldReadable);
  void __RPC_STUB IMSMQQueueInfo2_get_IsWorldReadable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_Create_Proxy(IMSMQQueueInfo2 *This,VARIANT *IsTransactional,VARIANT *IsWorldReadable);
  void __RPC_STUB IMSMQQueueInfo2_Create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_Delete_Proxy(IMSMQQueueInfo2 *This);
  void __RPC_STUB IMSMQQueueInfo2_Delete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_Open_Proxy(IMSMQQueueInfo2 *This,long Access,long ShareMode,IMSMQQueue2 **ppq);
  void __RPC_STUB IMSMQQueueInfo2_Open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_Refresh_Proxy(IMSMQQueueInfo2 *This);
  void __RPC_STUB IMSMQQueueInfo2_Refresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_Update_Proxy(IMSMQQueueInfo2 *This);
  void __RPC_STUB IMSMQQueueInfo2_Update_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_PathNameDNS_Proxy(IMSMQQueueInfo2 *This,BSTR *pbstrPathNameDNS);
  void __RPC_STUB IMSMQQueueInfo2_get_PathNameDNS_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_Properties_Proxy(IMSMQQueueInfo2 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQQueueInfo2_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_get_Security_Proxy(IMSMQQueueInfo2 *This,VARIANT *pvarSecurity);
  void __RPC_STUB IMSMQQueueInfo2_get_Security_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo2_put_Security_Proxy(IMSMQQueueInfo2 *This,VARIANT varSecurity);
  void __RPC_STUB IMSMQQueueInfo2_put_Security_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQQueueInfo3_INTERFACE_DEFINED__
#define __IMSMQQueueInfo3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQueueInfo3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQueueInfo3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_QueueGuid(BSTR *pbstrGuidQueue) = 0;
    virtual HRESULT WINAPI get_ServiceTypeGuid(BSTR *pbstrGuidServiceType) = 0;
    virtual HRESULT WINAPI put_ServiceTypeGuid(BSTR bstrGuidServiceType) = 0;
    virtual HRESULT WINAPI get_Label(BSTR *pbstrLabel) = 0;
    virtual HRESULT WINAPI put_Label(BSTR bstrLabel) = 0;
    virtual HRESULT WINAPI get_PathName(BSTR *pbstrPathName) = 0;
    virtual HRESULT WINAPI put_PathName(BSTR bstrPathName) = 0;
    virtual HRESULT WINAPI get_FormatName(BSTR *pbstrFormatName) = 0;
    virtual HRESULT WINAPI put_FormatName(BSTR bstrFormatName) = 0;
    virtual HRESULT WINAPI get_IsTransactional(Boolean *pisTransactional) = 0;
    virtual HRESULT WINAPI get_PrivLevel(long *plPrivLevel) = 0;
    virtual HRESULT WINAPI put_PrivLevel(long lPrivLevel) = 0;
    virtual HRESULT WINAPI get_Journal(long *plJournal) = 0;
    virtual HRESULT WINAPI put_Journal(long lJournal) = 0;
    virtual HRESULT WINAPI get_Quota(long *plQuota) = 0;
    virtual HRESULT WINAPI put_Quota(long lQuota) = 0;
    virtual HRESULT WINAPI get_BasePriority(long *plBasePriority) = 0;
    virtual HRESULT WINAPI put_BasePriority(long lBasePriority) = 0;
    virtual HRESULT WINAPI get_CreateTime(VARIANT *pvarCreateTime) = 0;
    virtual HRESULT WINAPI get_ModifyTime(VARIANT *pvarModifyTime) = 0;
    virtual HRESULT WINAPI get_Authenticate(long *plAuthenticate) = 0;
    virtual HRESULT WINAPI put_Authenticate(long lAuthenticate) = 0;
    virtual HRESULT WINAPI get_JournalQuota(long *plJournalQuota) = 0;
    virtual HRESULT WINAPI put_JournalQuota(long lJournalQuota) = 0;
    virtual HRESULT WINAPI get_IsWorldReadable(Boolean *pisWorldReadable) = 0;
    virtual HRESULT WINAPI Create(VARIANT *IsTransactional,VARIANT *IsWorldReadable) = 0;
    virtual HRESULT WINAPI Delete(void) = 0;
    virtual HRESULT WINAPI Open(long Access,long ShareMode,IMSMQQueue3 **ppq) = 0;
    virtual HRESULT WINAPI Refresh(void) = 0;
    virtual HRESULT WINAPI Update(void) = 0;
    virtual HRESULT WINAPI get_PathNameDNS(BSTR *pbstrPathNameDNS) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
    virtual HRESULT WINAPI get_Security(VARIANT *pvarSecurity) = 0;
    virtual HRESULT WINAPI put_Security(VARIANT varSecurity) = 0;
    virtual HRESULT WINAPI get_IsTransactional2(VARIANT_BOOL *pisTransactional) = 0;
    virtual HRESULT WINAPI get_IsWorldReadable2(VARIANT_BOOL *pisWorldReadable) = 0;
    virtual HRESULT WINAPI get_MulticastAddress(BSTR *pbstrMulticastAddress) = 0;
    virtual HRESULT WINAPI put_MulticastAddress(BSTR bstrMulticastAddress) = 0;
    virtual HRESULT WINAPI get_ADsPath(BSTR *pbstrADsPath) = 0;
  };
#else
  typedef struct IMSMQQueueInfo3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQueueInfo3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQueueInfo3 *This);
      ULONG (WINAPI *Release)(IMSMQQueueInfo3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQueueInfo3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQueueInfo3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQueueInfo3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQueueInfo3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_QueueGuid)(IMSMQQueueInfo3 *This,BSTR *pbstrGuidQueue);
      HRESULT (WINAPI *get_ServiceTypeGuid)(IMSMQQueueInfo3 *This,BSTR *pbstrGuidServiceType);
      HRESULT (WINAPI *put_ServiceTypeGuid)(IMSMQQueueInfo3 *This,BSTR bstrGuidServiceType);
      HRESULT (WINAPI *get_Label)(IMSMQQueueInfo3 *This,BSTR *pbstrLabel);
      HRESULT (WINAPI *put_Label)(IMSMQQueueInfo3 *This,BSTR bstrLabel);
      HRESULT (WINAPI *get_PathName)(IMSMQQueueInfo3 *This,BSTR *pbstrPathName);
      HRESULT (WINAPI *put_PathName)(IMSMQQueueInfo3 *This,BSTR bstrPathName);
      HRESULT (WINAPI *get_FormatName)(IMSMQQueueInfo3 *This,BSTR *pbstrFormatName);
      HRESULT (WINAPI *put_FormatName)(IMSMQQueueInfo3 *This,BSTR bstrFormatName);
      HRESULT (WINAPI *get_IsTransactional)(IMSMQQueueInfo3 *This,Boolean *pisTransactional);
      HRESULT (WINAPI *get_PrivLevel)(IMSMQQueueInfo3 *This,long *plPrivLevel);
      HRESULT (WINAPI *put_PrivLevel)(IMSMQQueueInfo3 *This,long lPrivLevel);
      HRESULT (WINAPI *get_Journal)(IMSMQQueueInfo3 *This,long *plJournal);
      HRESULT (WINAPI *put_Journal)(IMSMQQueueInfo3 *This,long lJournal);
      HRESULT (WINAPI *get_Quota)(IMSMQQueueInfo3 *This,long *plQuota);
      HRESULT (WINAPI *put_Quota)(IMSMQQueueInfo3 *This,long lQuota);
      HRESULT (WINAPI *get_BasePriority)(IMSMQQueueInfo3 *This,long *plBasePriority);
      HRESULT (WINAPI *put_BasePriority)(IMSMQQueueInfo3 *This,long lBasePriority);
      HRESULT (WINAPI *get_CreateTime)(IMSMQQueueInfo3 *This,VARIANT *pvarCreateTime);
      HRESULT (WINAPI *get_ModifyTime)(IMSMQQueueInfo3 *This,VARIANT *pvarModifyTime);
      HRESULT (WINAPI *get_Authenticate)(IMSMQQueueInfo3 *This,long *plAuthenticate);
      HRESULT (WINAPI *put_Authenticate)(IMSMQQueueInfo3 *This,long lAuthenticate);
      HRESULT (WINAPI *get_JournalQuota)(IMSMQQueueInfo3 *This,long *plJournalQuota);
      HRESULT (WINAPI *put_JournalQuota)(IMSMQQueueInfo3 *This,long lJournalQuota);
      HRESULT (WINAPI *get_IsWorldReadable)(IMSMQQueueInfo3 *This,Boolean *pisWorldReadable);
      HRESULT (WINAPI *Create)(IMSMQQueueInfo3 *This,VARIANT *IsTransactional,VARIANT *IsWorldReadable);
      HRESULT (WINAPI *Delete)(IMSMQQueueInfo3 *This);
      HRESULT (WINAPI *Open)(IMSMQQueueInfo3 *This,long Access,long ShareMode,IMSMQQueue3 **ppq);
      HRESULT (WINAPI *Refresh)(IMSMQQueueInfo3 *This);
      HRESULT (WINAPI *Update)(IMSMQQueueInfo3 *This);
      HRESULT (WINAPI *get_PathNameDNS)(IMSMQQueueInfo3 *This,BSTR *pbstrPathNameDNS);
      HRESULT (WINAPI *get_Properties)(IMSMQQueueInfo3 *This,IDispatch **ppcolProperties);
      HRESULT (WINAPI *get_Security)(IMSMQQueueInfo3 *This,VARIANT *pvarSecurity);
      HRESULT (WINAPI *put_Security)(IMSMQQueueInfo3 *This,VARIANT varSecurity);
      HRESULT (WINAPI *get_IsTransactional2)(IMSMQQueueInfo3 *This,VARIANT_BOOL *pisTransactional);
      HRESULT (WINAPI *get_IsWorldReadable2)(IMSMQQueueInfo3 *This,VARIANT_BOOL *pisWorldReadable);
      HRESULT (WINAPI *get_MulticastAddress)(IMSMQQueueInfo3 *This,BSTR *pbstrMulticastAddress);
      HRESULT (WINAPI *put_MulticastAddress)(IMSMQQueueInfo3 *This,BSTR bstrMulticastAddress);
      HRESULT (WINAPI *get_ADsPath)(IMSMQQueueInfo3 *This,BSTR *pbstrADsPath);
    END_INTERFACE
  } IMSMQQueueInfo3Vtbl;
  interface IMSMQQueueInfo3 {
    CONST_VTBL struct IMSMQQueueInfo3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQueueInfo3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQueueInfo3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQueueInfo3_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQueueInfo3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQueueInfo3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQueueInfo3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQueueInfo3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQueueInfo3_get_QueueGuid(This,pbstrGuidQueue) (This)->lpVtbl->get_QueueGuid(This,pbstrGuidQueue)
#define IMSMQQueueInfo3_get_ServiceTypeGuid(This,pbstrGuidServiceType) (This)->lpVtbl->get_ServiceTypeGuid(This,pbstrGuidServiceType)
#define IMSMQQueueInfo3_put_ServiceTypeGuid(This,bstrGuidServiceType) (This)->lpVtbl->put_ServiceTypeGuid(This,bstrGuidServiceType)
#define IMSMQQueueInfo3_get_Label(This,pbstrLabel) (This)->lpVtbl->get_Label(This,pbstrLabel)
#define IMSMQQueueInfo3_put_Label(This,bstrLabel) (This)->lpVtbl->put_Label(This,bstrLabel)
#define IMSMQQueueInfo3_get_PathName(This,pbstrPathName) (This)->lpVtbl->get_PathName(This,pbstrPathName)
#define IMSMQQueueInfo3_put_PathName(This,bstrPathName) (This)->lpVtbl->put_PathName(This,bstrPathName)
#define IMSMQQueueInfo3_get_FormatName(This,pbstrFormatName) (This)->lpVtbl->get_FormatName(This,pbstrFormatName)
#define IMSMQQueueInfo3_put_FormatName(This,bstrFormatName) (This)->lpVtbl->put_FormatName(This,bstrFormatName)
#define IMSMQQueueInfo3_get_IsTransactional(This,pisTransactional) (This)->lpVtbl->get_IsTransactional(This,pisTransactional)
#define IMSMQQueueInfo3_get_PrivLevel(This,plPrivLevel) (This)->lpVtbl->get_PrivLevel(This,plPrivLevel)
#define IMSMQQueueInfo3_put_PrivLevel(This,lPrivLevel) (This)->lpVtbl->put_PrivLevel(This,lPrivLevel)
#define IMSMQQueueInfo3_get_Journal(This,plJournal) (This)->lpVtbl->get_Journal(This,plJournal)
#define IMSMQQueueInfo3_put_Journal(This,lJournal) (This)->lpVtbl->put_Journal(This,lJournal)
#define IMSMQQueueInfo3_get_Quota(This,plQuota) (This)->lpVtbl->get_Quota(This,plQuota)
#define IMSMQQueueInfo3_put_Quota(This,lQuota) (This)->lpVtbl->put_Quota(This,lQuota)
#define IMSMQQueueInfo3_get_BasePriority(This,plBasePriority) (This)->lpVtbl->get_BasePriority(This,plBasePriority)
#define IMSMQQueueInfo3_put_BasePriority(This,lBasePriority) (This)->lpVtbl->put_BasePriority(This,lBasePriority)
#define IMSMQQueueInfo3_get_CreateTime(This,pvarCreateTime) (This)->lpVtbl->get_CreateTime(This,pvarCreateTime)
#define IMSMQQueueInfo3_get_ModifyTime(This,pvarModifyTime) (This)->lpVtbl->get_ModifyTime(This,pvarModifyTime)
#define IMSMQQueueInfo3_get_Authenticate(This,plAuthenticate) (This)->lpVtbl->get_Authenticate(This,plAuthenticate)
#define IMSMQQueueInfo3_put_Authenticate(This,lAuthenticate) (This)->lpVtbl->put_Authenticate(This,lAuthenticate)
#define IMSMQQueueInfo3_get_JournalQuota(This,plJournalQuota) (This)->lpVtbl->get_JournalQuota(This,plJournalQuota)
#define IMSMQQueueInfo3_put_JournalQuota(This,lJournalQuota) (This)->lpVtbl->put_JournalQuota(This,lJournalQuota)
#define IMSMQQueueInfo3_get_IsWorldReadable(This,pisWorldReadable) (This)->lpVtbl->get_IsWorldReadable(This,pisWorldReadable)
#define IMSMQQueueInfo3_Create(This,IsTransactional,IsWorldReadable) (This)->lpVtbl->Create(This,IsTransactional,IsWorldReadable)
#define IMSMQQueueInfo3_Delete(This) (This)->lpVtbl->Delete(This)
#define IMSMQQueueInfo3_Open(This,Access,ShareMode,ppq) (This)->lpVtbl->Open(This,Access,ShareMode,ppq)
#define IMSMQQueueInfo3_Refresh(This) (This)->lpVtbl->Refresh(This)
#define IMSMQQueueInfo3_Update(This) (This)->lpVtbl->Update(This)
#define IMSMQQueueInfo3_get_PathNameDNS(This,pbstrPathNameDNS) (This)->lpVtbl->get_PathNameDNS(This,pbstrPathNameDNS)
#define IMSMQQueueInfo3_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#define IMSMQQueueInfo3_get_Security(This,pvarSecurity) (This)->lpVtbl->get_Security(This,pvarSecurity)
#define IMSMQQueueInfo3_put_Security(This,varSecurity) (This)->lpVtbl->put_Security(This,varSecurity)
#define IMSMQQueueInfo3_get_IsTransactional2(This,pisTransactional) (This)->lpVtbl->get_IsTransactional2(This,pisTransactional)
#define IMSMQQueueInfo3_get_IsWorldReadable2(This,pisWorldReadable) (This)->lpVtbl->get_IsWorldReadable2(This,pisWorldReadable)
#define IMSMQQueueInfo3_get_MulticastAddress(This,pbstrMulticastAddress) (This)->lpVtbl->get_MulticastAddress(This,pbstrMulticastAddress)
#define IMSMQQueueInfo3_put_MulticastAddress(This,bstrMulticastAddress) (This)->lpVtbl->put_MulticastAddress(This,bstrMulticastAddress)
#define IMSMQQueueInfo3_get_ADsPath(This,pbstrADsPath) (This)->lpVtbl->get_ADsPath(This,pbstrADsPath)
#endif
#endif
  HRESULT WINAPI IMSMQQueueInfo3_get_QueueGuid_Proxy(IMSMQQueueInfo3 *This,BSTR *pbstrGuidQueue);
  void __RPC_STUB IMSMQQueueInfo3_get_QueueGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_ServiceTypeGuid_Proxy(IMSMQQueueInfo3 *This,BSTR *pbstrGuidServiceType);
  void __RPC_STUB IMSMQQueueInfo3_get_ServiceTypeGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_ServiceTypeGuid_Proxy(IMSMQQueueInfo3 *This,BSTR bstrGuidServiceType);
  void __RPC_STUB IMSMQQueueInfo3_put_ServiceTypeGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_Label_Proxy(IMSMQQueueInfo3 *This,BSTR *pbstrLabel);
  void __RPC_STUB IMSMQQueueInfo3_get_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_Label_Proxy(IMSMQQueueInfo3 *This,BSTR bstrLabel);
  void __RPC_STUB IMSMQQueueInfo3_put_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_PathName_Proxy(IMSMQQueueInfo3 *This,BSTR *pbstrPathName);
  void __RPC_STUB IMSMQQueueInfo3_get_PathName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_PathName_Proxy(IMSMQQueueInfo3 *This,BSTR bstrPathName);
  void __RPC_STUB IMSMQQueueInfo3_put_PathName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_FormatName_Proxy(IMSMQQueueInfo3 *This,BSTR *pbstrFormatName);
  void __RPC_STUB IMSMQQueueInfo3_get_FormatName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_FormatName_Proxy(IMSMQQueueInfo3 *This,BSTR bstrFormatName);
  void __RPC_STUB IMSMQQueueInfo3_put_FormatName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_IsTransactional_Proxy(IMSMQQueueInfo3 *This,Boolean *pisTransactional);
  void __RPC_STUB IMSMQQueueInfo3_get_IsTransactional_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_PrivLevel_Proxy(IMSMQQueueInfo3 *This,long *plPrivLevel);
  void __RPC_STUB IMSMQQueueInfo3_get_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_PrivLevel_Proxy(IMSMQQueueInfo3 *This,long lPrivLevel);
  void __RPC_STUB IMSMQQueueInfo3_put_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_Journal_Proxy(IMSMQQueueInfo3 *This,long *plJournal);
  void __RPC_STUB IMSMQQueueInfo3_get_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_Journal_Proxy(IMSMQQueueInfo3 *This,long lJournal);
  void __RPC_STUB IMSMQQueueInfo3_put_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_Quota_Proxy(IMSMQQueueInfo3 *This,long *plQuota);
  void __RPC_STUB IMSMQQueueInfo3_get_Quota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_Quota_Proxy(IMSMQQueueInfo3 *This,long lQuota);
  void __RPC_STUB IMSMQQueueInfo3_put_Quota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_BasePriority_Proxy(IMSMQQueueInfo3 *This,long *plBasePriority);
  void __RPC_STUB IMSMQQueueInfo3_get_BasePriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_BasePriority_Proxy(IMSMQQueueInfo3 *This,long lBasePriority);
  void __RPC_STUB IMSMQQueueInfo3_put_BasePriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_CreateTime_Proxy(IMSMQQueueInfo3 *This,VARIANT *pvarCreateTime);
  void __RPC_STUB IMSMQQueueInfo3_get_CreateTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_ModifyTime_Proxy(IMSMQQueueInfo3 *This,VARIANT *pvarModifyTime);
  void __RPC_STUB IMSMQQueueInfo3_get_ModifyTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_Authenticate_Proxy(IMSMQQueueInfo3 *This,long *plAuthenticate);
  void __RPC_STUB IMSMQQueueInfo3_get_Authenticate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_Authenticate_Proxy(IMSMQQueueInfo3 *This,long lAuthenticate);
  void __RPC_STUB IMSMQQueueInfo3_put_Authenticate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_JournalQuota_Proxy(IMSMQQueueInfo3 *This,long *plJournalQuota);
  void __RPC_STUB IMSMQQueueInfo3_get_JournalQuota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_JournalQuota_Proxy(IMSMQQueueInfo3 *This,long lJournalQuota);
  void __RPC_STUB IMSMQQueueInfo3_put_JournalQuota_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_IsWorldReadable_Proxy(IMSMQQueueInfo3 *This,Boolean *pisWorldReadable);
  void __RPC_STUB IMSMQQueueInfo3_get_IsWorldReadable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_Create_Proxy(IMSMQQueueInfo3 *This,VARIANT *IsTransactional,VARIANT *IsWorldReadable);
  void __RPC_STUB IMSMQQueueInfo3_Create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_Delete_Proxy(IMSMQQueueInfo3 *This);
  void __RPC_STUB IMSMQQueueInfo3_Delete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_Open_Proxy(IMSMQQueueInfo3 *This,long Access,long ShareMode,IMSMQQueue3 **ppq);
  void __RPC_STUB IMSMQQueueInfo3_Open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_Refresh_Proxy(IMSMQQueueInfo3 *This);
  void __RPC_STUB IMSMQQueueInfo3_Refresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_Update_Proxy(IMSMQQueueInfo3 *This);
  void __RPC_STUB IMSMQQueueInfo3_Update_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_PathNameDNS_Proxy(IMSMQQueueInfo3 *This,BSTR *pbstrPathNameDNS);
  void __RPC_STUB IMSMQQueueInfo3_get_PathNameDNS_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_Properties_Proxy(IMSMQQueueInfo3 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQQueueInfo3_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_Security_Proxy(IMSMQQueueInfo3 *This,VARIANT *pvarSecurity);
  void __RPC_STUB IMSMQQueueInfo3_get_Security_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_Security_Proxy(IMSMQQueueInfo3 *This,VARIANT varSecurity);
  void __RPC_STUB IMSMQQueueInfo3_put_Security_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_IsTransactional2_Proxy(IMSMQQueueInfo3 *This,VARIANT_BOOL *pisTransactional);
  void __RPC_STUB IMSMQQueueInfo3_get_IsTransactional2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_IsWorldReadable2_Proxy(IMSMQQueueInfo3 *This,VARIANT_BOOL *pisWorldReadable);
  void __RPC_STUB IMSMQQueueInfo3_get_IsWorldReadable2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_MulticastAddress_Proxy(IMSMQQueueInfo3 *This,BSTR *pbstrMulticastAddress);
  void __RPC_STUB IMSMQQueueInfo3_get_MulticastAddress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_put_MulticastAddress_Proxy(IMSMQQueueInfo3 *This,BSTR bstrMulticastAddress);
  void __RPC_STUB IMSMQQueueInfo3_put_MulticastAddress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfo3_get_ADsPath_Proxy(IMSMQQueueInfo3 *This,BSTR *pbstrADsPath);
  void __RPC_STUB IMSMQQueueInfo3_get_ADsPath_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQQueue_INTERFACE_DEFINED__
#define __IMSMQQueue_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQueue;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQueue : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Access(long *plAccess) = 0;
    virtual HRESULT WINAPI get_ShareMode(long *plShareMode) = 0;
    virtual HRESULT WINAPI get_QueueInfo(IMSMQQueueInfo **ppqinfo) = 0;
    virtual HRESULT WINAPI get_Handle(long *plHandle) = 0;
    virtual HRESULT WINAPI get_IsOpen(Boolean *pisOpen) = 0;
    virtual HRESULT WINAPI Close(void) = 0;
    virtual HRESULT WINAPI Receive(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI Peek(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI EnableNotification(IMSMQEvent *Event,VARIANT *Cursor,VARIANT *ReceiveTimeout) = 0;
    virtual HRESULT WINAPI Reset(void) = 0;
    virtual HRESULT WINAPI ReceiveCurrent(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI PeekNext(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI PeekCurrent(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
  };
#else
  typedef struct IMSMQQueueVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQueue *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQueue *This);
      ULONG (WINAPI *Release)(IMSMQQueue *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQueue *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQueue *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQueue *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQueue *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Access)(IMSMQQueue *This,long *plAccess);
      HRESULT (WINAPI *get_ShareMode)(IMSMQQueue *This,long *plShareMode);
      HRESULT (WINAPI *get_QueueInfo)(IMSMQQueue *This,IMSMQQueueInfo **ppqinfo);
      HRESULT (WINAPI *get_Handle)(IMSMQQueue *This,long *plHandle);
      HRESULT (WINAPI *get_IsOpen)(IMSMQQueue *This,Boolean *pisOpen);
      HRESULT (WINAPI *Close)(IMSMQQueue *This);
      HRESULT (WINAPI *Receive)(IMSMQQueue *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *Peek)(IMSMQQueue *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *EnableNotification)(IMSMQQueue *This,IMSMQEvent *Event,VARIANT *Cursor,VARIANT *ReceiveTimeout);
      HRESULT (WINAPI *Reset)(IMSMQQueue *This);
      HRESULT (WINAPI *ReceiveCurrent)(IMSMQQueue *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *PeekNext)(IMSMQQueue *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *PeekCurrent)(IMSMQQueue *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
    END_INTERFACE
  } IMSMQQueueVtbl;
  interface IMSMQQueue {
    CONST_VTBL struct IMSMQQueueVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQueue_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQueue_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQueue_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQueue_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQueue_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQueue_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQueue_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQueue_get_Access(This,plAccess) (This)->lpVtbl->get_Access(This,plAccess)
#define IMSMQQueue_get_ShareMode(This,plShareMode) (This)->lpVtbl->get_ShareMode(This,plShareMode)
#define IMSMQQueue_get_QueueInfo(This,ppqinfo) (This)->lpVtbl->get_QueueInfo(This,ppqinfo)
#define IMSMQQueue_get_Handle(This,plHandle) (This)->lpVtbl->get_Handle(This,plHandle)
#define IMSMQQueue_get_IsOpen(This,pisOpen) (This)->lpVtbl->get_IsOpen(This,pisOpen)
#define IMSMQQueue_Close(This) (This)->lpVtbl->Close(This)
#define IMSMQQueue_Receive(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->Receive(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue_Peek(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->Peek(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue_EnableNotification(This,Event,Cursor,ReceiveTimeout) (This)->lpVtbl->EnableNotification(This,Event,Cursor,ReceiveTimeout)
#define IMSMQQueue_Reset(This) (This)->lpVtbl->Reset(This)
#define IMSMQQueue_ReceiveCurrent(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->ReceiveCurrent(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue_PeekNext(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->PeekNext(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue_PeekCurrent(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->PeekCurrent(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#endif
#endif
  HRESULT WINAPI IMSMQQueue_get_Access_Proxy(IMSMQQueue *This,long *plAccess);
  void __RPC_STUB IMSMQQueue_get_Access_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_get_ShareMode_Proxy(IMSMQQueue *This,long *plShareMode);
  void __RPC_STUB IMSMQQueue_get_ShareMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_get_QueueInfo_Proxy(IMSMQQueue *This,IMSMQQueueInfo **ppqinfo);
  void __RPC_STUB IMSMQQueue_get_QueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_get_Handle_Proxy(IMSMQQueue *This,long *plHandle);
  void __RPC_STUB IMSMQQueue_get_Handle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_get_IsOpen_Proxy(IMSMQQueue *This,Boolean *pisOpen);
  void __RPC_STUB IMSMQQueue_get_IsOpen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_Close_Proxy(IMSMQQueue *This);
  void __RPC_STUB IMSMQQueue_Close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_Receive_Proxy(IMSMQQueue *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue_Receive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_Peek_Proxy(IMSMQQueue *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue_Peek_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_EnableNotification_Proxy(IMSMQQueue *This,IMSMQEvent *Event,VARIANT *Cursor,VARIANT *ReceiveTimeout);
  void __RPC_STUB IMSMQQueue_EnableNotification_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_Reset_Proxy(IMSMQQueue *This);
  void __RPC_STUB IMSMQQueue_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_ReceiveCurrent_Proxy(IMSMQQueue *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue_ReceiveCurrent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_PeekNext_Proxy(IMSMQQueue *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue_PeekNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue_PeekCurrent_Proxy(IMSMQQueue *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue_PeekCurrent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQQueue2_INTERFACE_DEFINED__
#define __IMSMQQueue2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQueue2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQueue2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Access(long *plAccess) = 0;
    virtual HRESULT WINAPI get_ShareMode(long *plShareMode) = 0;
    virtual HRESULT WINAPI get_QueueInfo(IMSMQQueueInfo2 **ppqinfo) = 0;
    virtual HRESULT WINAPI get_Handle(long *plHandle) = 0;
    virtual HRESULT WINAPI get_IsOpen(Boolean *pisOpen) = 0;
    virtual HRESULT WINAPI Close(void) = 0;
    virtual HRESULT WINAPI Receive_v1(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI Peek_v1(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI EnableNotification(IMSMQEvent2 *Event,VARIANT *Cursor,VARIANT *ReceiveTimeout) = 0;
    virtual HRESULT WINAPI Reset(void) = 0;
    virtual HRESULT WINAPI ReceiveCurrent_v1(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI PeekNext_v1(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI PeekCurrent_v1(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI Receive(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg) = 0;
    virtual HRESULT WINAPI Peek(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg) = 0;
    virtual HRESULT WINAPI ReceiveCurrent(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg) = 0;
    virtual HRESULT WINAPI PeekNext(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg) = 0;
    virtual HRESULT WINAPI PeekCurrent(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQQueue2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQueue2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQueue2 *This);
      ULONG (WINAPI *Release)(IMSMQQueue2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQueue2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQueue2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQueue2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQueue2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Access)(IMSMQQueue2 *This,long *plAccess);
      HRESULT (WINAPI *get_ShareMode)(IMSMQQueue2 *This,long *plShareMode);
      HRESULT (WINAPI *get_QueueInfo)(IMSMQQueue2 *This,IMSMQQueueInfo2 **ppqinfo);
      HRESULT (WINAPI *get_Handle)(IMSMQQueue2 *This,long *plHandle);
      HRESULT (WINAPI *get_IsOpen)(IMSMQQueue2 *This,Boolean *pisOpen);
      HRESULT (WINAPI *Close)(IMSMQQueue2 *This);
      HRESULT (WINAPI *Receive_v1)(IMSMQQueue2 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *Peek_v1)(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *EnableNotification)(IMSMQQueue2 *This,IMSMQEvent2 *Event,VARIANT *Cursor,VARIANT *ReceiveTimeout);
      HRESULT (WINAPI *Reset)(IMSMQQueue2 *This);
      HRESULT (WINAPI *ReceiveCurrent_v1)(IMSMQQueue2 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *PeekNext_v1)(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *PeekCurrent_v1)(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *Receive)(IMSMQQueue2 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg);
      HRESULT (WINAPI *Peek)(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg);
      HRESULT (WINAPI *ReceiveCurrent)(IMSMQQueue2 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg);
      HRESULT (WINAPI *PeekNext)(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg);
      HRESULT (WINAPI *PeekCurrent)(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg);
      HRESULT (WINAPI *get_Properties)(IMSMQQueue2 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQQueue2Vtbl;
  interface IMSMQQueue2 {
    CONST_VTBL struct IMSMQQueue2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQueue2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQueue2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQueue2_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQueue2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQueue2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQueue2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQueue2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQueue2_get_Access(This,plAccess) (This)->lpVtbl->get_Access(This,plAccess)
#define IMSMQQueue2_get_ShareMode(This,plShareMode) (This)->lpVtbl->get_ShareMode(This,plShareMode)
#define IMSMQQueue2_get_QueueInfo(This,ppqinfo) (This)->lpVtbl->get_QueueInfo(This,ppqinfo)
#define IMSMQQueue2_get_Handle(This,plHandle) (This)->lpVtbl->get_Handle(This,plHandle)
#define IMSMQQueue2_get_IsOpen(This,pisOpen) (This)->lpVtbl->get_IsOpen(This,pisOpen)
#define IMSMQQueue2_Close(This) (This)->lpVtbl->Close(This)
#define IMSMQQueue2_Receive_v1(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->Receive_v1(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue2_Peek_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->Peek_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue2_EnableNotification(This,Event,Cursor,ReceiveTimeout) (This)->lpVtbl->EnableNotification(This,Event,Cursor,ReceiveTimeout)
#define IMSMQQueue2_Reset(This) (This)->lpVtbl->Reset(This)
#define IMSMQQueue2_ReceiveCurrent_v1(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->ReceiveCurrent_v1(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue2_PeekNext_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->PeekNext_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue2_PeekCurrent_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->PeekCurrent_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue2_Receive(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg) (This)->lpVtbl->Receive(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg)
#define IMSMQQueue2_Peek(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg) (This)->lpVtbl->Peek(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg)
#define IMSMQQueue2_ReceiveCurrent(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg) (This)->lpVtbl->ReceiveCurrent(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg)
#define IMSMQQueue2_PeekNext(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg) (This)->lpVtbl->PeekNext(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg)
#define IMSMQQueue2_PeekCurrent(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg) (This)->lpVtbl->PeekCurrent(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg)
#define IMSMQQueue2_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQQueue2_get_Access_Proxy(IMSMQQueue2 *This,long *plAccess);
  void __RPC_STUB IMSMQQueue2_get_Access_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_get_ShareMode_Proxy(IMSMQQueue2 *This,long *plShareMode);
  void __RPC_STUB IMSMQQueue2_get_ShareMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_get_QueueInfo_Proxy(IMSMQQueue2 *This,IMSMQQueueInfo2 **ppqinfo);
  void __RPC_STUB IMSMQQueue2_get_QueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_get_Handle_Proxy(IMSMQQueue2 *This,long *plHandle);
  void __RPC_STUB IMSMQQueue2_get_Handle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_get_IsOpen_Proxy(IMSMQQueue2 *This,Boolean *pisOpen);
  void __RPC_STUB IMSMQQueue2_get_IsOpen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_Close_Proxy(IMSMQQueue2 *This);
  void __RPC_STUB IMSMQQueue2_Close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_Receive_v1_Proxy(IMSMQQueue2 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue2_Receive_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_Peek_v1_Proxy(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue2_Peek_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_EnableNotification_Proxy(IMSMQQueue2 *This,IMSMQEvent2 *Event,VARIANT *Cursor,VARIANT *ReceiveTimeout);
  void __RPC_STUB IMSMQQueue2_EnableNotification_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_Reset_Proxy(IMSMQQueue2 *This);
  void __RPC_STUB IMSMQQueue2_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_ReceiveCurrent_v1_Proxy(IMSMQQueue2 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue2_ReceiveCurrent_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_PeekNext_v1_Proxy(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue2_PeekNext_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_PeekCurrent_v1_Proxy(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue2_PeekCurrent_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_Receive_Proxy(IMSMQQueue2 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg);
  void __RPC_STUB IMSMQQueue2_Receive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_Peek_Proxy(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg);
  void __RPC_STUB IMSMQQueue2_Peek_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_ReceiveCurrent_Proxy(IMSMQQueue2 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg);
  void __RPC_STUB IMSMQQueue2_ReceiveCurrent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_PeekNext_Proxy(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg);
  void __RPC_STUB IMSMQQueue2_PeekNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_PeekCurrent_Proxy(IMSMQQueue2 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage2 **ppmsg);
  void __RPC_STUB IMSMQQueue2_PeekCurrent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue2_get_Properties_Proxy(IMSMQQueue2 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQQueue2_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQMessage_INTERFACE_DEFINED__
#define __IMSMQMessage_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQMessage;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQMessage : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Class(long *plClass) = 0;
    virtual HRESULT WINAPI get_PrivLevel(long *plPrivLevel) = 0;
    virtual HRESULT WINAPI put_PrivLevel(long lPrivLevel) = 0;
    virtual HRESULT WINAPI get_AuthLevel(long *plAuthLevel) = 0;
    virtual HRESULT WINAPI put_AuthLevel(long lAuthLevel) = 0;
    virtual HRESULT WINAPI get_IsAuthenticated(Boolean *pisAuthenticated) = 0;
    virtual HRESULT WINAPI get_Delivery(long *plDelivery) = 0;
    virtual HRESULT WINAPI put_Delivery(long lDelivery) = 0;
    virtual HRESULT WINAPI get_Trace(long *plTrace) = 0;
    virtual HRESULT WINAPI put_Trace(long lTrace) = 0;
    virtual HRESULT WINAPI get_Priority(long *plPriority) = 0;
    virtual HRESULT WINAPI put_Priority(long lPriority) = 0;
    virtual HRESULT WINAPI get_Journal(long *plJournal) = 0;
    virtual HRESULT WINAPI put_Journal(long lJournal) = 0;
    virtual HRESULT WINAPI get_ResponseQueueInfo(IMSMQQueueInfo **ppqinfoResponse) = 0;
    virtual HRESULT WINAPI putref_ResponseQueueInfo(IMSMQQueueInfo *pqinfoResponse) = 0;
    virtual HRESULT WINAPI get_AppSpecific(long *plAppSpecific) = 0;
    virtual HRESULT WINAPI put_AppSpecific(long lAppSpecific) = 0;
    virtual HRESULT WINAPI get_SourceMachineGuid(BSTR *pbstrGuidSrcMachine) = 0;
    virtual HRESULT WINAPI get_BodyLength(long *pcbBody) = 0;
    virtual HRESULT WINAPI get_Body(VARIANT *pvarBody) = 0;
    virtual HRESULT WINAPI put_Body(VARIANT varBody) = 0;
    virtual HRESULT WINAPI get_AdminQueueInfo(IMSMQQueueInfo **ppqinfoAdmin) = 0;
    virtual HRESULT WINAPI putref_AdminQueueInfo(IMSMQQueueInfo *pqinfoAdmin) = 0;
    virtual HRESULT WINAPI get_Id(VARIANT *pvarMsgId) = 0;
    virtual HRESULT WINAPI get_CorrelationId(VARIANT *pvarMsgId) = 0;
    virtual HRESULT WINAPI put_CorrelationId(VARIANT varMsgId) = 0;
    virtual HRESULT WINAPI get_Ack(long *plAck) = 0;
    virtual HRESULT WINAPI put_Ack(long lAck) = 0;
    virtual HRESULT WINAPI get_Label(BSTR *pbstrLabel) = 0;
    virtual HRESULT WINAPI put_Label(BSTR bstrLabel) = 0;
    virtual HRESULT WINAPI get_MaxTimeToReachQueue(long *plMaxTimeToReachQueue) = 0;
    virtual HRESULT WINAPI put_MaxTimeToReachQueue(long lMaxTimeToReachQueue) = 0;
    virtual HRESULT WINAPI get_MaxTimeToReceive(long *plMaxTimeToReceive) = 0;
    virtual HRESULT WINAPI put_MaxTimeToReceive(long lMaxTimeToReceive) = 0;
    virtual HRESULT WINAPI get_HashAlgorithm(long *plHashAlg) = 0;
    virtual HRESULT WINAPI put_HashAlgorithm(long lHashAlg) = 0;
    virtual HRESULT WINAPI get_EncryptAlgorithm(long *plEncryptAlg) = 0;
    virtual HRESULT WINAPI put_EncryptAlgorithm(long lEncryptAlg) = 0;
    virtual HRESULT WINAPI get_SentTime(VARIANT *pvarSentTime) = 0;
    virtual HRESULT WINAPI get_ArrivedTime(VARIANT *plArrivedTime) = 0;
    virtual HRESULT WINAPI get_DestinationQueueInfo(IMSMQQueueInfo **ppqinfoDest) = 0;
    virtual HRESULT WINAPI get_SenderCertificate(VARIANT *pvarSenderCert) = 0;
    virtual HRESULT WINAPI put_SenderCertificate(VARIANT varSenderCert) = 0;
    virtual HRESULT WINAPI get_SenderId(VARIANT *pvarSenderId) = 0;
    virtual HRESULT WINAPI get_SenderIdType(long *plSenderIdType) = 0;
    virtual HRESULT WINAPI put_SenderIdType(long lSenderIdType) = 0;
    virtual HRESULT WINAPI Send(IMSMQQueue *DestinationQueue,VARIANT *Transaction) = 0;
    virtual HRESULT WINAPI AttachCurrentSecurityContext(void) = 0;
  };
#else
  typedef struct IMSMQMessageVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQMessage *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQMessage *This);
      ULONG (WINAPI *Release)(IMSMQMessage *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQMessage *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQMessage *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQMessage *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQMessage *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Class)(IMSMQMessage *This,long *plClass);
      HRESULT (WINAPI *get_PrivLevel)(IMSMQMessage *This,long *plPrivLevel);
      HRESULT (WINAPI *put_PrivLevel)(IMSMQMessage *This,long lPrivLevel);
      HRESULT (WINAPI *get_AuthLevel)(IMSMQMessage *This,long *plAuthLevel);
      HRESULT (WINAPI *put_AuthLevel)(IMSMQMessage *This,long lAuthLevel);
      HRESULT (WINAPI *get_IsAuthenticated)(IMSMQMessage *This,Boolean *pisAuthenticated);
      HRESULT (WINAPI *get_Delivery)(IMSMQMessage *This,long *plDelivery);
      HRESULT (WINAPI *put_Delivery)(IMSMQMessage *This,long lDelivery);
      HRESULT (WINAPI *get_Trace)(IMSMQMessage *This,long *plTrace);
      HRESULT (WINAPI *put_Trace)(IMSMQMessage *This,long lTrace);
      HRESULT (WINAPI *get_Priority)(IMSMQMessage *This,long *plPriority);
      HRESULT (WINAPI *put_Priority)(IMSMQMessage *This,long lPriority);
      HRESULT (WINAPI *get_Journal)(IMSMQMessage *This,long *plJournal);
      HRESULT (WINAPI *put_Journal)(IMSMQMessage *This,long lJournal);
      HRESULT (WINAPI *get_ResponseQueueInfo)(IMSMQMessage *This,IMSMQQueueInfo **ppqinfoResponse);
      HRESULT (WINAPI *putref_ResponseQueueInfo)(IMSMQMessage *This,IMSMQQueueInfo *pqinfoResponse);
      HRESULT (WINAPI *get_AppSpecific)(IMSMQMessage *This,long *plAppSpecific);
      HRESULT (WINAPI *put_AppSpecific)(IMSMQMessage *This,long lAppSpecific);
      HRESULT (WINAPI *get_SourceMachineGuid)(IMSMQMessage *This,BSTR *pbstrGuidSrcMachine);
      HRESULT (WINAPI *get_BodyLength)(IMSMQMessage *This,long *pcbBody);
      HRESULT (WINAPI *get_Body)(IMSMQMessage *This,VARIANT *pvarBody);
      HRESULT (WINAPI *put_Body)(IMSMQMessage *This,VARIANT varBody);
      HRESULT (WINAPI *get_AdminQueueInfo)(IMSMQMessage *This,IMSMQQueueInfo **ppqinfoAdmin);
      HRESULT (WINAPI *putref_AdminQueueInfo)(IMSMQMessage *This,IMSMQQueueInfo *pqinfoAdmin);
      HRESULT (WINAPI *get_Id)(IMSMQMessage *This,VARIANT *pvarMsgId);
      HRESULT (WINAPI *get_CorrelationId)(IMSMQMessage *This,VARIANT *pvarMsgId);
      HRESULT (WINAPI *put_CorrelationId)(IMSMQMessage *This,VARIANT varMsgId);
      HRESULT (WINAPI *get_Ack)(IMSMQMessage *This,long *plAck);
      HRESULT (WINAPI *put_Ack)(IMSMQMessage *This,long lAck);
      HRESULT (WINAPI *get_Label)(IMSMQMessage *This,BSTR *pbstrLabel);
      HRESULT (WINAPI *put_Label)(IMSMQMessage *This,BSTR bstrLabel);
      HRESULT (WINAPI *get_MaxTimeToReachQueue)(IMSMQMessage *This,long *plMaxTimeToReachQueue);
      HRESULT (WINAPI *put_MaxTimeToReachQueue)(IMSMQMessage *This,long lMaxTimeToReachQueue);
      HRESULT (WINAPI *get_MaxTimeToReceive)(IMSMQMessage *This,long *plMaxTimeToReceive);
      HRESULT (WINAPI *put_MaxTimeToReceive)(IMSMQMessage *This,long lMaxTimeToReceive);
      HRESULT (WINAPI *get_HashAlgorithm)(IMSMQMessage *This,long *plHashAlg);
      HRESULT (WINAPI *put_HashAlgorithm)(IMSMQMessage *This,long lHashAlg);
      HRESULT (WINAPI *get_EncryptAlgorithm)(IMSMQMessage *This,long *plEncryptAlg);
      HRESULT (WINAPI *put_EncryptAlgorithm)(IMSMQMessage *This,long lEncryptAlg);
      HRESULT (WINAPI *get_SentTime)(IMSMQMessage *This,VARIANT *pvarSentTime);
      HRESULT (WINAPI *get_ArrivedTime)(IMSMQMessage *This,VARIANT *plArrivedTime);
      HRESULT (WINAPI *get_DestinationQueueInfo)(IMSMQMessage *This,IMSMQQueueInfo **ppqinfoDest);
      HRESULT (WINAPI *get_SenderCertificate)(IMSMQMessage *This,VARIANT *pvarSenderCert);
      HRESULT (WINAPI *put_SenderCertificate)(IMSMQMessage *This,VARIANT varSenderCert);
      HRESULT (WINAPI *get_SenderId)(IMSMQMessage *This,VARIANT *pvarSenderId);
      HRESULT (WINAPI *get_SenderIdType)(IMSMQMessage *This,long *plSenderIdType);
      HRESULT (WINAPI *put_SenderIdType)(IMSMQMessage *This,long lSenderIdType);
      HRESULT (WINAPI *Send)(IMSMQMessage *This,IMSMQQueue *DestinationQueue,VARIANT *Transaction);
      HRESULT (WINAPI *AttachCurrentSecurityContext)(IMSMQMessage *This);
    END_INTERFACE
  } IMSMQMessageVtbl;
  interface IMSMQMessage {
    CONST_VTBL struct IMSMQMessageVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQMessage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQMessage_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQMessage_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQMessage_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQMessage_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQMessage_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQMessage_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQMessage_get_Class(This,plClass) (This)->lpVtbl->get_Class(This,plClass)
#define IMSMQMessage_get_PrivLevel(This,plPrivLevel) (This)->lpVtbl->get_PrivLevel(This,plPrivLevel)
#define IMSMQMessage_put_PrivLevel(This,lPrivLevel) (This)->lpVtbl->put_PrivLevel(This,lPrivLevel)
#define IMSMQMessage_get_AuthLevel(This,plAuthLevel) (This)->lpVtbl->get_AuthLevel(This,plAuthLevel)
#define IMSMQMessage_put_AuthLevel(This,lAuthLevel) (This)->lpVtbl->put_AuthLevel(This,lAuthLevel)
#define IMSMQMessage_get_IsAuthenticated(This,pisAuthenticated) (This)->lpVtbl->get_IsAuthenticated(This,pisAuthenticated)
#define IMSMQMessage_get_Delivery(This,plDelivery) (This)->lpVtbl->get_Delivery(This,plDelivery)
#define IMSMQMessage_put_Delivery(This,lDelivery) (This)->lpVtbl->put_Delivery(This,lDelivery)
#define IMSMQMessage_get_Trace(This,plTrace) (This)->lpVtbl->get_Trace(This,plTrace)
#define IMSMQMessage_put_Trace(This,lTrace) (This)->lpVtbl->put_Trace(This,lTrace)
#define IMSMQMessage_get_Priority(This,plPriority) (This)->lpVtbl->get_Priority(This,plPriority)
#define IMSMQMessage_put_Priority(This,lPriority) (This)->lpVtbl->put_Priority(This,lPriority)
#define IMSMQMessage_get_Journal(This,plJournal) (This)->lpVtbl->get_Journal(This,plJournal)
#define IMSMQMessage_put_Journal(This,lJournal) (This)->lpVtbl->put_Journal(This,lJournal)
#define IMSMQMessage_get_ResponseQueueInfo(This,ppqinfoResponse) (This)->lpVtbl->get_ResponseQueueInfo(This,ppqinfoResponse)
#define IMSMQMessage_putref_ResponseQueueInfo(This,pqinfoResponse) (This)->lpVtbl->putref_ResponseQueueInfo(This,pqinfoResponse)
#define IMSMQMessage_get_AppSpecific(This,plAppSpecific) (This)->lpVtbl->get_AppSpecific(This,plAppSpecific)
#define IMSMQMessage_put_AppSpecific(This,lAppSpecific) (This)->lpVtbl->put_AppSpecific(This,lAppSpecific)
#define IMSMQMessage_get_SourceMachineGuid(This,pbstrGuidSrcMachine) (This)->lpVtbl->get_SourceMachineGuid(This,pbstrGuidSrcMachine)
#define IMSMQMessage_get_BodyLength(This,pcbBody) (This)->lpVtbl->get_BodyLength(This,pcbBody)
#define IMSMQMessage_get_Body(This,pvarBody) (This)->lpVtbl->get_Body(This,pvarBody)
#define IMSMQMessage_put_Body(This,varBody) (This)->lpVtbl->put_Body(This,varBody)
#define IMSMQMessage_get_AdminQueueInfo(This,ppqinfoAdmin) (This)->lpVtbl->get_AdminQueueInfo(This,ppqinfoAdmin)
#define IMSMQMessage_putref_AdminQueueInfo(This,pqinfoAdmin) (This)->lpVtbl->putref_AdminQueueInfo(This,pqinfoAdmin)
#define IMSMQMessage_get_Id(This,pvarMsgId) (This)->lpVtbl->get_Id(This,pvarMsgId)
#define IMSMQMessage_get_CorrelationId(This,pvarMsgId) (This)->lpVtbl->get_CorrelationId(This,pvarMsgId)
#define IMSMQMessage_put_CorrelationId(This,varMsgId) (This)->lpVtbl->put_CorrelationId(This,varMsgId)
#define IMSMQMessage_get_Ack(This,plAck) (This)->lpVtbl->get_Ack(This,plAck)
#define IMSMQMessage_put_Ack(This,lAck) (This)->lpVtbl->put_Ack(This,lAck)
#define IMSMQMessage_get_Label(This,pbstrLabel) (This)->lpVtbl->get_Label(This,pbstrLabel)
#define IMSMQMessage_put_Label(This,bstrLabel) (This)->lpVtbl->put_Label(This,bstrLabel)
#define IMSMQMessage_get_MaxTimeToReachQueue(This,plMaxTimeToReachQueue) (This)->lpVtbl->get_MaxTimeToReachQueue(This,plMaxTimeToReachQueue)
#define IMSMQMessage_put_MaxTimeToReachQueue(This,lMaxTimeToReachQueue) (This)->lpVtbl->put_MaxTimeToReachQueue(This,lMaxTimeToReachQueue)
#define IMSMQMessage_get_MaxTimeToReceive(This,plMaxTimeToReceive) (This)->lpVtbl->get_MaxTimeToReceive(This,plMaxTimeToReceive)
#define IMSMQMessage_put_MaxTimeToReceive(This,lMaxTimeToReceive) (This)->lpVtbl->put_MaxTimeToReceive(This,lMaxTimeToReceive)
#define IMSMQMessage_get_HashAlgorithm(This,plHashAlg) (This)->lpVtbl->get_HashAlgorithm(This,plHashAlg)
#define IMSMQMessage_put_HashAlgorithm(This,lHashAlg) (This)->lpVtbl->put_HashAlgorithm(This,lHashAlg)
#define IMSMQMessage_get_EncryptAlgorithm(This,plEncryptAlg) (This)->lpVtbl->get_EncryptAlgorithm(This,plEncryptAlg)
#define IMSMQMessage_put_EncryptAlgorithm(This,lEncryptAlg) (This)->lpVtbl->put_EncryptAlgorithm(This,lEncryptAlg)
#define IMSMQMessage_get_SentTime(This,pvarSentTime) (This)->lpVtbl->get_SentTime(This,pvarSentTime)
#define IMSMQMessage_get_ArrivedTime(This,plArrivedTime) (This)->lpVtbl->get_ArrivedTime(This,plArrivedTime)
#define IMSMQMessage_get_DestinationQueueInfo(This,ppqinfoDest) (This)->lpVtbl->get_DestinationQueueInfo(This,ppqinfoDest)
#define IMSMQMessage_get_SenderCertificate(This,pvarSenderCert) (This)->lpVtbl->get_SenderCertificate(This,pvarSenderCert)
#define IMSMQMessage_put_SenderCertificate(This,varSenderCert) (This)->lpVtbl->put_SenderCertificate(This,varSenderCert)
#define IMSMQMessage_get_SenderId(This,pvarSenderId) (This)->lpVtbl->get_SenderId(This,pvarSenderId)
#define IMSMQMessage_get_SenderIdType(This,plSenderIdType) (This)->lpVtbl->get_SenderIdType(This,plSenderIdType)
#define IMSMQMessage_put_SenderIdType(This,lSenderIdType) (This)->lpVtbl->put_SenderIdType(This,lSenderIdType)
#define IMSMQMessage_Send(This,DestinationQueue,Transaction) (This)->lpVtbl->Send(This,DestinationQueue,Transaction)
#define IMSMQMessage_AttachCurrentSecurityContext(This) (This)->lpVtbl->AttachCurrentSecurityContext(This)
#endif
#endif
  HRESULT WINAPI IMSMQMessage_get_Class_Proxy(IMSMQMessage *This,long *plClass);
  void __RPC_STUB IMSMQMessage_get_Class_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_PrivLevel_Proxy(IMSMQMessage *This,long *plPrivLevel);
  void __RPC_STUB IMSMQMessage_get_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_PrivLevel_Proxy(IMSMQMessage *This,long lPrivLevel);
  void __RPC_STUB IMSMQMessage_put_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_AuthLevel_Proxy(IMSMQMessage *This,long *plAuthLevel);
  void __RPC_STUB IMSMQMessage_get_AuthLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_AuthLevel_Proxy(IMSMQMessage *This,long lAuthLevel);
  void __RPC_STUB IMSMQMessage_put_AuthLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_IsAuthenticated_Proxy(IMSMQMessage *This,Boolean *pisAuthenticated);
  void __RPC_STUB IMSMQMessage_get_IsAuthenticated_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_Delivery_Proxy(IMSMQMessage *This,long *plDelivery);
  void __RPC_STUB IMSMQMessage_get_Delivery_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_Delivery_Proxy(IMSMQMessage *This,long lDelivery);
  void __RPC_STUB IMSMQMessage_put_Delivery_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_Trace_Proxy(IMSMQMessage *This,long *plTrace);
  void __RPC_STUB IMSMQMessage_get_Trace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_Trace_Proxy(IMSMQMessage *This,long lTrace);
  void __RPC_STUB IMSMQMessage_put_Trace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_Priority_Proxy(IMSMQMessage *This,long *plPriority);
  void __RPC_STUB IMSMQMessage_get_Priority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_Priority_Proxy(IMSMQMessage *This,long lPriority);
  void __RPC_STUB IMSMQMessage_put_Priority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_Journal_Proxy(IMSMQMessage *This,long *plJournal);
  void __RPC_STUB IMSMQMessage_get_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_Journal_Proxy(IMSMQMessage *This,long lJournal);
  void __RPC_STUB IMSMQMessage_put_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_ResponseQueueInfo_Proxy(IMSMQMessage *This,IMSMQQueueInfo **ppqinfoResponse);
  void __RPC_STUB IMSMQMessage_get_ResponseQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_putref_ResponseQueueInfo_Proxy(IMSMQMessage *This,IMSMQQueueInfo *pqinfoResponse);
  void __RPC_STUB IMSMQMessage_putref_ResponseQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_AppSpecific_Proxy(IMSMQMessage *This,long *plAppSpecific);
  void __RPC_STUB IMSMQMessage_get_AppSpecific_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_AppSpecific_Proxy(IMSMQMessage *This,long lAppSpecific);
  void __RPC_STUB IMSMQMessage_put_AppSpecific_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_SourceMachineGuid_Proxy(IMSMQMessage *This,BSTR *pbstrGuidSrcMachine);
  void __RPC_STUB IMSMQMessage_get_SourceMachineGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_BodyLength_Proxy(IMSMQMessage *This,long *pcbBody);
  void __RPC_STUB IMSMQMessage_get_BodyLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_Body_Proxy(IMSMQMessage *This,VARIANT *pvarBody);
  void __RPC_STUB IMSMQMessage_get_Body_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_Body_Proxy(IMSMQMessage *This,VARIANT varBody);
  void __RPC_STUB IMSMQMessage_put_Body_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_AdminQueueInfo_Proxy(IMSMQMessage *This,IMSMQQueueInfo **ppqinfoAdmin);
  void __RPC_STUB IMSMQMessage_get_AdminQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_putref_AdminQueueInfo_Proxy(IMSMQMessage *This,IMSMQQueueInfo *pqinfoAdmin);
  void __RPC_STUB IMSMQMessage_putref_AdminQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_Id_Proxy(IMSMQMessage *This,VARIANT *pvarMsgId);
  void __RPC_STUB IMSMQMessage_get_Id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_CorrelationId_Proxy(IMSMQMessage *This,VARIANT *pvarMsgId);
  void __RPC_STUB IMSMQMessage_get_CorrelationId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_CorrelationId_Proxy(IMSMQMessage *This,VARIANT varMsgId);
  void __RPC_STUB IMSMQMessage_put_CorrelationId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_Ack_Proxy(IMSMQMessage *This,long *plAck);
  void __RPC_STUB IMSMQMessage_get_Ack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_Ack_Proxy(IMSMQMessage *This,long lAck);
  void __RPC_STUB IMSMQMessage_put_Ack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_Label_Proxy(IMSMQMessage *This,BSTR *pbstrLabel);
  void __RPC_STUB IMSMQMessage_get_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_Label_Proxy(IMSMQMessage *This,BSTR bstrLabel);
  void __RPC_STUB IMSMQMessage_put_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_MaxTimeToReachQueue_Proxy(IMSMQMessage *This,long *plMaxTimeToReachQueue);
  void __RPC_STUB IMSMQMessage_get_MaxTimeToReachQueue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_MaxTimeToReachQueue_Proxy(IMSMQMessage *This,long lMaxTimeToReachQueue);
  void __RPC_STUB IMSMQMessage_put_MaxTimeToReachQueue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_MaxTimeToReceive_Proxy(IMSMQMessage *This,long *plMaxTimeToReceive);
  void __RPC_STUB IMSMQMessage_get_MaxTimeToReceive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_MaxTimeToReceive_Proxy(IMSMQMessage *This,long lMaxTimeToReceive);
  void __RPC_STUB IMSMQMessage_put_MaxTimeToReceive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_HashAlgorithm_Proxy(IMSMQMessage *This,long *plHashAlg);
  void __RPC_STUB IMSMQMessage_get_HashAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_HashAlgorithm_Proxy(IMSMQMessage *This,long lHashAlg);
  void __RPC_STUB IMSMQMessage_put_HashAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_EncryptAlgorithm_Proxy(IMSMQMessage *This,long *plEncryptAlg);
  void __RPC_STUB IMSMQMessage_get_EncryptAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_EncryptAlgorithm_Proxy(IMSMQMessage *This,long lEncryptAlg);
  void __RPC_STUB IMSMQMessage_put_EncryptAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_SentTime_Proxy(IMSMQMessage *This,VARIANT *pvarSentTime);
  void __RPC_STUB IMSMQMessage_get_SentTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_ArrivedTime_Proxy(IMSMQMessage *This,VARIANT *plArrivedTime);
  void __RPC_STUB IMSMQMessage_get_ArrivedTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_DestinationQueueInfo_Proxy(IMSMQMessage *This,IMSMQQueueInfo **ppqinfoDest);
  void __RPC_STUB IMSMQMessage_get_DestinationQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_SenderCertificate_Proxy(IMSMQMessage *This,VARIANT *pvarSenderCert);
  void __RPC_STUB IMSMQMessage_get_SenderCertificate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_SenderCertificate_Proxy(IMSMQMessage *This,VARIANT varSenderCert);
  void __RPC_STUB IMSMQMessage_put_SenderCertificate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_SenderId_Proxy(IMSMQMessage *This,VARIANT *pvarSenderId);
  void __RPC_STUB IMSMQMessage_get_SenderId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_get_SenderIdType_Proxy(IMSMQMessage *This,long *plSenderIdType);
  void __RPC_STUB IMSMQMessage_get_SenderIdType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_put_SenderIdType_Proxy(IMSMQMessage *This,long lSenderIdType);
  void __RPC_STUB IMSMQMessage_put_SenderIdType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_Send_Proxy(IMSMQMessage *This,IMSMQQueue *DestinationQueue,VARIANT *Transaction);
  void __RPC_STUB IMSMQMessage_Send_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage_AttachCurrentSecurityContext_Proxy(IMSMQMessage *This);
  void __RPC_STUB IMSMQMessage_AttachCurrentSecurityContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQQueueInfos_INTERFACE_DEFINED__
#define __IMSMQQueueInfos_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQueueInfos;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQueueInfos : public IDispatch {
  public:
    virtual HRESULT WINAPI Reset(void) = 0;
    virtual HRESULT WINAPI Next(IMSMQQueueInfo **ppqinfoNext) = 0;
  };
#else
  typedef struct IMSMQQueueInfosVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQueueInfos *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQueueInfos *This);
      ULONG (WINAPI *Release)(IMSMQQueueInfos *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQueueInfos *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQueueInfos *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQueueInfos *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQueueInfos *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *Reset)(IMSMQQueueInfos *This);
      HRESULT (WINAPI *Next)(IMSMQQueueInfos *This,IMSMQQueueInfo **ppqinfoNext);
    END_INTERFACE
  } IMSMQQueueInfosVtbl;
  interface IMSMQQueueInfos {
    CONST_VTBL struct IMSMQQueueInfosVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQueueInfos_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQueueInfos_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQueueInfos_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQueueInfos_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQueueInfos_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQueueInfos_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQueueInfos_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQueueInfos_Reset(This) (This)->lpVtbl->Reset(This)
#define IMSMQQueueInfos_Next(This,ppqinfoNext) (This)->lpVtbl->Next(This,ppqinfoNext)
#endif
#endif
  HRESULT WINAPI IMSMQQueueInfos_Reset_Proxy(IMSMQQueueInfos *This);
  void __RPC_STUB IMSMQQueueInfos_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfos_Next_Proxy(IMSMQQueueInfos *This,IMSMQQueueInfo **ppqinfoNext);
  void __RPC_STUB IMSMQQueueInfos_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQQueueInfos2_INTERFACE_DEFINED__
#define __IMSMQQueueInfos2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQueueInfos2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQueueInfos2 : public IDispatch {
  public:
    virtual HRESULT WINAPI Reset(void) = 0;
    virtual HRESULT WINAPI Next(IMSMQQueueInfo2 **ppqinfoNext) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQQueueInfos2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQueueInfos2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQueueInfos2 *This);
      ULONG (WINAPI *Release)(IMSMQQueueInfos2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQueueInfos2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQueueInfos2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQueueInfos2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQueueInfos2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *Reset)(IMSMQQueueInfos2 *This);
      HRESULT (WINAPI *Next)(IMSMQQueueInfos2 *This,IMSMQQueueInfo2 **ppqinfoNext);
      HRESULT (WINAPI *get_Properties)(IMSMQQueueInfos2 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQQueueInfos2Vtbl;
  interface IMSMQQueueInfos2 {
    CONST_VTBL struct IMSMQQueueInfos2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQueueInfos2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQueueInfos2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQueueInfos2_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQueueInfos2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQueueInfos2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQueueInfos2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQueueInfos2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQueueInfos2_Reset(This) (This)->lpVtbl->Reset(This)
#define IMSMQQueueInfos2_Next(This,ppqinfoNext) (This)->lpVtbl->Next(This,ppqinfoNext)
#define IMSMQQueueInfos2_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQQueueInfos2_Reset_Proxy(IMSMQQueueInfos2 *This);
  void __RPC_STUB IMSMQQueueInfos2_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfos2_Next_Proxy(IMSMQQueueInfos2 *This,IMSMQQueueInfo2 **ppqinfoNext);
  void __RPC_STUB IMSMQQueueInfos2_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfos2_get_Properties_Proxy(IMSMQQueueInfos2 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQQueueInfos2_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQQueueInfos3_INTERFACE_DEFINED__
#define __IMSMQQueueInfos3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQueueInfos3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQueueInfos3 : public IDispatch {
  public:
    virtual HRESULT WINAPI Reset(void) = 0;
    virtual HRESULT WINAPI Next(IMSMQQueueInfo3 **ppqinfoNext) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQQueueInfos3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQueueInfos3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQueueInfos3 *This);
      ULONG (WINAPI *Release)(IMSMQQueueInfos3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQueueInfos3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQueueInfos3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQueueInfos3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQueueInfos3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *Reset)(IMSMQQueueInfos3 *This);
      HRESULT (WINAPI *Next)(IMSMQQueueInfos3 *This,IMSMQQueueInfo3 **ppqinfoNext);
      HRESULT (WINAPI *get_Properties)(IMSMQQueueInfos3 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQQueueInfos3Vtbl;
  interface IMSMQQueueInfos3 {
    CONST_VTBL struct IMSMQQueueInfos3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQueueInfos3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQueueInfos3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQueueInfos3_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQueueInfos3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQueueInfos3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQueueInfos3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQueueInfos3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQueueInfos3_Reset(This) (This)->lpVtbl->Reset(This)
#define IMSMQQueueInfos3_Next(This,ppqinfoNext) (This)->lpVtbl->Next(This,ppqinfoNext)
#define IMSMQQueueInfos3_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQQueueInfos3_Reset_Proxy(IMSMQQueueInfos3 *This);
  void __RPC_STUB IMSMQQueueInfos3_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfos3_Next_Proxy(IMSMQQueueInfos3 *This,IMSMQQueueInfo3 **ppqinfoNext);
  void __RPC_STUB IMSMQQueueInfos3_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueInfos3_get_Properties_Proxy(IMSMQQueueInfos3 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQQueueInfos3_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQEvent_INTERFACE_DEFINED__
#define __IMSMQEvent_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQEvent;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQEvent : public IDispatch {
  };
#else
  typedef struct IMSMQEventVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQEvent *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQEvent *This);
      ULONG (WINAPI *Release)(IMSMQEvent *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQEvent *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQEvent *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQEvent *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQEvent *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } IMSMQEventVtbl;
  interface IMSMQEvent {
    CONST_VTBL struct IMSMQEventVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQEvent_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQEvent_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQEvent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQEvent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQEvent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IMSMQEvent2_INTERFACE_DEFINED__
#define __IMSMQEvent2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQEvent2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQEvent2 : public IMSMQEvent {
  public:
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQEvent2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQEvent2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQEvent2 *This);
      ULONG (WINAPI *Release)(IMSMQEvent2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQEvent2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQEvent2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQEvent2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQEvent2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Properties)(IMSMQEvent2 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQEvent2Vtbl;
  interface IMSMQEvent2 {
    CONST_VTBL struct IMSMQEvent2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQEvent2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQEvent2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQEvent2_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQEvent2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQEvent2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQEvent2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQEvent2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQEvent2_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQEvent2_get_Properties_Proxy(IMSMQEvent2 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQEvent2_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQEvent3_INTERFACE_DEFINED__
#define __IMSMQEvent3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQEvent3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQEvent3 : public IMSMQEvent2 {
  };
#else
  typedef struct IMSMQEvent3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQEvent3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQEvent3 *This);
      ULONG (WINAPI *Release)(IMSMQEvent3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQEvent3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQEvent3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQEvent3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQEvent3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Properties)(IMSMQEvent3 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQEvent3Vtbl;
  interface IMSMQEvent3 {
    CONST_VTBL struct IMSMQEvent3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQEvent3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQEvent3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQEvent3_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQEvent3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQEvent3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQEvent3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQEvent3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQEvent3_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
#endif

#ifndef __IMSMQTransaction_INTERFACE_DEFINED__
#define __IMSMQTransaction_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQTransaction;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQTransaction : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Transaction(long *plTransaction) = 0;
    virtual HRESULT WINAPI Commit(VARIANT *fRetaining,VARIANT *grfTC,VARIANT *grfRM) = 0;
    virtual HRESULT WINAPI Abort(VARIANT *fRetaining,VARIANT *fAsync) = 0;
  };
#else
  typedef struct IMSMQTransactionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQTransaction *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQTransaction *This);
      ULONG (WINAPI *Release)(IMSMQTransaction *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQTransaction *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQTransaction *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQTransaction *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQTransaction *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Transaction)(IMSMQTransaction *This,long *plTransaction);
      HRESULT (WINAPI *Commit)(IMSMQTransaction *This,VARIANT *fRetaining,VARIANT *grfTC,VARIANT *grfRM);
      HRESULT (WINAPI *Abort)(IMSMQTransaction *This,VARIANT *fRetaining,VARIANT *fAsync);
    END_INTERFACE
  } IMSMQTransactionVtbl;
  interface IMSMQTransaction {
    CONST_VTBL struct IMSMQTransactionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQTransaction_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQTransaction_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQTransaction_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQTransaction_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQTransaction_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQTransaction_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQTransaction_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQTransaction_get_Transaction(This,plTransaction) (This)->lpVtbl->get_Transaction(This,plTransaction)
#define IMSMQTransaction_Commit(This,fRetaining,grfTC,grfRM) (This)->lpVtbl->Commit(This,fRetaining,grfTC,grfRM)
#define IMSMQTransaction_Abort(This,fRetaining,fAsync) (This)->lpVtbl->Abort(This,fRetaining,fAsync)
#endif
#endif
  HRESULT WINAPI IMSMQTransaction_get_Transaction_Proxy(IMSMQTransaction *This,long *plTransaction);
  void __RPC_STUB IMSMQTransaction_get_Transaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQTransaction_Commit_Proxy(IMSMQTransaction *This,VARIANT *fRetaining,VARIANT *grfTC,VARIANT *grfRM);
  void __RPC_STUB IMSMQTransaction_Commit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQTransaction_Abort_Proxy(IMSMQTransaction *This,VARIANT *fRetaining,VARIANT *fAsync);
  void __RPC_STUB IMSMQTransaction_Abort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQCoordinatedTransactionDispenser_INTERFACE_DEFINED__
#define __IMSMQCoordinatedTransactionDispenser_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQCoordinatedTransactionDispenser;
#if defined(__cplusplus) && !defined(CINTERFACE)

  struct IMSMQCoordinatedTransactionDispenser : public IDispatch {
  public:
    virtual HRESULT WINAPI BeginTransaction(IMSMQTransaction **ptransaction) = 0;
  };
#else
  typedef struct IMSMQCoordinatedTransactionDispenserVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQCoordinatedTransactionDispenser *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQCoordinatedTransactionDispenser *This);
      ULONG (WINAPI *Release)(IMSMQCoordinatedTransactionDispenser *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQCoordinatedTransactionDispenser *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQCoordinatedTransactionDispenser *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQCoordinatedTransactionDispenser *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQCoordinatedTransactionDispenser *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *BeginTransaction)(IMSMQCoordinatedTransactionDispenser *This,IMSMQTransaction **ptransaction);
    END_INTERFACE
  } IMSMQCoordinatedTransactionDispenserVtbl;
  interface IMSMQCoordinatedTransactionDispenser {
    CONST_VTBL struct IMSMQCoordinatedTransactionDispenserVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQCoordinatedTransactionDispenser_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQCoordinatedTransactionDispenser_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQCoordinatedTransactionDispenser_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQCoordinatedTransactionDispenser_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQCoordinatedTransactionDispenser_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQCoordinatedTransactionDispenser_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQCoordinatedTransactionDispenser_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQCoordinatedTransactionDispenser_BeginTransaction(This,ptransaction) (This)->lpVtbl->BeginTransaction(This,ptransaction)
#endif
#endif
  HRESULT WINAPI IMSMQCoordinatedTransactionDispenser_BeginTransaction_Proxy(IMSMQCoordinatedTransactionDispenser *This,IMSMQTransaction **ptransaction);
  void __RPC_STUB IMSMQCoordinatedTransactionDispenser_BeginTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQTransactionDispenser_INTERFACE_DEFINED__
#define __IMSMQTransactionDispenser_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQTransactionDispenser;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQTransactionDispenser : public IDispatch {
  public:
    virtual HRESULT WINAPI BeginTransaction(IMSMQTransaction **ptransaction) = 0;
  };
#else
  typedef struct IMSMQTransactionDispenserVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQTransactionDispenser *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQTransactionDispenser *This);
      ULONG (WINAPI *Release)(IMSMQTransactionDispenser *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQTransactionDispenser *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQTransactionDispenser *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQTransactionDispenser *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQTransactionDispenser *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *BeginTransaction)(IMSMQTransactionDispenser *This,IMSMQTransaction **ptransaction);
    END_INTERFACE
  } IMSMQTransactionDispenserVtbl;
  interface IMSMQTransactionDispenser {
    CONST_VTBL struct IMSMQTransactionDispenserVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQTransactionDispenser_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQTransactionDispenser_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQTransactionDispenser_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQTransactionDispenser_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQTransactionDispenser_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQTransactionDispenser_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQTransactionDispenser_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQTransactionDispenser_BeginTransaction(This,ptransaction) (This)->lpVtbl->BeginTransaction(This,ptransaction)
#endif
#endif
  HRESULT WINAPI IMSMQTransactionDispenser_BeginTransaction_Proxy(IMSMQTransactionDispenser *This,IMSMQTransaction **ptransaction);
  void __RPC_STUB IMSMQTransactionDispenser_BeginTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQQuery2_INTERFACE_DEFINED__
#define __IMSMQQuery2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQuery2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQuery2 : public IDispatch {
  public:
    virtual HRESULT WINAPI LookupQueue(VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,IMSMQQueueInfos2 **ppqinfos) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQQuery2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQuery2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQuery2 *This);
      ULONG (WINAPI *Release)(IMSMQQuery2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQuery2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQuery2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQuery2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQuery2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *LookupQueue)(IMSMQQuery2 *This,VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,IMSMQQueueInfos2 **ppqinfos);
      HRESULT (WINAPI *get_Properties)(IMSMQQuery2 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQQuery2Vtbl;
  interface IMSMQQuery2 {
    CONST_VTBL struct IMSMQQuery2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQuery2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQuery2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQuery2_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQuery2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQuery2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQuery2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQuery2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQuery2_LookupQueue(This,QueueGuid,ServiceTypeGuid,Label,CreateTime,ModifyTime,RelServiceType,RelLabel,RelCreateTime,RelModifyTime,ppqinfos) (This)->lpVtbl->LookupQueue(This,QueueGuid,ServiceTypeGuid,Label,CreateTime,ModifyTime,RelServiceType,RelLabel,RelCreateTime,RelModifyTime,ppqinfos)
#define IMSMQQuery2_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQQuery2_LookupQueue_Proxy(IMSMQQuery2 *This,VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,IMSMQQueueInfos2 **ppqinfos);
  void __RPC_STUB IMSMQQuery2_LookupQueue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQuery2_get_Properties_Proxy(IMSMQQuery2 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQQuery2_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQQuery3_INTERFACE_DEFINED__
#define __IMSMQQuery3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQuery3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQuery3 : public IDispatch {
  public:
    virtual HRESULT WINAPI LookupQueue_v2(VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,IMSMQQueueInfos3 **ppqinfos) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
    virtual HRESULT WINAPI LookupQueue(VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,VARIANT *MulticastAddress,VARIANT *RelMulticastAddress,IMSMQQueueInfos3 **ppqinfos) = 0;
  };
#else
  typedef struct IMSMQQuery3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQuery3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQuery3 *This);
      ULONG (WINAPI *Release)(IMSMQQuery3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQuery3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQuery3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQuery3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQuery3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *LookupQueue_v2)(IMSMQQuery3 *This,VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,IMSMQQueueInfos3 **ppqinfos);
      HRESULT (WINAPI *get_Properties)(IMSMQQuery3 *This,IDispatch **ppcolProperties);
      HRESULT (WINAPI *LookupQueue)(IMSMQQuery3 *This,VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,VARIANT *MulticastAddress,VARIANT *RelMulticastAddress,IMSMQQueueInfos3 **ppqinfos);
    END_INTERFACE
  } IMSMQQuery3Vtbl;
  interface IMSMQQuery3 {
    CONST_VTBL struct IMSMQQuery3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQuery3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQuery3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQuery3_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQuery3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQuery3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQuery3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQuery3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQuery3_LookupQueue_v2(This,QueueGuid,ServiceTypeGuid,Label,CreateTime,ModifyTime,RelServiceType,RelLabel,RelCreateTime,RelModifyTime,ppqinfos) (This)->lpVtbl->LookupQueue_v2(This,QueueGuid,ServiceTypeGuid,Label,CreateTime,ModifyTime,RelServiceType,RelLabel,RelCreateTime,RelModifyTime,ppqinfos)
#define IMSMQQuery3_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#define IMSMQQuery3_LookupQueue(This,QueueGuid,ServiceTypeGuid,Label,CreateTime,ModifyTime,RelServiceType,RelLabel,RelCreateTime,RelModifyTime,MulticastAddress,RelMulticastAddress,ppqinfos) (This)->lpVtbl->LookupQueue(This,QueueGuid,ServiceTypeGuid,Label,CreateTime,ModifyTime,RelServiceType,RelLabel,RelCreateTime,RelModifyTime,MulticastAddress,RelMulticastAddress,ppqinfos)
#endif
#endif
  HRESULT WINAPI IMSMQQuery3_LookupQueue_v2_Proxy(IMSMQQuery3 *This,VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,IMSMQQueueInfos3 **ppqinfos);
  void __RPC_STUB IMSMQQuery3_LookupQueue_v2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQuery3_get_Properties_Proxy(IMSMQQuery3 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQQuery3_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQuery3_LookupQueue_Proxy(IMSMQQuery3 *This,VARIANT *QueueGuid,VARIANT *ServiceTypeGuid,VARIANT *Label,VARIANT *CreateTime,VARIANT *ModifyTime,VARIANT *RelServiceType,VARIANT *RelLabel,VARIANT *RelCreateTime,VARIANT *RelModifyTime,VARIANT *MulticastAddress,VARIANT *RelMulticastAddress,IMSMQQueueInfos3 **ppqinfos);
  void __RPC_STUB IMSMQQuery3_LookupQueue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQQuery;
#ifdef __cplusplus
  class MSMQQuery;
#endif

#ifndef __IMSMQMessage2_INTERFACE_DEFINED__
#define __IMSMQMessage2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQMessage2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQMessage2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Class(long *plClass) = 0;
    virtual HRESULT WINAPI get_PrivLevel(long *plPrivLevel) = 0;
    virtual HRESULT WINAPI put_PrivLevel(long lPrivLevel) = 0;
    virtual HRESULT WINAPI get_AuthLevel(long *plAuthLevel) = 0;
    virtual HRESULT WINAPI put_AuthLevel(long lAuthLevel) = 0;
    virtual HRESULT WINAPI get_IsAuthenticated(Boolean *pisAuthenticated) = 0;
    virtual HRESULT WINAPI get_Delivery(long *plDelivery) = 0;
    virtual HRESULT WINAPI put_Delivery(long lDelivery) = 0;
    virtual HRESULT WINAPI get_Trace(long *plTrace) = 0;
    virtual HRESULT WINAPI put_Trace(long lTrace) = 0;
    virtual HRESULT WINAPI get_Priority(long *plPriority) = 0;
    virtual HRESULT WINAPI put_Priority(long lPriority) = 0;
    virtual HRESULT WINAPI get_Journal(long *plJournal) = 0;
    virtual HRESULT WINAPI put_Journal(long lJournal) = 0;
    virtual HRESULT WINAPI get_ResponseQueueInfo_v1(IMSMQQueueInfo **ppqinfoResponse) = 0;
    virtual HRESULT WINAPI putref_ResponseQueueInfo_v1(IMSMQQueueInfo *pqinfoResponse) = 0;
    virtual HRESULT WINAPI get_AppSpecific(long *plAppSpecific) = 0;
    virtual HRESULT WINAPI put_AppSpecific(long lAppSpecific) = 0;
    virtual HRESULT WINAPI get_SourceMachineGuid(BSTR *pbstrGuidSrcMachine) = 0;
    virtual HRESULT WINAPI get_BodyLength(long *pcbBody) = 0;
    virtual HRESULT WINAPI get_Body(VARIANT *pvarBody) = 0;
    virtual HRESULT WINAPI put_Body(VARIANT varBody) = 0;
    virtual HRESULT WINAPI get_AdminQueueInfo_v1(IMSMQQueueInfo **ppqinfoAdmin) = 0;
    virtual HRESULT WINAPI putref_AdminQueueInfo_v1(IMSMQQueueInfo *pqinfoAdmin) = 0;
    virtual HRESULT WINAPI get_Id(VARIANT *pvarMsgId) = 0;
    virtual HRESULT WINAPI get_CorrelationId(VARIANT *pvarMsgId) = 0;
    virtual HRESULT WINAPI put_CorrelationId(VARIANT varMsgId) = 0;
    virtual HRESULT WINAPI get_Ack(long *plAck) = 0;
    virtual HRESULT WINAPI put_Ack(long lAck) = 0;
    virtual HRESULT WINAPI get_Label(BSTR *pbstrLabel) = 0;
    virtual HRESULT WINAPI put_Label(BSTR bstrLabel) = 0;
    virtual HRESULT WINAPI get_MaxTimeToReachQueue(long *plMaxTimeToReachQueue) = 0;
    virtual HRESULT WINAPI put_MaxTimeToReachQueue(long lMaxTimeToReachQueue) = 0;
    virtual HRESULT WINAPI get_MaxTimeToReceive(long *plMaxTimeToReceive) = 0;
    virtual HRESULT WINAPI put_MaxTimeToReceive(long lMaxTimeToReceive) = 0;
    virtual HRESULT WINAPI get_HashAlgorithm(long *plHashAlg) = 0;
    virtual HRESULT WINAPI put_HashAlgorithm(long lHashAlg) = 0;
    virtual HRESULT WINAPI get_EncryptAlgorithm(long *plEncryptAlg) = 0;
    virtual HRESULT WINAPI put_EncryptAlgorithm(long lEncryptAlg) = 0;
    virtual HRESULT WINAPI get_SentTime(VARIANT *pvarSentTime) = 0;
    virtual HRESULT WINAPI get_ArrivedTime(VARIANT *plArrivedTime) = 0;
    virtual HRESULT WINAPI get_DestinationQueueInfo(IMSMQQueueInfo2 **ppqinfoDest) = 0;
    virtual HRESULT WINAPI get_SenderCertificate(VARIANT *pvarSenderCert) = 0;
    virtual HRESULT WINAPI put_SenderCertificate(VARIANT varSenderCert) = 0;
    virtual HRESULT WINAPI get_SenderId(VARIANT *pvarSenderId) = 0;
    virtual HRESULT WINAPI get_SenderIdType(long *plSenderIdType) = 0;
    virtual HRESULT WINAPI put_SenderIdType(long lSenderIdType) = 0;
    virtual HRESULT WINAPI Send(IMSMQQueue2 *DestinationQueue,VARIANT *Transaction) = 0;
    virtual HRESULT WINAPI AttachCurrentSecurityContext(void) = 0;
    virtual HRESULT WINAPI get_SenderVersion(long *plSenderVersion) = 0;
    virtual HRESULT WINAPI get_Extension(VARIANT *pvarExtension) = 0;
    virtual HRESULT WINAPI put_Extension(VARIANT varExtension) = 0;
    virtual HRESULT WINAPI get_ConnectorTypeGuid(BSTR *pbstrGuidConnectorType) = 0;
    virtual HRESULT WINAPI put_ConnectorTypeGuid(BSTR bstrGuidConnectorType) = 0;
    virtual HRESULT WINAPI get_TransactionStatusQueueInfo(IMSMQQueueInfo2 **ppqinfoXactStatus) = 0;
    virtual HRESULT WINAPI get_DestinationSymmetricKey(VARIANT *pvarDestSymmKey) = 0;
    virtual HRESULT WINAPI put_DestinationSymmetricKey(VARIANT varDestSymmKey) = 0;
    virtual HRESULT WINAPI get_Signature(VARIANT *pvarSignature) = 0;
    virtual HRESULT WINAPI put_Signature(VARIANT varSignature) = 0;
    virtual HRESULT WINAPI get_AuthenticationProviderType(long *plAuthProvType) = 0;
    virtual HRESULT WINAPI put_AuthenticationProviderType(long lAuthProvType) = 0;
    virtual HRESULT WINAPI get_AuthenticationProviderName(BSTR *pbstrAuthProvName) = 0;
    virtual HRESULT WINAPI put_AuthenticationProviderName(BSTR bstrAuthProvName) = 0;
    virtual HRESULT WINAPI put_SenderId(VARIANT varSenderId) = 0;
    virtual HRESULT WINAPI get_MsgClass(long *plMsgClass) = 0;
    virtual HRESULT WINAPI put_MsgClass(long lMsgClass) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
    virtual HRESULT WINAPI get_TransactionId(VARIANT *pvarXactId) = 0;
    virtual HRESULT WINAPI get_IsFirstInTransaction(Boolean *pisFirstInXact) = 0;
    virtual HRESULT WINAPI get_IsLastInTransaction(Boolean *pisLastInXact) = 0;
    virtual HRESULT WINAPI get_ResponseQueueInfo(IMSMQQueueInfo2 **ppqinfoResponse) = 0;
    virtual HRESULT WINAPI putref_ResponseQueueInfo(IMSMQQueueInfo2 *pqinfoResponse) = 0;
    virtual HRESULT WINAPI get_AdminQueueInfo(IMSMQQueueInfo2 **ppqinfoAdmin) = 0;
    virtual HRESULT WINAPI putref_AdminQueueInfo(IMSMQQueueInfo2 *pqinfoAdmin) = 0;
    virtual HRESULT WINAPI get_ReceivedAuthenticationLevel(short *psReceivedAuthenticationLevel) = 0;
  };
#else
  typedef struct IMSMQMessage2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQMessage2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQMessage2 *This);
      ULONG (WINAPI *Release)(IMSMQMessage2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQMessage2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQMessage2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQMessage2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQMessage2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Class)(IMSMQMessage2 *This,long *plClass);
      HRESULT (WINAPI *get_PrivLevel)(IMSMQMessage2 *This,long *plPrivLevel);
      HRESULT (WINAPI *put_PrivLevel)(IMSMQMessage2 *This,long lPrivLevel);
      HRESULT (WINAPI *get_AuthLevel)(IMSMQMessage2 *This,long *plAuthLevel);
      HRESULT (WINAPI *put_AuthLevel)(IMSMQMessage2 *This,long lAuthLevel);
      HRESULT (WINAPI *get_IsAuthenticated)(IMSMQMessage2 *This,Boolean *pisAuthenticated);
      HRESULT (WINAPI *get_Delivery)(IMSMQMessage2 *This,long *plDelivery);
      HRESULT (WINAPI *put_Delivery)(IMSMQMessage2 *This,long lDelivery);
      HRESULT (WINAPI *get_Trace)(IMSMQMessage2 *This,long *plTrace);
      HRESULT (WINAPI *put_Trace)(IMSMQMessage2 *This,long lTrace);
      HRESULT (WINAPI *get_Priority)(IMSMQMessage2 *This,long *plPriority);
      HRESULT (WINAPI *put_Priority)(IMSMQMessage2 *This,long lPriority);
      HRESULT (WINAPI *get_Journal)(IMSMQMessage2 *This,long *plJournal);
      HRESULT (WINAPI *put_Journal)(IMSMQMessage2 *This,long lJournal);
      HRESULT (WINAPI *get_ResponseQueueInfo_v1)(IMSMQMessage2 *This,IMSMQQueueInfo **ppqinfoResponse);
      HRESULT (WINAPI *putref_ResponseQueueInfo_v1)(IMSMQMessage2 *This,IMSMQQueueInfo *pqinfoResponse);
      HRESULT (WINAPI *get_AppSpecific)(IMSMQMessage2 *This,long *plAppSpecific);
      HRESULT (WINAPI *put_AppSpecific)(IMSMQMessage2 *This,long lAppSpecific);
      HRESULT (WINAPI *get_SourceMachineGuid)(IMSMQMessage2 *This,BSTR *pbstrGuidSrcMachine);
      HRESULT (WINAPI *get_BodyLength)(IMSMQMessage2 *This,long *pcbBody);
      HRESULT (WINAPI *get_Body)(IMSMQMessage2 *This,VARIANT *pvarBody);
      HRESULT (WINAPI *put_Body)(IMSMQMessage2 *This,VARIANT varBody);
      HRESULT (WINAPI *get_AdminQueueInfo_v1)(IMSMQMessage2 *This,IMSMQQueueInfo **ppqinfoAdmin);
      HRESULT (WINAPI *putref_AdminQueueInfo_v1)(IMSMQMessage2 *This,IMSMQQueueInfo *pqinfoAdmin);
      HRESULT (WINAPI *get_Id)(IMSMQMessage2 *This,VARIANT *pvarMsgId);
      HRESULT (WINAPI *get_CorrelationId)(IMSMQMessage2 *This,VARIANT *pvarMsgId);
      HRESULT (WINAPI *put_CorrelationId)(IMSMQMessage2 *This,VARIANT varMsgId);
      HRESULT (WINAPI *get_Ack)(IMSMQMessage2 *This,long *plAck);
      HRESULT (WINAPI *put_Ack)(IMSMQMessage2 *This,long lAck);
      HRESULT (WINAPI *get_Label)(IMSMQMessage2 *This,BSTR *pbstrLabel);
      HRESULT (WINAPI *put_Label)(IMSMQMessage2 *This,BSTR bstrLabel);
      HRESULT (WINAPI *get_MaxTimeToReachQueue)(IMSMQMessage2 *This,long *plMaxTimeToReachQueue);
      HRESULT (WINAPI *put_MaxTimeToReachQueue)(IMSMQMessage2 *This,long lMaxTimeToReachQueue);
      HRESULT (WINAPI *get_MaxTimeToReceive)(IMSMQMessage2 *This,long *plMaxTimeToReceive);
      HRESULT (WINAPI *put_MaxTimeToReceive)(IMSMQMessage2 *This,long lMaxTimeToReceive);
      HRESULT (WINAPI *get_HashAlgorithm)(IMSMQMessage2 *This,long *plHashAlg);
      HRESULT (WINAPI *put_HashAlgorithm)(IMSMQMessage2 *This,long lHashAlg);
      HRESULT (WINAPI *get_EncryptAlgorithm)(IMSMQMessage2 *This,long *plEncryptAlg);
      HRESULT (WINAPI *put_EncryptAlgorithm)(IMSMQMessage2 *This,long lEncryptAlg);
      HRESULT (WINAPI *get_SentTime)(IMSMQMessage2 *This,VARIANT *pvarSentTime);
      HRESULT (WINAPI *get_ArrivedTime)(IMSMQMessage2 *This,VARIANT *plArrivedTime);
      HRESULT (WINAPI *get_DestinationQueueInfo)(IMSMQMessage2 *This,IMSMQQueueInfo2 **ppqinfoDest);
      HRESULT (WINAPI *get_SenderCertificate)(IMSMQMessage2 *This,VARIANT *pvarSenderCert);
      HRESULT (WINAPI *put_SenderCertificate)(IMSMQMessage2 *This,VARIANT varSenderCert);
      HRESULT (WINAPI *get_SenderId)(IMSMQMessage2 *This,VARIANT *pvarSenderId);
      HRESULT (WINAPI *get_SenderIdType)(IMSMQMessage2 *This,long *plSenderIdType);
      HRESULT (WINAPI *put_SenderIdType)(IMSMQMessage2 *This,long lSenderIdType);
      HRESULT (WINAPI *Send)(IMSMQMessage2 *This,IMSMQQueue2 *DestinationQueue,VARIANT *Transaction);
      HRESULT (WINAPI *AttachCurrentSecurityContext)(IMSMQMessage2 *This);
      HRESULT (WINAPI *get_SenderVersion)(IMSMQMessage2 *This,long *plSenderVersion);
      HRESULT (WINAPI *get_Extension)(IMSMQMessage2 *This,VARIANT *pvarExtension);
      HRESULT (WINAPI *put_Extension)(IMSMQMessage2 *This,VARIANT varExtension);
      HRESULT (WINAPI *get_ConnectorTypeGuid)(IMSMQMessage2 *This,BSTR *pbstrGuidConnectorType);
      HRESULT (WINAPI *put_ConnectorTypeGuid)(IMSMQMessage2 *This,BSTR bstrGuidConnectorType);
      HRESULT (WINAPI *get_TransactionStatusQueueInfo)(IMSMQMessage2 *This,IMSMQQueueInfo2 **ppqinfoXactStatus);
      HRESULT (WINAPI *get_DestinationSymmetricKey)(IMSMQMessage2 *This,VARIANT *pvarDestSymmKey);
      HRESULT (WINAPI *put_DestinationSymmetricKey)(IMSMQMessage2 *This,VARIANT varDestSymmKey);
      HRESULT (WINAPI *get_Signature)(IMSMQMessage2 *This,VARIANT *pvarSignature);
      HRESULT (WINAPI *put_Signature)(IMSMQMessage2 *This,VARIANT varSignature);
      HRESULT (WINAPI *get_AuthenticationProviderType)(IMSMQMessage2 *This,long *plAuthProvType);
      HRESULT (WINAPI *put_AuthenticationProviderType)(IMSMQMessage2 *This,long lAuthProvType);
      HRESULT (WINAPI *get_AuthenticationProviderName)(IMSMQMessage2 *This,BSTR *pbstrAuthProvName);
      HRESULT (WINAPI *put_AuthenticationProviderName)(IMSMQMessage2 *This,BSTR bstrAuthProvName);
      HRESULT (WINAPI *put_SenderId)(IMSMQMessage2 *This,VARIANT varSenderId);
      HRESULT (WINAPI *get_MsgClass)(IMSMQMessage2 *This,long *plMsgClass);
      HRESULT (WINAPI *put_MsgClass)(IMSMQMessage2 *This,long lMsgClass);
      HRESULT (WINAPI *get_Properties)(IMSMQMessage2 *This,IDispatch **ppcolProperties);
      HRESULT (WINAPI *get_TransactionId)(IMSMQMessage2 *This,VARIANT *pvarXactId);
      HRESULT (WINAPI *get_IsFirstInTransaction)(IMSMQMessage2 *This,Boolean *pisFirstInXact);
      HRESULT (WINAPI *get_IsLastInTransaction)(IMSMQMessage2 *This,Boolean *pisLastInXact);
      HRESULT (WINAPI *get_ResponseQueueInfo)(IMSMQMessage2 *This,IMSMQQueueInfo2 **ppqinfoResponse);
      HRESULT (WINAPI *putref_ResponseQueueInfo)(IMSMQMessage2 *This,IMSMQQueueInfo2 *pqinfoResponse);
      HRESULT (WINAPI *get_AdminQueueInfo)(IMSMQMessage2 *This,IMSMQQueueInfo2 **ppqinfoAdmin);
      HRESULT (WINAPI *putref_AdminQueueInfo)(IMSMQMessage2 *This,IMSMQQueueInfo2 *pqinfoAdmin);
      HRESULT (WINAPI *get_ReceivedAuthenticationLevel)(IMSMQMessage2 *This,short *psReceivedAuthenticationLevel);
    END_INTERFACE
  } IMSMQMessage2Vtbl;
  interface IMSMQMessage2 {
    CONST_VTBL struct IMSMQMessage2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQMessage2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQMessage2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQMessage2_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQMessage2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQMessage2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQMessage2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQMessage2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQMessage2_get_Class(This,plClass) (This)->lpVtbl->get_Class(This,plClass)
#define IMSMQMessage2_get_PrivLevel(This,plPrivLevel) (This)->lpVtbl->get_PrivLevel(This,plPrivLevel)
#define IMSMQMessage2_put_PrivLevel(This,lPrivLevel) (This)->lpVtbl->put_PrivLevel(This,lPrivLevel)
#define IMSMQMessage2_get_AuthLevel(This,plAuthLevel) (This)->lpVtbl->get_AuthLevel(This,plAuthLevel)
#define IMSMQMessage2_put_AuthLevel(This,lAuthLevel) (This)->lpVtbl->put_AuthLevel(This,lAuthLevel)
#define IMSMQMessage2_get_IsAuthenticated(This,pisAuthenticated) (This)->lpVtbl->get_IsAuthenticated(This,pisAuthenticated)
#define IMSMQMessage2_get_Delivery(This,plDelivery) (This)->lpVtbl->get_Delivery(This,plDelivery)
#define IMSMQMessage2_put_Delivery(This,lDelivery) (This)->lpVtbl->put_Delivery(This,lDelivery)
#define IMSMQMessage2_get_Trace(This,plTrace) (This)->lpVtbl->get_Trace(This,plTrace)
#define IMSMQMessage2_put_Trace(This,lTrace) (This)->lpVtbl->put_Trace(This,lTrace)
#define IMSMQMessage2_get_Priority(This,plPriority) (This)->lpVtbl->get_Priority(This,plPriority)
#define IMSMQMessage2_put_Priority(This,lPriority) (This)->lpVtbl->put_Priority(This,lPriority)
#define IMSMQMessage2_get_Journal(This,plJournal) (This)->lpVtbl->get_Journal(This,plJournal)
#define IMSMQMessage2_put_Journal(This,lJournal) (This)->lpVtbl->put_Journal(This,lJournal)
#define IMSMQMessage2_get_ResponseQueueInfo_v1(This,ppqinfoResponse) (This)->lpVtbl->get_ResponseQueueInfo_v1(This,ppqinfoResponse)
#define IMSMQMessage2_putref_ResponseQueueInfo_v1(This,pqinfoResponse) (This)->lpVtbl->putref_ResponseQueueInfo_v1(This,pqinfoResponse)
#define IMSMQMessage2_get_AppSpecific(This,plAppSpecific) (This)->lpVtbl->get_AppSpecific(This,plAppSpecific)
#define IMSMQMessage2_put_AppSpecific(This,lAppSpecific) (This)->lpVtbl->put_AppSpecific(This,lAppSpecific)
#define IMSMQMessage2_get_SourceMachineGuid(This,pbstrGuidSrcMachine) (This)->lpVtbl->get_SourceMachineGuid(This,pbstrGuidSrcMachine)
#define IMSMQMessage2_get_BodyLength(This,pcbBody) (This)->lpVtbl->get_BodyLength(This,pcbBody)
#define IMSMQMessage2_get_Body(This,pvarBody) (This)->lpVtbl->get_Body(This,pvarBody)
#define IMSMQMessage2_put_Body(This,varBody) (This)->lpVtbl->put_Body(This,varBody)
#define IMSMQMessage2_get_AdminQueueInfo_v1(This,ppqinfoAdmin) (This)->lpVtbl->get_AdminQueueInfo_v1(This,ppqinfoAdmin)
#define IMSMQMessage2_putref_AdminQueueInfo_v1(This,pqinfoAdmin) (This)->lpVtbl->putref_AdminQueueInfo_v1(This,pqinfoAdmin)
#define IMSMQMessage2_get_Id(This,pvarMsgId) (This)->lpVtbl->get_Id(This,pvarMsgId)
#define IMSMQMessage2_get_CorrelationId(This,pvarMsgId) (This)->lpVtbl->get_CorrelationId(This,pvarMsgId)
#define IMSMQMessage2_put_CorrelationId(This,varMsgId) (This)->lpVtbl->put_CorrelationId(This,varMsgId)
#define IMSMQMessage2_get_Ack(This,plAck) (This)->lpVtbl->get_Ack(This,plAck)
#define IMSMQMessage2_put_Ack(This,lAck) (This)->lpVtbl->put_Ack(This,lAck)
#define IMSMQMessage2_get_Label(This,pbstrLabel) (This)->lpVtbl->get_Label(This,pbstrLabel)
#define IMSMQMessage2_put_Label(This,bstrLabel) (This)->lpVtbl->put_Label(This,bstrLabel)
#define IMSMQMessage2_get_MaxTimeToReachQueue(This,plMaxTimeToReachQueue) (This)->lpVtbl->get_MaxTimeToReachQueue(This,plMaxTimeToReachQueue)
#define IMSMQMessage2_put_MaxTimeToReachQueue(This,lMaxTimeToReachQueue) (This)->lpVtbl->put_MaxTimeToReachQueue(This,lMaxTimeToReachQueue)
#define IMSMQMessage2_get_MaxTimeToReceive(This,plMaxTimeToReceive) (This)->lpVtbl->get_MaxTimeToReceive(This,plMaxTimeToReceive)
#define IMSMQMessage2_put_MaxTimeToReceive(This,lMaxTimeToReceive) (This)->lpVtbl->put_MaxTimeToReceive(This,lMaxTimeToReceive)
#define IMSMQMessage2_get_HashAlgorithm(This,plHashAlg) (This)->lpVtbl->get_HashAlgorithm(This,plHashAlg)
#define IMSMQMessage2_put_HashAlgorithm(This,lHashAlg) (This)->lpVtbl->put_HashAlgorithm(This,lHashAlg)
#define IMSMQMessage2_get_EncryptAlgorithm(This,plEncryptAlg) (This)->lpVtbl->get_EncryptAlgorithm(This,plEncryptAlg)
#define IMSMQMessage2_put_EncryptAlgorithm(This,lEncryptAlg) (This)->lpVtbl->put_EncryptAlgorithm(This,lEncryptAlg)
#define IMSMQMessage2_get_SentTime(This,pvarSentTime) (This)->lpVtbl->get_SentTime(This,pvarSentTime)
#define IMSMQMessage2_get_ArrivedTime(This,plArrivedTime) (This)->lpVtbl->get_ArrivedTime(This,plArrivedTime)
#define IMSMQMessage2_get_DestinationQueueInfo(This,ppqinfoDest) (This)->lpVtbl->get_DestinationQueueInfo(This,ppqinfoDest)
#define IMSMQMessage2_get_SenderCertificate(This,pvarSenderCert) (This)->lpVtbl->get_SenderCertificate(This,pvarSenderCert)
#define IMSMQMessage2_put_SenderCertificate(This,varSenderCert) (This)->lpVtbl->put_SenderCertificate(This,varSenderCert)
#define IMSMQMessage2_get_SenderId(This,pvarSenderId) (This)->lpVtbl->get_SenderId(This,pvarSenderId)
#define IMSMQMessage2_get_SenderIdType(This,plSenderIdType) (This)->lpVtbl->get_SenderIdType(This,plSenderIdType)
#define IMSMQMessage2_put_SenderIdType(This,lSenderIdType) (This)->lpVtbl->put_SenderIdType(This,lSenderIdType)
#define IMSMQMessage2_Send(This,DestinationQueue,Transaction) (This)->lpVtbl->Send(This,DestinationQueue,Transaction)
#define IMSMQMessage2_AttachCurrentSecurityContext(This) (This)->lpVtbl->AttachCurrentSecurityContext(This)
#define IMSMQMessage2_get_SenderVersion(This,plSenderVersion) (This)->lpVtbl->get_SenderVersion(This,plSenderVersion)
#define IMSMQMessage2_get_Extension(This,pvarExtension) (This)->lpVtbl->get_Extension(This,pvarExtension)
#define IMSMQMessage2_put_Extension(This,varExtension) (This)->lpVtbl->put_Extension(This,varExtension)
#define IMSMQMessage2_get_ConnectorTypeGuid(This,pbstrGuidConnectorType) (This)->lpVtbl->get_ConnectorTypeGuid(This,pbstrGuidConnectorType)
#define IMSMQMessage2_put_ConnectorTypeGuid(This,bstrGuidConnectorType) (This)->lpVtbl->put_ConnectorTypeGuid(This,bstrGuidConnectorType)
#define IMSMQMessage2_get_TransactionStatusQueueInfo(This,ppqinfoXactStatus) (This)->lpVtbl->get_TransactionStatusQueueInfo(This,ppqinfoXactStatus)
#define IMSMQMessage2_get_DestinationSymmetricKey(This,pvarDestSymmKey) (This)->lpVtbl->get_DestinationSymmetricKey(This,pvarDestSymmKey)
#define IMSMQMessage2_put_DestinationSymmetricKey(This,varDestSymmKey) (This)->lpVtbl->put_DestinationSymmetricKey(This,varDestSymmKey)
#define IMSMQMessage2_get_Signature(This,pvarSignature) (This)->lpVtbl->get_Signature(This,pvarSignature)
#define IMSMQMessage2_put_Signature(This,varSignature) (This)->lpVtbl->put_Signature(This,varSignature)
#define IMSMQMessage2_get_AuthenticationProviderType(This,plAuthProvType) (This)->lpVtbl->get_AuthenticationProviderType(This,plAuthProvType)
#define IMSMQMessage2_put_AuthenticationProviderType(This,lAuthProvType) (This)->lpVtbl->put_AuthenticationProviderType(This,lAuthProvType)
#define IMSMQMessage2_get_AuthenticationProviderName(This,pbstrAuthProvName) (This)->lpVtbl->get_AuthenticationProviderName(This,pbstrAuthProvName)
#define IMSMQMessage2_put_AuthenticationProviderName(This,bstrAuthProvName) (This)->lpVtbl->put_AuthenticationProviderName(This,bstrAuthProvName)
#define IMSMQMessage2_put_SenderId(This,varSenderId) (This)->lpVtbl->put_SenderId(This,varSenderId)
#define IMSMQMessage2_get_MsgClass(This,plMsgClass) (This)->lpVtbl->get_MsgClass(This,plMsgClass)
#define IMSMQMessage2_put_MsgClass(This,lMsgClass) (This)->lpVtbl->put_MsgClass(This,lMsgClass)
#define IMSMQMessage2_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#define IMSMQMessage2_get_TransactionId(This,pvarXactId) (This)->lpVtbl->get_TransactionId(This,pvarXactId)
#define IMSMQMessage2_get_IsFirstInTransaction(This,pisFirstInXact) (This)->lpVtbl->get_IsFirstInTransaction(This,pisFirstInXact)
#define IMSMQMessage2_get_IsLastInTransaction(This,pisLastInXact) (This)->lpVtbl->get_IsLastInTransaction(This,pisLastInXact)
#define IMSMQMessage2_get_ResponseQueueInfo(This,ppqinfoResponse) (This)->lpVtbl->get_ResponseQueueInfo(This,ppqinfoResponse)
#define IMSMQMessage2_putref_ResponseQueueInfo(This,pqinfoResponse) (This)->lpVtbl->putref_ResponseQueueInfo(This,pqinfoResponse)
#define IMSMQMessage2_get_AdminQueueInfo(This,ppqinfoAdmin) (This)->lpVtbl->get_AdminQueueInfo(This,ppqinfoAdmin)
#define IMSMQMessage2_putref_AdminQueueInfo(This,pqinfoAdmin) (This)->lpVtbl->putref_AdminQueueInfo(This,pqinfoAdmin)
#define IMSMQMessage2_get_ReceivedAuthenticationLevel(This,psReceivedAuthenticationLevel) (This)->lpVtbl->get_ReceivedAuthenticationLevel(This,psReceivedAuthenticationLevel)
#endif
#endif
  HRESULT WINAPI IMSMQMessage2_get_Class_Proxy(IMSMQMessage2 *This,long *plClass);
  void __RPC_STUB IMSMQMessage2_get_Class_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_PrivLevel_Proxy(IMSMQMessage2 *This,long *plPrivLevel);
  void __RPC_STUB IMSMQMessage2_get_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_PrivLevel_Proxy(IMSMQMessage2 *This,long lPrivLevel);
  void __RPC_STUB IMSMQMessage2_put_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_AuthLevel_Proxy(IMSMQMessage2 *This,long *plAuthLevel);
  void __RPC_STUB IMSMQMessage2_get_AuthLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_AuthLevel_Proxy(IMSMQMessage2 *This,long lAuthLevel);
  void __RPC_STUB IMSMQMessage2_put_AuthLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_IsAuthenticated_Proxy(IMSMQMessage2 *This,Boolean *pisAuthenticated);
  void __RPC_STUB IMSMQMessage2_get_IsAuthenticated_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Delivery_Proxy(IMSMQMessage2 *This,long *plDelivery);
  void __RPC_STUB IMSMQMessage2_get_Delivery_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_Delivery_Proxy(IMSMQMessage2 *This,long lDelivery);
  void __RPC_STUB IMSMQMessage2_put_Delivery_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Trace_Proxy(IMSMQMessage2 *This,long *plTrace);
  void __RPC_STUB IMSMQMessage2_get_Trace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_Trace_Proxy(IMSMQMessage2 *This,long lTrace);
  void __RPC_STUB IMSMQMessage2_put_Trace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Priority_Proxy(IMSMQMessage2 *This,long *plPriority);
  void __RPC_STUB IMSMQMessage2_get_Priority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_Priority_Proxy(IMSMQMessage2 *This,long lPriority);
  void __RPC_STUB IMSMQMessage2_put_Priority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Journal_Proxy(IMSMQMessage2 *This,long *plJournal);
  void __RPC_STUB IMSMQMessage2_get_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_Journal_Proxy(IMSMQMessage2 *This,long lJournal);
  void __RPC_STUB IMSMQMessage2_put_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_ResponseQueueInfo_v1_Proxy(IMSMQMessage2 *This,IMSMQQueueInfo **ppqinfoResponse);
  void __RPC_STUB IMSMQMessage2_get_ResponseQueueInfo_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_putref_ResponseQueueInfo_v1_Proxy(IMSMQMessage2 *This,IMSMQQueueInfo *pqinfoResponse);
  void __RPC_STUB IMSMQMessage2_putref_ResponseQueueInfo_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_AppSpecific_Proxy(IMSMQMessage2 *This,long *plAppSpecific);
  void __RPC_STUB IMSMQMessage2_get_AppSpecific_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_AppSpecific_Proxy(IMSMQMessage2 *This,long lAppSpecific);
  void __RPC_STUB IMSMQMessage2_put_AppSpecific_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_SourceMachineGuid_Proxy(IMSMQMessage2 *This,BSTR *pbstrGuidSrcMachine);
  void __RPC_STUB IMSMQMessage2_get_SourceMachineGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_BodyLength_Proxy(IMSMQMessage2 *This,long *pcbBody);
  void __RPC_STUB IMSMQMessage2_get_BodyLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Body_Proxy(IMSMQMessage2 *This,VARIANT *pvarBody);
  void __RPC_STUB IMSMQMessage2_get_Body_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_Body_Proxy(IMSMQMessage2 *This,VARIANT varBody);
  void __RPC_STUB IMSMQMessage2_put_Body_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_AdminQueueInfo_v1_Proxy(IMSMQMessage2 *This,IMSMQQueueInfo **ppqinfoAdmin);
  void __RPC_STUB IMSMQMessage2_get_AdminQueueInfo_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_putref_AdminQueueInfo_v1_Proxy(IMSMQMessage2 *This,IMSMQQueueInfo *pqinfoAdmin);
  void __RPC_STUB IMSMQMessage2_putref_AdminQueueInfo_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Id_Proxy(IMSMQMessage2 *This,VARIANT *pvarMsgId);
  void __RPC_STUB IMSMQMessage2_get_Id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_CorrelationId_Proxy(IMSMQMessage2 *This,VARIANT *pvarMsgId);
  void __RPC_STUB IMSMQMessage2_get_CorrelationId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_CorrelationId_Proxy(IMSMQMessage2 *This,VARIANT varMsgId);
  void __RPC_STUB IMSMQMessage2_put_CorrelationId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Ack_Proxy(IMSMQMessage2 *This,long *plAck);
  void __RPC_STUB IMSMQMessage2_get_Ack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_Ack_Proxy(IMSMQMessage2 *This,long lAck);
  void __RPC_STUB IMSMQMessage2_put_Ack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Label_Proxy(IMSMQMessage2 *This,BSTR *pbstrLabel);
  void __RPC_STUB IMSMQMessage2_get_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_Label_Proxy(IMSMQMessage2 *This,BSTR bstrLabel);
  void __RPC_STUB IMSMQMessage2_put_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_MaxTimeToReachQueue_Proxy(IMSMQMessage2 *This,long *plMaxTimeToReachQueue);
  void __RPC_STUB IMSMQMessage2_get_MaxTimeToReachQueue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_MaxTimeToReachQueue_Proxy(IMSMQMessage2 *This,long lMaxTimeToReachQueue);
  void __RPC_STUB IMSMQMessage2_put_MaxTimeToReachQueue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_MaxTimeToReceive_Proxy(IMSMQMessage2 *This,long *plMaxTimeToReceive);
  void __RPC_STUB IMSMQMessage2_get_MaxTimeToReceive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_MaxTimeToReceive_Proxy(IMSMQMessage2 *This,long lMaxTimeToReceive);
  void __RPC_STUB IMSMQMessage2_put_MaxTimeToReceive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_HashAlgorithm_Proxy(IMSMQMessage2 *This,long *plHashAlg);
  void __RPC_STUB IMSMQMessage2_get_HashAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_HashAlgorithm_Proxy(IMSMQMessage2 *This,long lHashAlg);
  void __RPC_STUB IMSMQMessage2_put_HashAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_EncryptAlgorithm_Proxy(IMSMQMessage2 *This,long *plEncryptAlg);
  void __RPC_STUB IMSMQMessage2_get_EncryptAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_EncryptAlgorithm_Proxy(IMSMQMessage2 *This,long lEncryptAlg);
  void __RPC_STUB IMSMQMessage2_put_EncryptAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_SentTime_Proxy(IMSMQMessage2 *This,VARIANT *pvarSentTime);
  void __RPC_STUB IMSMQMessage2_get_SentTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_ArrivedTime_Proxy(IMSMQMessage2 *This,VARIANT *plArrivedTime);
  void __RPC_STUB IMSMQMessage2_get_ArrivedTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_DestinationQueueInfo_Proxy(IMSMQMessage2 *This,IMSMQQueueInfo2 **ppqinfoDest);
  void __RPC_STUB IMSMQMessage2_get_DestinationQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_SenderCertificate_Proxy(IMSMQMessage2 *This,VARIANT *pvarSenderCert);
  void __RPC_STUB IMSMQMessage2_get_SenderCertificate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_SenderCertificate_Proxy(IMSMQMessage2 *This,VARIANT varSenderCert);
  void __RPC_STUB IMSMQMessage2_put_SenderCertificate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_SenderId_Proxy(IMSMQMessage2 *This,VARIANT *pvarSenderId);
  void __RPC_STUB IMSMQMessage2_get_SenderId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_SenderIdType_Proxy(IMSMQMessage2 *This,long *plSenderIdType);
  void __RPC_STUB IMSMQMessage2_get_SenderIdType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_SenderIdType_Proxy(IMSMQMessage2 *This,long lSenderIdType);
  void __RPC_STUB IMSMQMessage2_put_SenderIdType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_Send_Proxy(IMSMQMessage2 *This,IMSMQQueue2 *DestinationQueue,VARIANT *Transaction);
  void __RPC_STUB IMSMQMessage2_Send_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_AttachCurrentSecurityContext_Proxy(IMSMQMessage2 *This);
  void __RPC_STUB IMSMQMessage2_AttachCurrentSecurityContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_SenderVersion_Proxy(IMSMQMessage2 *This,long *plSenderVersion);
  void __RPC_STUB IMSMQMessage2_get_SenderVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Extension_Proxy(IMSMQMessage2 *This,VARIANT *pvarExtension);
  void __RPC_STUB IMSMQMessage2_get_Extension_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_Extension_Proxy(IMSMQMessage2 *This,VARIANT varExtension);
  void __RPC_STUB IMSMQMessage2_put_Extension_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_ConnectorTypeGuid_Proxy(IMSMQMessage2 *This,BSTR *pbstrGuidConnectorType);
  void __RPC_STUB IMSMQMessage2_get_ConnectorTypeGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_ConnectorTypeGuid_Proxy(IMSMQMessage2 *This,BSTR bstrGuidConnectorType);
  void __RPC_STUB IMSMQMessage2_put_ConnectorTypeGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_TransactionStatusQueueInfo_Proxy(IMSMQMessage2 *This,IMSMQQueueInfo2 **ppqinfoXactStatus);
  void __RPC_STUB IMSMQMessage2_get_TransactionStatusQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_DestinationSymmetricKey_Proxy(IMSMQMessage2 *This,VARIANT *pvarDestSymmKey);
  void __RPC_STUB IMSMQMessage2_get_DestinationSymmetricKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_DestinationSymmetricKey_Proxy(IMSMQMessage2 *This,VARIANT varDestSymmKey);
  void __RPC_STUB IMSMQMessage2_put_DestinationSymmetricKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Signature_Proxy(IMSMQMessage2 *This,VARIANT *pvarSignature);
  void __RPC_STUB IMSMQMessage2_get_Signature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_Signature_Proxy(IMSMQMessage2 *This,VARIANT varSignature);
  void __RPC_STUB IMSMQMessage2_put_Signature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_AuthenticationProviderType_Proxy(IMSMQMessage2 *This,long *plAuthProvType);
  void __RPC_STUB IMSMQMessage2_get_AuthenticationProviderType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_AuthenticationProviderType_Proxy(IMSMQMessage2 *This,long lAuthProvType);
  void __RPC_STUB IMSMQMessage2_put_AuthenticationProviderType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_AuthenticationProviderName_Proxy(IMSMQMessage2 *This,BSTR *pbstrAuthProvName);
  void __RPC_STUB IMSMQMessage2_get_AuthenticationProviderName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_AuthenticationProviderName_Proxy(IMSMQMessage2 *This,BSTR bstrAuthProvName);
  void __RPC_STUB IMSMQMessage2_put_AuthenticationProviderName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_SenderId_Proxy(IMSMQMessage2 *This,VARIANT varSenderId);
  void __RPC_STUB IMSMQMessage2_put_SenderId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_MsgClass_Proxy(IMSMQMessage2 *This,long *plMsgClass);
  void __RPC_STUB IMSMQMessage2_get_MsgClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_put_MsgClass_Proxy(IMSMQMessage2 *This,long lMsgClass);
  void __RPC_STUB IMSMQMessage2_put_MsgClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_Properties_Proxy(IMSMQMessage2 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQMessage2_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_TransactionId_Proxy(IMSMQMessage2 *This,VARIANT *pvarXactId);
  void __RPC_STUB IMSMQMessage2_get_TransactionId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_IsFirstInTransaction_Proxy(IMSMQMessage2 *This,Boolean *pisFirstInXact);
  void __RPC_STUB IMSMQMessage2_get_IsFirstInTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_IsLastInTransaction_Proxy(IMSMQMessage2 *This,Boolean *pisLastInXact);
  void __RPC_STUB IMSMQMessage2_get_IsLastInTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_ResponseQueueInfo_Proxy(IMSMQMessage2 *This,IMSMQQueueInfo2 **ppqinfoResponse);
  void __RPC_STUB IMSMQMessage2_get_ResponseQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_putref_ResponseQueueInfo_Proxy(IMSMQMessage2 *This,IMSMQQueueInfo2 *pqinfoResponse);
  void __RPC_STUB IMSMQMessage2_putref_ResponseQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_AdminQueueInfo_Proxy(IMSMQMessage2 *This,IMSMQQueueInfo2 **ppqinfoAdmin);
  void __RPC_STUB IMSMQMessage2_get_AdminQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_putref_AdminQueueInfo_Proxy(IMSMQMessage2 *This,IMSMQQueueInfo2 *pqinfoAdmin);
  void __RPC_STUB IMSMQMessage2_putref_AdminQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage2_get_ReceivedAuthenticationLevel_Proxy(IMSMQMessage2 *This,short *psReceivedAuthenticationLevel);
  void __RPC_STUB IMSMQMessage2_get_ReceivedAuthenticationLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQMessage3_INTERFACE_DEFINED__
#define __IMSMQMessage3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQMessage3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQMessage3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Class(long *plClass) = 0;
    virtual HRESULT WINAPI get_PrivLevel(long *plPrivLevel) = 0;
    virtual HRESULT WINAPI put_PrivLevel(long lPrivLevel) = 0;
    virtual HRESULT WINAPI get_AuthLevel(long *plAuthLevel) = 0;
    virtual HRESULT WINAPI put_AuthLevel(long lAuthLevel) = 0;
    virtual HRESULT WINAPI get_IsAuthenticated(Boolean *pisAuthenticated) = 0;
    virtual HRESULT WINAPI get_Delivery(long *plDelivery) = 0;
    virtual HRESULT WINAPI put_Delivery(long lDelivery) = 0;
    virtual HRESULT WINAPI get_Trace(long *plTrace) = 0;
    virtual HRESULT WINAPI put_Trace(long lTrace) = 0;
    virtual HRESULT WINAPI get_Priority(long *plPriority) = 0;
    virtual HRESULT WINAPI put_Priority(long lPriority) = 0;
    virtual HRESULT WINAPI get_Journal(long *plJournal) = 0;
    virtual HRESULT WINAPI put_Journal(long lJournal) = 0;
    virtual HRESULT WINAPI get_ResponseQueueInfo_v1(IMSMQQueueInfo **ppqinfoResponse) = 0;
    virtual HRESULT WINAPI putref_ResponseQueueInfo_v1(IMSMQQueueInfo *pqinfoResponse) = 0;
    virtual HRESULT WINAPI get_AppSpecific(long *plAppSpecific) = 0;
    virtual HRESULT WINAPI put_AppSpecific(long lAppSpecific) = 0;
    virtual HRESULT WINAPI get_SourceMachineGuid(BSTR *pbstrGuidSrcMachine) = 0;
    virtual HRESULT WINAPI get_BodyLength(long *pcbBody) = 0;
    virtual HRESULT WINAPI get_Body(VARIANT *pvarBody) = 0;
    virtual HRESULT WINAPI put_Body(VARIANT varBody) = 0;
    virtual HRESULT WINAPI get_AdminQueueInfo_v1(IMSMQQueueInfo **ppqinfoAdmin) = 0;
    virtual HRESULT WINAPI putref_AdminQueueInfo_v1(IMSMQQueueInfo *pqinfoAdmin) = 0;
    virtual HRESULT WINAPI get_Id(VARIANT *pvarMsgId) = 0;
    virtual HRESULT WINAPI get_CorrelationId(VARIANT *pvarMsgId) = 0;
    virtual HRESULT WINAPI put_CorrelationId(VARIANT varMsgId) = 0;
    virtual HRESULT WINAPI get_Ack(long *plAck) = 0;
    virtual HRESULT WINAPI put_Ack(long lAck) = 0;
    virtual HRESULT WINAPI get_Label(BSTR *pbstrLabel) = 0;
    virtual HRESULT WINAPI put_Label(BSTR bstrLabel) = 0;
    virtual HRESULT WINAPI get_MaxTimeToReachQueue(long *plMaxTimeToReachQueue) = 0;
    virtual HRESULT WINAPI put_MaxTimeToReachQueue(long lMaxTimeToReachQueue) = 0;
    virtual HRESULT WINAPI get_MaxTimeToReceive(long *plMaxTimeToReceive) = 0;
    virtual HRESULT WINAPI put_MaxTimeToReceive(long lMaxTimeToReceive) = 0;
    virtual HRESULT WINAPI get_HashAlgorithm(long *plHashAlg) = 0;
    virtual HRESULT WINAPI put_HashAlgorithm(long lHashAlg) = 0;
    virtual HRESULT WINAPI get_EncryptAlgorithm(long *plEncryptAlg) = 0;
    virtual HRESULT WINAPI put_EncryptAlgorithm(long lEncryptAlg) = 0;
    virtual HRESULT WINAPI get_SentTime(VARIANT *pvarSentTime) = 0;
    virtual HRESULT WINAPI get_ArrivedTime(VARIANT *plArrivedTime) = 0;
    virtual HRESULT WINAPI get_DestinationQueueInfo(IMSMQQueueInfo3 **ppqinfoDest) = 0;
    virtual HRESULT WINAPI get_SenderCertificate(VARIANT *pvarSenderCert) = 0;
    virtual HRESULT WINAPI put_SenderCertificate(VARIANT varSenderCert) = 0;
    virtual HRESULT WINAPI get_SenderId(VARIANT *pvarSenderId) = 0;
    virtual HRESULT WINAPI get_SenderIdType(long *plSenderIdType) = 0;
    virtual HRESULT WINAPI put_SenderIdType(long lSenderIdType) = 0;
    virtual HRESULT WINAPI Send(IDispatch *DestinationQueue,VARIANT *Transaction) = 0;
    virtual HRESULT WINAPI AttachCurrentSecurityContext(void) = 0;
    virtual HRESULT WINAPI get_SenderVersion(long *plSenderVersion) = 0;
    virtual HRESULT WINAPI get_Extension(VARIANT *pvarExtension) = 0;
    virtual HRESULT WINAPI put_Extension(VARIANT varExtension) = 0;
    virtual HRESULT WINAPI get_ConnectorTypeGuid(BSTR *pbstrGuidConnectorType) = 0;
    virtual HRESULT WINAPI put_ConnectorTypeGuid(BSTR bstrGuidConnectorType) = 0;
    virtual HRESULT WINAPI get_TransactionStatusQueueInfo(IMSMQQueueInfo3 **ppqinfoXactStatus) = 0;
    virtual HRESULT WINAPI get_DestinationSymmetricKey(VARIANT *pvarDestSymmKey) = 0;
    virtual HRESULT WINAPI put_DestinationSymmetricKey(VARIANT varDestSymmKey) = 0;
    virtual HRESULT WINAPI get_Signature(VARIANT *pvarSignature) = 0;
    virtual HRESULT WINAPI put_Signature(VARIANT varSignature) = 0;
    virtual HRESULT WINAPI get_AuthenticationProviderType(long *plAuthProvType) = 0;
    virtual HRESULT WINAPI put_AuthenticationProviderType(long lAuthProvType) = 0;
    virtual HRESULT WINAPI get_AuthenticationProviderName(BSTR *pbstrAuthProvName) = 0;
    virtual HRESULT WINAPI put_AuthenticationProviderName(BSTR bstrAuthProvName) = 0;
    virtual HRESULT WINAPI put_SenderId(VARIANT varSenderId) = 0;
    virtual HRESULT WINAPI get_MsgClass(long *plMsgClass) = 0;
    virtual HRESULT WINAPI put_MsgClass(long lMsgClass) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
    virtual HRESULT WINAPI get_TransactionId(VARIANT *pvarXactId) = 0;
    virtual HRESULT WINAPI get_IsFirstInTransaction(Boolean *pisFirstInXact) = 0;
    virtual HRESULT WINAPI get_IsLastInTransaction(Boolean *pisLastInXact) = 0;
    virtual HRESULT WINAPI get_ResponseQueueInfo_v2(IMSMQQueueInfo2 **ppqinfoResponse) = 0;
    virtual HRESULT WINAPI putref_ResponseQueueInfo_v2(IMSMQQueueInfo2 *pqinfoResponse) = 0;
    virtual HRESULT WINAPI get_AdminQueueInfo_v2(IMSMQQueueInfo2 **ppqinfoAdmin) = 0;
    virtual HRESULT WINAPI putref_AdminQueueInfo_v2(IMSMQQueueInfo2 *pqinfoAdmin) = 0;
    virtual HRESULT WINAPI get_ReceivedAuthenticationLevel(short *psReceivedAuthenticationLevel) = 0;
    virtual HRESULT WINAPI get_ResponseQueueInfo(IMSMQQueueInfo3 **ppqinfoResponse) = 0;
    virtual HRESULT WINAPI putref_ResponseQueueInfo(IMSMQQueueInfo3 *pqinfoResponse) = 0;
    virtual HRESULT WINAPI get_AdminQueueInfo(IMSMQQueueInfo3 **ppqinfoAdmin) = 0;
    virtual HRESULT WINAPI putref_AdminQueueInfo(IMSMQQueueInfo3 *pqinfoAdmin) = 0;
    virtual HRESULT WINAPI get_ResponseDestination(IDispatch **ppdestResponse) = 0;
    virtual HRESULT WINAPI putref_ResponseDestination(IDispatch *pdestResponse) = 0;
    virtual HRESULT WINAPI get_Destination(IDispatch **ppdestDestination) = 0;
    virtual HRESULT WINAPI get_LookupId(VARIANT *pvarLookupId) = 0;
    virtual HRESULT WINAPI get_IsAuthenticated2(VARIANT_BOOL *pisAuthenticated) = 0;
    virtual HRESULT WINAPI get_IsFirstInTransaction2(VARIANT_BOOL *pisFirstInXact) = 0;
    virtual HRESULT WINAPI get_IsLastInTransaction2(VARIANT_BOOL *pisLastInXact) = 0;
    virtual HRESULT WINAPI AttachCurrentSecurityContext2(void) = 0;
    virtual HRESULT WINAPI get_SoapEnvelope(BSTR *pbstrSoapEnvelope) = 0;
    virtual HRESULT WINAPI get_CompoundMessage(VARIANT *pvarCompoundMessage) = 0;
    virtual HRESULT WINAPI put_SoapHeader(BSTR bstrSoapHeader) = 0;
    virtual HRESULT WINAPI put_SoapBody(BSTR bstrSoapBody) = 0;
  };
#else
  typedef struct IMSMQMessage3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQMessage3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQMessage3 *This);
      ULONG (WINAPI *Release)(IMSMQMessage3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQMessage3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQMessage3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQMessage3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQMessage3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Class)(IMSMQMessage3 *This,long *plClass);
      HRESULT (WINAPI *get_PrivLevel)(IMSMQMessage3 *This,long *plPrivLevel);
      HRESULT (WINAPI *put_PrivLevel)(IMSMQMessage3 *This,long lPrivLevel);
      HRESULT (WINAPI *get_AuthLevel)(IMSMQMessage3 *This,long *plAuthLevel);
      HRESULT (WINAPI *put_AuthLevel)(IMSMQMessage3 *This,long lAuthLevel);
      HRESULT (WINAPI *get_IsAuthenticated)(IMSMQMessage3 *This,Boolean *pisAuthenticated);
      HRESULT (WINAPI *get_Delivery)(IMSMQMessage3 *This,long *plDelivery);
      HRESULT (WINAPI *put_Delivery)(IMSMQMessage3 *This,long lDelivery);
      HRESULT (WINAPI *get_Trace)(IMSMQMessage3 *This,long *plTrace);
      HRESULT (WINAPI *put_Trace)(IMSMQMessage3 *This,long lTrace);
      HRESULT (WINAPI *get_Priority)(IMSMQMessage3 *This,long *plPriority);
      HRESULT (WINAPI *put_Priority)(IMSMQMessage3 *This,long lPriority);
      HRESULT (WINAPI *get_Journal)(IMSMQMessage3 *This,long *plJournal);
      HRESULT (WINAPI *put_Journal)(IMSMQMessage3 *This,long lJournal);
      HRESULT (WINAPI *get_ResponseQueueInfo_v1)(IMSMQMessage3 *This,IMSMQQueueInfo **ppqinfoResponse);
      HRESULT (WINAPI *putref_ResponseQueueInfo_v1)(IMSMQMessage3 *This,IMSMQQueueInfo *pqinfoResponse);
      HRESULT (WINAPI *get_AppSpecific)(IMSMQMessage3 *This,long *plAppSpecific);
      HRESULT (WINAPI *put_AppSpecific)(IMSMQMessage3 *This,long lAppSpecific);
      HRESULT (WINAPI *get_SourceMachineGuid)(IMSMQMessage3 *This,BSTR *pbstrGuidSrcMachine);
      HRESULT (WINAPI *get_BodyLength)(IMSMQMessage3 *This,long *pcbBody);
      HRESULT (WINAPI *get_Body)(IMSMQMessage3 *This,VARIANT *pvarBody);
      HRESULT (WINAPI *put_Body)(IMSMQMessage3 *This,VARIANT varBody);
      HRESULT (WINAPI *get_AdminQueueInfo_v1)(IMSMQMessage3 *This,IMSMQQueueInfo **ppqinfoAdmin);
      HRESULT (WINAPI *putref_AdminQueueInfo_v1)(IMSMQMessage3 *This,IMSMQQueueInfo *pqinfoAdmin);
      HRESULT (WINAPI *get_Id)(IMSMQMessage3 *This,VARIANT *pvarMsgId);
      HRESULT (WINAPI *get_CorrelationId)(IMSMQMessage3 *This,VARIANT *pvarMsgId);
      HRESULT (WINAPI *put_CorrelationId)(IMSMQMessage3 *This,VARIANT varMsgId);
      HRESULT (WINAPI *get_Ack)(IMSMQMessage3 *This,long *plAck);
      HRESULT (WINAPI *put_Ack)(IMSMQMessage3 *This,long lAck);
      HRESULT (WINAPI *get_Label)(IMSMQMessage3 *This,BSTR *pbstrLabel);
      HRESULT (WINAPI *put_Label)(IMSMQMessage3 *This,BSTR bstrLabel);
      HRESULT (WINAPI *get_MaxTimeToReachQueue)(IMSMQMessage3 *This,long *plMaxTimeToReachQueue);
      HRESULT (WINAPI *put_MaxTimeToReachQueue)(IMSMQMessage3 *This,long lMaxTimeToReachQueue);
      HRESULT (WINAPI *get_MaxTimeToReceive)(IMSMQMessage3 *This,long *plMaxTimeToReceive);
      HRESULT (WINAPI *put_MaxTimeToReceive)(IMSMQMessage3 *This,long lMaxTimeToReceive);
      HRESULT (WINAPI *get_HashAlgorithm)(IMSMQMessage3 *This,long *plHashAlg);
      HRESULT (WINAPI *put_HashAlgorithm)(IMSMQMessage3 *This,long lHashAlg);
      HRESULT (WINAPI *get_EncryptAlgorithm)(IMSMQMessage3 *This,long *plEncryptAlg);
      HRESULT (WINAPI *put_EncryptAlgorithm)(IMSMQMessage3 *This,long lEncryptAlg);
      HRESULT (WINAPI *get_SentTime)(IMSMQMessage3 *This,VARIANT *pvarSentTime);
      HRESULT (WINAPI *get_ArrivedTime)(IMSMQMessage3 *This,VARIANT *plArrivedTime);
      HRESULT (WINAPI *get_DestinationQueueInfo)(IMSMQMessage3 *This,IMSMQQueueInfo3 **ppqinfoDest);
      HRESULT (WINAPI *get_SenderCertificate)(IMSMQMessage3 *This,VARIANT *pvarSenderCert);
      HRESULT (WINAPI *put_SenderCertificate)(IMSMQMessage3 *This,VARIANT varSenderCert);
      HRESULT (WINAPI *get_SenderId)(IMSMQMessage3 *This,VARIANT *pvarSenderId);
      HRESULT (WINAPI *get_SenderIdType)(IMSMQMessage3 *This,long *plSenderIdType);
      HRESULT (WINAPI *put_SenderIdType)(IMSMQMessage3 *This,long lSenderIdType);
      HRESULT (WINAPI *Send)(IMSMQMessage3 *This,IDispatch *DestinationQueue,VARIANT *Transaction);
      HRESULT (WINAPI *AttachCurrentSecurityContext)(IMSMQMessage3 *This);
      HRESULT (WINAPI *get_SenderVersion)(IMSMQMessage3 *This,long *plSenderVersion);
      HRESULT (WINAPI *get_Extension)(IMSMQMessage3 *This,VARIANT *pvarExtension);
      HRESULT (WINAPI *put_Extension)(IMSMQMessage3 *This,VARIANT varExtension);
      HRESULT (WINAPI *get_ConnectorTypeGuid)(IMSMQMessage3 *This,BSTR *pbstrGuidConnectorType);
      HRESULT (WINAPI *put_ConnectorTypeGuid)(IMSMQMessage3 *This,BSTR bstrGuidConnectorType);
      HRESULT (WINAPI *get_TransactionStatusQueueInfo)(IMSMQMessage3 *This,IMSMQQueueInfo3 **ppqinfoXactStatus);
      HRESULT (WINAPI *get_DestinationSymmetricKey)(IMSMQMessage3 *This,VARIANT *pvarDestSymmKey);
      HRESULT (WINAPI *put_DestinationSymmetricKey)(IMSMQMessage3 *This,VARIANT varDestSymmKey);
      HRESULT (WINAPI *get_Signature)(IMSMQMessage3 *This,VARIANT *pvarSignature);
      HRESULT (WINAPI *put_Signature)(IMSMQMessage3 *This,VARIANT varSignature);
      HRESULT (WINAPI *get_AuthenticationProviderType)(IMSMQMessage3 *This,long *plAuthProvType);
      HRESULT (WINAPI *put_AuthenticationProviderType)(IMSMQMessage3 *This,long lAuthProvType);
      HRESULT (WINAPI *get_AuthenticationProviderName)(IMSMQMessage3 *This,BSTR *pbstrAuthProvName);
      HRESULT (WINAPI *put_AuthenticationProviderName)(IMSMQMessage3 *This,BSTR bstrAuthProvName);
      HRESULT (WINAPI *put_SenderId)(IMSMQMessage3 *This,VARIANT varSenderId);
      HRESULT (WINAPI *get_MsgClass)(IMSMQMessage3 *This,long *plMsgClass);
      HRESULT (WINAPI *put_MsgClass)(IMSMQMessage3 *This,long lMsgClass);
      HRESULT (WINAPI *get_Properties)(IMSMQMessage3 *This,IDispatch **ppcolProperties);
      HRESULT (WINAPI *get_TransactionId)(IMSMQMessage3 *This,VARIANT *pvarXactId);
      HRESULT (WINAPI *get_IsFirstInTransaction)(IMSMQMessage3 *This,Boolean *pisFirstInXact);
      HRESULT (WINAPI *get_IsLastInTransaction)(IMSMQMessage3 *This,Boolean *pisLastInXact);
      HRESULT (WINAPI *get_ResponseQueueInfo_v2)(IMSMQMessage3 *This,IMSMQQueueInfo2 **ppqinfoResponse);
      HRESULT (WINAPI *putref_ResponseQueueInfo_v2)(IMSMQMessage3 *This,IMSMQQueueInfo2 *pqinfoResponse);
      HRESULT (WINAPI *get_AdminQueueInfo_v2)(IMSMQMessage3 *This,IMSMQQueueInfo2 **ppqinfoAdmin);
      HRESULT (WINAPI *putref_AdminQueueInfo_v2)(IMSMQMessage3 *This,IMSMQQueueInfo2 *pqinfoAdmin);
      HRESULT (WINAPI *get_ReceivedAuthenticationLevel)(IMSMQMessage3 *This,short *psReceivedAuthenticationLevel);
      HRESULT (WINAPI *get_ResponseQueueInfo)(IMSMQMessage3 *This,IMSMQQueueInfo3 **ppqinfoResponse);
      HRESULT (WINAPI *putref_ResponseQueueInfo)(IMSMQMessage3 *This,IMSMQQueueInfo3 *pqinfoResponse);
      HRESULT (WINAPI *get_AdminQueueInfo)(IMSMQMessage3 *This,IMSMQQueueInfo3 **ppqinfoAdmin);
      HRESULT (WINAPI *putref_AdminQueueInfo)(IMSMQMessage3 *This,IMSMQQueueInfo3 *pqinfoAdmin);
      HRESULT (WINAPI *get_ResponseDestination)(IMSMQMessage3 *This,IDispatch **ppdestResponse);
      HRESULT (WINAPI *putref_ResponseDestination)(IMSMQMessage3 *This,IDispatch *pdestResponse);
      HRESULT (WINAPI *get_Destination)(IMSMQMessage3 *This,IDispatch **ppdestDestination);
      HRESULT (WINAPI *get_LookupId)(IMSMQMessage3 *This,VARIANT *pvarLookupId);
      HRESULT (WINAPI *get_IsAuthenticated2)(IMSMQMessage3 *This,VARIANT_BOOL *pisAuthenticated);
      HRESULT (WINAPI *get_IsFirstInTransaction2)(IMSMQMessage3 *This,VARIANT_BOOL *pisFirstInXact);
      HRESULT (WINAPI *get_IsLastInTransaction2)(IMSMQMessage3 *This,VARIANT_BOOL *pisLastInXact);
      HRESULT (WINAPI *AttachCurrentSecurityContext2)(IMSMQMessage3 *This);
      HRESULT (WINAPI *get_SoapEnvelope)(IMSMQMessage3 *This,BSTR *pbstrSoapEnvelope);
      HRESULT (WINAPI *get_CompoundMessage)(IMSMQMessage3 *This,VARIANT *pvarCompoundMessage);
      HRESULT (WINAPI *put_SoapHeader)(IMSMQMessage3 *This,BSTR bstrSoapHeader);
      HRESULT (WINAPI *put_SoapBody)(IMSMQMessage3 *This,BSTR bstrSoapBody);
    END_INTERFACE
  } IMSMQMessage3Vtbl;
  interface IMSMQMessage3 {
    CONST_VTBL struct IMSMQMessage3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQMessage3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQMessage3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQMessage3_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQMessage3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQMessage3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQMessage3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQMessage3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQMessage3_get_Class(This,plClass) (This)->lpVtbl->get_Class(This,plClass)
#define IMSMQMessage3_get_PrivLevel(This,plPrivLevel) (This)->lpVtbl->get_PrivLevel(This,plPrivLevel)
#define IMSMQMessage3_put_PrivLevel(This,lPrivLevel) (This)->lpVtbl->put_PrivLevel(This,lPrivLevel)
#define IMSMQMessage3_get_AuthLevel(This,plAuthLevel) (This)->lpVtbl->get_AuthLevel(This,plAuthLevel)
#define IMSMQMessage3_put_AuthLevel(This,lAuthLevel) (This)->lpVtbl->put_AuthLevel(This,lAuthLevel)
#define IMSMQMessage3_get_IsAuthenticated(This,pisAuthenticated) (This)->lpVtbl->get_IsAuthenticated(This,pisAuthenticated)
#define IMSMQMessage3_get_Delivery(This,plDelivery) (This)->lpVtbl->get_Delivery(This,plDelivery)
#define IMSMQMessage3_put_Delivery(This,lDelivery) (This)->lpVtbl->put_Delivery(This,lDelivery)
#define IMSMQMessage3_get_Trace(This,plTrace) (This)->lpVtbl->get_Trace(This,plTrace)
#define IMSMQMessage3_put_Trace(This,lTrace) (This)->lpVtbl->put_Trace(This,lTrace)
#define IMSMQMessage3_get_Priority(This,plPriority) (This)->lpVtbl->get_Priority(This,plPriority)
#define IMSMQMessage3_put_Priority(This,lPriority) (This)->lpVtbl->put_Priority(This,lPriority)
#define IMSMQMessage3_get_Journal(This,plJournal) (This)->lpVtbl->get_Journal(This,plJournal)
#define IMSMQMessage3_put_Journal(This,lJournal) (This)->lpVtbl->put_Journal(This,lJournal)
#define IMSMQMessage3_get_ResponseQueueInfo_v1(This,ppqinfoResponse) (This)->lpVtbl->get_ResponseQueueInfo_v1(This,ppqinfoResponse)
#define IMSMQMessage3_putref_ResponseQueueInfo_v1(This,pqinfoResponse) (This)->lpVtbl->putref_ResponseQueueInfo_v1(This,pqinfoResponse)
#define IMSMQMessage3_get_AppSpecific(This,plAppSpecific) (This)->lpVtbl->get_AppSpecific(This,plAppSpecific)
#define IMSMQMessage3_put_AppSpecific(This,lAppSpecific) (This)->lpVtbl->put_AppSpecific(This,lAppSpecific)
#define IMSMQMessage3_get_SourceMachineGuid(This,pbstrGuidSrcMachine) (This)->lpVtbl->get_SourceMachineGuid(This,pbstrGuidSrcMachine)
#define IMSMQMessage3_get_BodyLength(This,pcbBody) (This)->lpVtbl->get_BodyLength(This,pcbBody)
#define IMSMQMessage3_get_Body(This,pvarBody) (This)->lpVtbl->get_Body(This,pvarBody)
#define IMSMQMessage3_put_Body(This,varBody) (This)->lpVtbl->put_Body(This,varBody)
#define IMSMQMessage3_get_AdminQueueInfo_v1(This,ppqinfoAdmin) (This)->lpVtbl->get_AdminQueueInfo_v1(This,ppqinfoAdmin)
#define IMSMQMessage3_putref_AdminQueueInfo_v1(This,pqinfoAdmin) (This)->lpVtbl->putref_AdminQueueInfo_v1(This,pqinfoAdmin)
#define IMSMQMessage3_get_Id(This,pvarMsgId) (This)->lpVtbl->get_Id(This,pvarMsgId)
#define IMSMQMessage3_get_CorrelationId(This,pvarMsgId) (This)->lpVtbl->get_CorrelationId(This,pvarMsgId)
#define IMSMQMessage3_put_CorrelationId(This,varMsgId) (This)->lpVtbl->put_CorrelationId(This,varMsgId)
#define IMSMQMessage3_get_Ack(This,plAck) (This)->lpVtbl->get_Ack(This,plAck)
#define IMSMQMessage3_put_Ack(This,lAck) (This)->lpVtbl->put_Ack(This,lAck)
#define IMSMQMessage3_get_Label(This,pbstrLabel) (This)->lpVtbl->get_Label(This,pbstrLabel)
#define IMSMQMessage3_put_Label(This,bstrLabel) (This)->lpVtbl->put_Label(This,bstrLabel)
#define IMSMQMessage3_get_MaxTimeToReachQueue(This,plMaxTimeToReachQueue) (This)->lpVtbl->get_MaxTimeToReachQueue(This,plMaxTimeToReachQueue)
#define IMSMQMessage3_put_MaxTimeToReachQueue(This,lMaxTimeToReachQueue) (This)->lpVtbl->put_MaxTimeToReachQueue(This,lMaxTimeToReachQueue)
#define IMSMQMessage3_get_MaxTimeToReceive(This,plMaxTimeToReceive) (This)->lpVtbl->get_MaxTimeToReceive(This,plMaxTimeToReceive)
#define IMSMQMessage3_put_MaxTimeToReceive(This,lMaxTimeToReceive) (This)->lpVtbl->put_MaxTimeToReceive(This,lMaxTimeToReceive)
#define IMSMQMessage3_get_HashAlgorithm(This,plHashAlg) (This)->lpVtbl->get_HashAlgorithm(This,plHashAlg)
#define IMSMQMessage3_put_HashAlgorithm(This,lHashAlg) (This)->lpVtbl->put_HashAlgorithm(This,lHashAlg)
#define IMSMQMessage3_get_EncryptAlgorithm(This,plEncryptAlg) (This)->lpVtbl->get_EncryptAlgorithm(This,plEncryptAlg)
#define IMSMQMessage3_put_EncryptAlgorithm(This,lEncryptAlg) (This)->lpVtbl->put_EncryptAlgorithm(This,lEncryptAlg)
#define IMSMQMessage3_get_SentTime(This,pvarSentTime) (This)->lpVtbl->get_SentTime(This,pvarSentTime)
#define IMSMQMessage3_get_ArrivedTime(This,plArrivedTime) (This)->lpVtbl->get_ArrivedTime(This,plArrivedTime)
#define IMSMQMessage3_get_DestinationQueueInfo(This,ppqinfoDest) (This)->lpVtbl->get_DestinationQueueInfo(This,ppqinfoDest)
#define IMSMQMessage3_get_SenderCertificate(This,pvarSenderCert) (This)->lpVtbl->get_SenderCertificate(This,pvarSenderCert)
#define IMSMQMessage3_put_SenderCertificate(This,varSenderCert) (This)->lpVtbl->put_SenderCertificate(This,varSenderCert)
#define IMSMQMessage3_get_SenderId(This,pvarSenderId) (This)->lpVtbl->get_SenderId(This,pvarSenderId)
#define IMSMQMessage3_get_SenderIdType(This,plSenderIdType) (This)->lpVtbl->get_SenderIdType(This,plSenderIdType)
#define IMSMQMessage3_put_SenderIdType(This,lSenderIdType) (This)->lpVtbl->put_SenderIdType(This,lSenderIdType)
#define IMSMQMessage3_Send(This,DestinationQueue,Transaction) (This)->lpVtbl->Send(This,DestinationQueue,Transaction)
#define IMSMQMessage3_AttachCurrentSecurityContext(This) (This)->lpVtbl->AttachCurrentSecurityContext(This)
#define IMSMQMessage3_get_SenderVersion(This,plSenderVersion) (This)->lpVtbl->get_SenderVersion(This,plSenderVersion)
#define IMSMQMessage3_get_Extension(This,pvarExtension) (This)->lpVtbl->get_Extension(This,pvarExtension)
#define IMSMQMessage3_put_Extension(This,varExtension) (This)->lpVtbl->put_Extension(This,varExtension)
#define IMSMQMessage3_get_ConnectorTypeGuid(This,pbstrGuidConnectorType) (This)->lpVtbl->get_ConnectorTypeGuid(This,pbstrGuidConnectorType)
#define IMSMQMessage3_put_ConnectorTypeGuid(This,bstrGuidConnectorType) (This)->lpVtbl->put_ConnectorTypeGuid(This,bstrGuidConnectorType)
#define IMSMQMessage3_get_TransactionStatusQueueInfo(This,ppqinfoXactStatus) (This)->lpVtbl->get_TransactionStatusQueueInfo(This,ppqinfoXactStatus)
#define IMSMQMessage3_get_DestinationSymmetricKey(This,pvarDestSymmKey) (This)->lpVtbl->get_DestinationSymmetricKey(This,pvarDestSymmKey)
#define IMSMQMessage3_put_DestinationSymmetricKey(This,varDestSymmKey) (This)->lpVtbl->put_DestinationSymmetricKey(This,varDestSymmKey)
#define IMSMQMessage3_get_Signature(This,pvarSignature) (This)->lpVtbl->get_Signature(This,pvarSignature)
#define IMSMQMessage3_put_Signature(This,varSignature) (This)->lpVtbl->put_Signature(This,varSignature)
#define IMSMQMessage3_get_AuthenticationProviderType(This,plAuthProvType) (This)->lpVtbl->get_AuthenticationProviderType(This,plAuthProvType)
#define IMSMQMessage3_put_AuthenticationProviderType(This,lAuthProvType) (This)->lpVtbl->put_AuthenticationProviderType(This,lAuthProvType)
#define IMSMQMessage3_get_AuthenticationProviderName(This,pbstrAuthProvName) (This)->lpVtbl->get_AuthenticationProviderName(This,pbstrAuthProvName)
#define IMSMQMessage3_put_AuthenticationProviderName(This,bstrAuthProvName) (This)->lpVtbl->put_AuthenticationProviderName(This,bstrAuthProvName)
#define IMSMQMessage3_put_SenderId(This,varSenderId) (This)->lpVtbl->put_SenderId(This,varSenderId)
#define IMSMQMessage3_get_MsgClass(This,plMsgClass) (This)->lpVtbl->get_MsgClass(This,plMsgClass)
#define IMSMQMessage3_put_MsgClass(This,lMsgClass) (This)->lpVtbl->put_MsgClass(This,lMsgClass)
#define IMSMQMessage3_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#define IMSMQMessage3_get_TransactionId(This,pvarXactId) (This)->lpVtbl->get_TransactionId(This,pvarXactId)
#define IMSMQMessage3_get_IsFirstInTransaction(This,pisFirstInXact) (This)->lpVtbl->get_IsFirstInTransaction(This,pisFirstInXact)
#define IMSMQMessage3_get_IsLastInTransaction(This,pisLastInXact) (This)->lpVtbl->get_IsLastInTransaction(This,pisLastInXact)
#define IMSMQMessage3_get_ResponseQueueInfo_v2(This,ppqinfoResponse) (This)->lpVtbl->get_ResponseQueueInfo_v2(This,ppqinfoResponse)
#define IMSMQMessage3_putref_ResponseQueueInfo_v2(This,pqinfoResponse) (This)->lpVtbl->putref_ResponseQueueInfo_v2(This,pqinfoResponse)
#define IMSMQMessage3_get_AdminQueueInfo_v2(This,ppqinfoAdmin) (This)->lpVtbl->get_AdminQueueInfo_v2(This,ppqinfoAdmin)
#define IMSMQMessage3_putref_AdminQueueInfo_v2(This,pqinfoAdmin) (This)->lpVtbl->putref_AdminQueueInfo_v2(This,pqinfoAdmin)
#define IMSMQMessage3_get_ReceivedAuthenticationLevel(This,psReceivedAuthenticationLevel) (This)->lpVtbl->get_ReceivedAuthenticationLevel(This,psReceivedAuthenticationLevel)
#define IMSMQMessage3_get_ResponseQueueInfo(This,ppqinfoResponse) (This)->lpVtbl->get_ResponseQueueInfo(This,ppqinfoResponse)
#define IMSMQMessage3_putref_ResponseQueueInfo(This,pqinfoResponse) (This)->lpVtbl->putref_ResponseQueueInfo(This,pqinfoResponse)
#define IMSMQMessage3_get_AdminQueueInfo(This,ppqinfoAdmin) (This)->lpVtbl->get_AdminQueueInfo(This,ppqinfoAdmin)
#define IMSMQMessage3_putref_AdminQueueInfo(This,pqinfoAdmin) (This)->lpVtbl->putref_AdminQueueInfo(This,pqinfoAdmin)
#define IMSMQMessage3_get_ResponseDestination(This,ppdestResponse) (This)->lpVtbl->get_ResponseDestination(This,ppdestResponse)
#define IMSMQMessage3_putref_ResponseDestination(This,pdestResponse) (This)->lpVtbl->putref_ResponseDestination(This,pdestResponse)
#define IMSMQMessage3_get_Destination(This,ppdestDestination) (This)->lpVtbl->get_Destination(This,ppdestDestination)
#define IMSMQMessage3_get_LookupId(This,pvarLookupId) (This)->lpVtbl->get_LookupId(This,pvarLookupId)
#define IMSMQMessage3_get_IsAuthenticated2(This,pisAuthenticated) (This)->lpVtbl->get_IsAuthenticated2(This,pisAuthenticated)
#define IMSMQMessage3_get_IsFirstInTransaction2(This,pisFirstInXact) (This)->lpVtbl->get_IsFirstInTransaction2(This,pisFirstInXact)
#define IMSMQMessage3_get_IsLastInTransaction2(This,pisLastInXact) (This)->lpVtbl->get_IsLastInTransaction2(This,pisLastInXact)
#define IMSMQMessage3_AttachCurrentSecurityContext2(This) (This)->lpVtbl->AttachCurrentSecurityContext2(This)
#define IMSMQMessage3_get_SoapEnvelope(This,pbstrSoapEnvelope) (This)->lpVtbl->get_SoapEnvelope(This,pbstrSoapEnvelope)
#define IMSMQMessage3_get_CompoundMessage(This,pvarCompoundMessage) (This)->lpVtbl->get_CompoundMessage(This,pvarCompoundMessage)
#define IMSMQMessage3_put_SoapHeader(This,bstrSoapHeader) (This)->lpVtbl->put_SoapHeader(This,bstrSoapHeader)
#define IMSMQMessage3_put_SoapBody(This,bstrSoapBody) (This)->lpVtbl->put_SoapBody(This,bstrSoapBody)
#endif
#endif
  HRESULT WINAPI IMSMQMessage3_get_Class_Proxy(IMSMQMessage3 *This,long *plClass);
  void __RPC_STUB IMSMQMessage3_get_Class_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_PrivLevel_Proxy(IMSMQMessage3 *This,long *plPrivLevel);
  void __RPC_STUB IMSMQMessage3_get_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_PrivLevel_Proxy(IMSMQMessage3 *This,long lPrivLevel);
  void __RPC_STUB IMSMQMessage3_put_PrivLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_AuthLevel_Proxy(IMSMQMessage3 *This,long *plAuthLevel);
  void __RPC_STUB IMSMQMessage3_get_AuthLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_AuthLevel_Proxy(IMSMQMessage3 *This,long lAuthLevel);
  void __RPC_STUB IMSMQMessage3_put_AuthLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_IsAuthenticated_Proxy(IMSMQMessage3 *This,Boolean *pisAuthenticated);
  void __RPC_STUB IMSMQMessage3_get_IsAuthenticated_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Delivery_Proxy(IMSMQMessage3 *This,long *plDelivery);
  void __RPC_STUB IMSMQMessage3_get_Delivery_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_Delivery_Proxy(IMSMQMessage3 *This,long lDelivery);
  void __RPC_STUB IMSMQMessage3_put_Delivery_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Trace_Proxy(IMSMQMessage3 *This,long *plTrace);
  void __RPC_STUB IMSMQMessage3_get_Trace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_Trace_Proxy(IMSMQMessage3 *This,long lTrace);
  void __RPC_STUB IMSMQMessage3_put_Trace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Priority_Proxy(IMSMQMessage3 *This,long *plPriority);
  void __RPC_STUB IMSMQMessage3_get_Priority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_Priority_Proxy(IMSMQMessage3 *This,long lPriority);
  void __RPC_STUB IMSMQMessage3_put_Priority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Journal_Proxy(IMSMQMessage3 *This,long *plJournal);
  void __RPC_STUB IMSMQMessage3_get_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_Journal_Proxy(IMSMQMessage3 *This,long lJournal);
  void __RPC_STUB IMSMQMessage3_put_Journal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_ResponseQueueInfo_v1_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo **ppqinfoResponse);
  void __RPC_STUB IMSMQMessage3_get_ResponseQueueInfo_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_putref_ResponseQueueInfo_v1_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo *pqinfoResponse);
  void __RPC_STUB IMSMQMessage3_putref_ResponseQueueInfo_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_AppSpecific_Proxy(IMSMQMessage3 *This,long *plAppSpecific);
  void __RPC_STUB IMSMQMessage3_get_AppSpecific_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_AppSpecific_Proxy(IMSMQMessage3 *This,long lAppSpecific);
  void __RPC_STUB IMSMQMessage3_put_AppSpecific_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_SourceMachineGuid_Proxy(IMSMQMessage3 *This,BSTR *pbstrGuidSrcMachine);
  void __RPC_STUB IMSMQMessage3_get_SourceMachineGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_BodyLength_Proxy(IMSMQMessage3 *This,long *pcbBody);
  void __RPC_STUB IMSMQMessage3_get_BodyLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Body_Proxy(IMSMQMessage3 *This,VARIANT *pvarBody);
  void __RPC_STUB IMSMQMessage3_get_Body_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_Body_Proxy(IMSMQMessage3 *This,VARIANT varBody);
  void __RPC_STUB IMSMQMessage3_put_Body_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_AdminQueueInfo_v1_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo **ppqinfoAdmin);
  void __RPC_STUB IMSMQMessage3_get_AdminQueueInfo_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_putref_AdminQueueInfo_v1_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo *pqinfoAdmin);
  void __RPC_STUB IMSMQMessage3_putref_AdminQueueInfo_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Id_Proxy(IMSMQMessage3 *This,VARIANT *pvarMsgId);
  void __RPC_STUB IMSMQMessage3_get_Id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_CorrelationId_Proxy(IMSMQMessage3 *This,VARIANT *pvarMsgId);
  void __RPC_STUB IMSMQMessage3_get_CorrelationId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_CorrelationId_Proxy(IMSMQMessage3 *This,VARIANT varMsgId);
  void __RPC_STUB IMSMQMessage3_put_CorrelationId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Ack_Proxy(IMSMQMessage3 *This,long *plAck);
  void __RPC_STUB IMSMQMessage3_get_Ack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_Ack_Proxy(IMSMQMessage3 *This,long lAck);
  void __RPC_STUB IMSMQMessage3_put_Ack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Label_Proxy(IMSMQMessage3 *This,BSTR *pbstrLabel);
  void __RPC_STUB IMSMQMessage3_get_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_Label_Proxy(IMSMQMessage3 *This,BSTR bstrLabel);
  void __RPC_STUB IMSMQMessage3_put_Label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_MaxTimeToReachQueue_Proxy(IMSMQMessage3 *This,long *plMaxTimeToReachQueue);
  void __RPC_STUB IMSMQMessage3_get_MaxTimeToReachQueue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_MaxTimeToReachQueue_Proxy(IMSMQMessage3 *This,long lMaxTimeToReachQueue);
  void __RPC_STUB IMSMQMessage3_put_MaxTimeToReachQueue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_MaxTimeToReceive_Proxy(IMSMQMessage3 *This,long *plMaxTimeToReceive);
  void __RPC_STUB IMSMQMessage3_get_MaxTimeToReceive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_MaxTimeToReceive_Proxy(IMSMQMessage3 *This,long lMaxTimeToReceive);
  void __RPC_STUB IMSMQMessage3_put_MaxTimeToReceive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_HashAlgorithm_Proxy(IMSMQMessage3 *This,long *plHashAlg);
  void __RPC_STUB IMSMQMessage3_get_HashAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_HashAlgorithm_Proxy(IMSMQMessage3 *This,long lHashAlg);
  void __RPC_STUB IMSMQMessage3_put_HashAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_EncryptAlgorithm_Proxy(IMSMQMessage3 *This,long *plEncryptAlg);
  void __RPC_STUB IMSMQMessage3_get_EncryptAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_EncryptAlgorithm_Proxy(IMSMQMessage3 *This,long lEncryptAlg);
  void __RPC_STUB IMSMQMessage3_put_EncryptAlgorithm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_SentTime_Proxy(IMSMQMessage3 *This,VARIANT *pvarSentTime);
  void __RPC_STUB IMSMQMessage3_get_SentTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_ArrivedTime_Proxy(IMSMQMessage3 *This,VARIANT *plArrivedTime);
  void __RPC_STUB IMSMQMessage3_get_ArrivedTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_DestinationQueueInfo_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo3 **ppqinfoDest);
  void __RPC_STUB IMSMQMessage3_get_DestinationQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_SenderCertificate_Proxy(IMSMQMessage3 *This,VARIANT *pvarSenderCert);
  void __RPC_STUB IMSMQMessage3_get_SenderCertificate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_SenderCertificate_Proxy(IMSMQMessage3 *This,VARIANT varSenderCert);
  void __RPC_STUB IMSMQMessage3_put_SenderCertificate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_SenderId_Proxy(IMSMQMessage3 *This,VARIANT *pvarSenderId);
  void __RPC_STUB IMSMQMessage3_get_SenderId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_SenderIdType_Proxy(IMSMQMessage3 *This,long *plSenderIdType);
  void __RPC_STUB IMSMQMessage3_get_SenderIdType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_SenderIdType_Proxy(IMSMQMessage3 *This,long lSenderIdType);
  void __RPC_STUB IMSMQMessage3_put_SenderIdType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_Send_Proxy(IMSMQMessage3 *This,IDispatch *DestinationQueue,VARIANT *Transaction);
  void __RPC_STUB IMSMQMessage3_Send_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_AttachCurrentSecurityContext_Proxy(IMSMQMessage3 *This);
  void __RPC_STUB IMSMQMessage3_AttachCurrentSecurityContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_SenderVersion_Proxy(IMSMQMessage3 *This,long *plSenderVersion);
  void __RPC_STUB IMSMQMessage3_get_SenderVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Extension_Proxy(IMSMQMessage3 *This,VARIANT *pvarExtension);
  void __RPC_STUB IMSMQMessage3_get_Extension_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_Extension_Proxy(IMSMQMessage3 *This,VARIANT varExtension);
  void __RPC_STUB IMSMQMessage3_put_Extension_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_ConnectorTypeGuid_Proxy(IMSMQMessage3 *This,BSTR *pbstrGuidConnectorType);
  void __RPC_STUB IMSMQMessage3_get_ConnectorTypeGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_ConnectorTypeGuid_Proxy(IMSMQMessage3 *This,BSTR bstrGuidConnectorType);
  void __RPC_STUB IMSMQMessage3_put_ConnectorTypeGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_TransactionStatusQueueInfo_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo3 **ppqinfoXactStatus);
  void __RPC_STUB IMSMQMessage3_get_TransactionStatusQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_DestinationSymmetricKey_Proxy(IMSMQMessage3 *This,VARIANT *pvarDestSymmKey);
  void __RPC_STUB IMSMQMessage3_get_DestinationSymmetricKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_DestinationSymmetricKey_Proxy(IMSMQMessage3 *This,VARIANT varDestSymmKey);
  void __RPC_STUB IMSMQMessage3_put_DestinationSymmetricKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Signature_Proxy(IMSMQMessage3 *This,VARIANT *pvarSignature);
  void __RPC_STUB IMSMQMessage3_get_Signature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_Signature_Proxy(IMSMQMessage3 *This,VARIANT varSignature);
  void __RPC_STUB IMSMQMessage3_put_Signature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_AuthenticationProviderType_Proxy(IMSMQMessage3 *This,long *plAuthProvType);
  void __RPC_STUB IMSMQMessage3_get_AuthenticationProviderType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_AuthenticationProviderType_Proxy(IMSMQMessage3 *This,long lAuthProvType);
  void __RPC_STUB IMSMQMessage3_put_AuthenticationProviderType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_AuthenticationProviderName_Proxy(IMSMQMessage3 *This,BSTR *pbstrAuthProvName);
  void __RPC_STUB IMSMQMessage3_get_AuthenticationProviderName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_AuthenticationProviderName_Proxy(IMSMQMessage3 *This,BSTR bstrAuthProvName);
  void __RPC_STUB IMSMQMessage3_put_AuthenticationProviderName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_SenderId_Proxy(IMSMQMessage3 *This,VARIANT varSenderId);
  void __RPC_STUB IMSMQMessage3_put_SenderId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_MsgClass_Proxy(IMSMQMessage3 *This,long *plMsgClass);
  void __RPC_STUB IMSMQMessage3_get_MsgClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_MsgClass_Proxy(IMSMQMessage3 *This,long lMsgClass);
  void __RPC_STUB IMSMQMessage3_put_MsgClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Properties_Proxy(IMSMQMessage3 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQMessage3_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_TransactionId_Proxy(IMSMQMessage3 *This,VARIANT *pvarXactId);
  void __RPC_STUB IMSMQMessage3_get_TransactionId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_IsFirstInTransaction_Proxy(IMSMQMessage3 *This,Boolean *pisFirstInXact);
  void __RPC_STUB IMSMQMessage3_get_IsFirstInTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_IsLastInTransaction_Proxy(IMSMQMessage3 *This,Boolean *pisLastInXact);
  void __RPC_STUB IMSMQMessage3_get_IsLastInTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_ResponseQueueInfo_v2_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo2 **ppqinfoResponse);
  void __RPC_STUB IMSMQMessage3_get_ResponseQueueInfo_v2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_putref_ResponseQueueInfo_v2_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo2 *pqinfoResponse);
  void __RPC_STUB IMSMQMessage3_putref_ResponseQueueInfo_v2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_AdminQueueInfo_v2_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo2 **ppqinfoAdmin);
  void __RPC_STUB IMSMQMessage3_get_AdminQueueInfo_v2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_putref_AdminQueueInfo_v2_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo2 *pqinfoAdmin);
  void __RPC_STUB IMSMQMessage3_putref_AdminQueueInfo_v2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_ReceivedAuthenticationLevel_Proxy(IMSMQMessage3 *This,short *psReceivedAuthenticationLevel);
  void __RPC_STUB IMSMQMessage3_get_ReceivedAuthenticationLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_ResponseQueueInfo_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo3 **ppqinfoResponse);
  void __RPC_STUB IMSMQMessage3_get_ResponseQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_putref_ResponseQueueInfo_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo3 *pqinfoResponse);
  void __RPC_STUB IMSMQMessage3_putref_ResponseQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_AdminQueueInfo_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo3 **ppqinfoAdmin);
  void __RPC_STUB IMSMQMessage3_get_AdminQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_putref_AdminQueueInfo_Proxy(IMSMQMessage3 *This,IMSMQQueueInfo3 *pqinfoAdmin);
  void __RPC_STUB IMSMQMessage3_putref_AdminQueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_ResponseDestination_Proxy(IMSMQMessage3 *This,IDispatch **ppdestResponse);
  void __RPC_STUB IMSMQMessage3_get_ResponseDestination_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_putref_ResponseDestination_Proxy(IMSMQMessage3 *This,IDispatch *pdestResponse);
  void __RPC_STUB IMSMQMessage3_putref_ResponseDestination_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_Destination_Proxy(IMSMQMessage3 *This,IDispatch **ppdestDestination);
  void __RPC_STUB IMSMQMessage3_get_Destination_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_LookupId_Proxy(IMSMQMessage3 *This,VARIANT *pvarLookupId);
  void __RPC_STUB IMSMQMessage3_get_LookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_IsAuthenticated2_Proxy(IMSMQMessage3 *This,VARIANT_BOOL *pisAuthenticated);
  void __RPC_STUB IMSMQMessage3_get_IsAuthenticated2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_IsFirstInTransaction2_Proxy(IMSMQMessage3 *This,VARIANT_BOOL *pisFirstInXact);
  void __RPC_STUB IMSMQMessage3_get_IsFirstInTransaction2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_IsLastInTransaction2_Proxy(IMSMQMessage3 *This,VARIANT_BOOL *pisLastInXact);
  void __RPC_STUB IMSMQMessage3_get_IsLastInTransaction2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_AttachCurrentSecurityContext2_Proxy(IMSMQMessage3 *This);
  void __RPC_STUB IMSMQMessage3_AttachCurrentSecurityContext2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_SoapEnvelope_Proxy(IMSMQMessage3 *This,BSTR *pbstrSoapEnvelope);
  void __RPC_STUB IMSMQMessage3_get_SoapEnvelope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_get_CompoundMessage_Proxy(IMSMQMessage3 *This,VARIANT *pvarCompoundMessage);
  void __RPC_STUB IMSMQMessage3_get_CompoundMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_SoapHeader_Proxy(IMSMQMessage3 *This,BSTR bstrSoapHeader);
  void __RPC_STUB IMSMQMessage3_put_SoapHeader_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQMessage3_put_SoapBody_Proxy(IMSMQMessage3 *This,BSTR bstrSoapBody);
  void __RPC_STUB IMSMQMessage3_put_SoapBody_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQMessage;
#ifdef __cplusplus
  class MSMQMessage;
#endif

#ifndef __IMSMQQueue3_INTERFACE_DEFINED__
#define __IMSMQQueue3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQueue3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQueue3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Access(long *plAccess) = 0;
    virtual HRESULT WINAPI get_ShareMode(long *plShareMode) = 0;
    virtual HRESULT WINAPI get_QueueInfo(IMSMQQueueInfo3 **ppqinfo) = 0;
    virtual HRESULT WINAPI get_Handle(long *plHandle) = 0;
    virtual HRESULT WINAPI get_IsOpen(Boolean *pisOpen) = 0;
    virtual HRESULT WINAPI Close(void) = 0;
    virtual HRESULT WINAPI Receive_v1(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI Peek_v1(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI EnableNotification(IMSMQEvent3 *Event,VARIANT *Cursor,VARIANT *ReceiveTimeout) = 0;
    virtual HRESULT WINAPI Reset(void) = 0;
    virtual HRESULT WINAPI ReceiveCurrent_v1(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI PeekNext_v1(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI PeekCurrent_v1(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg) = 0;
    virtual HRESULT WINAPI Receive(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI Peek(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI ReceiveCurrent(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI PeekNext(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI PeekCurrent(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
    virtual HRESULT WINAPI get_Handle2(VARIANT *pvarHandle) = 0;
    virtual HRESULT WINAPI ReceiveByLookupId(VARIANT LookupId,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI ReceiveNextByLookupId(VARIANT LookupId,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI ReceivePreviousByLookupId(VARIANT LookupId,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI ReceiveFirstByLookupId(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI ReceiveLastByLookupId(VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI PeekByLookupId(VARIANT LookupId,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI PeekNextByLookupId(VARIANT LookupId,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI PeekPreviousByLookupId(VARIANT LookupId,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI PeekFirstByLookupId(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI PeekLastByLookupId(VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg) = 0;
    virtual HRESULT WINAPI Purge(void) = 0;
    virtual HRESULT WINAPI get_IsOpen2(VARIANT_BOOL *pisOpen) = 0;
  };
#else
  typedef struct IMSMQQueue3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQueue3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQueue3 *This);
      ULONG (WINAPI *Release)(IMSMQQueue3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQueue3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQueue3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQueue3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQueue3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Access)(IMSMQQueue3 *This,long *plAccess);
      HRESULT (WINAPI *get_ShareMode)(IMSMQQueue3 *This,long *plShareMode);
      HRESULT (WINAPI *get_QueueInfo)(IMSMQQueue3 *This,IMSMQQueueInfo3 **ppqinfo);
      HRESULT (WINAPI *get_Handle)(IMSMQQueue3 *This,long *plHandle);
      HRESULT (WINAPI *get_IsOpen)(IMSMQQueue3 *This,Boolean *pisOpen);
      HRESULT (WINAPI *Close)(IMSMQQueue3 *This);
      HRESULT (WINAPI *Receive_v1)(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *Peek_v1)(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *EnableNotification)(IMSMQQueue3 *This,IMSMQEvent3 *Event,VARIANT *Cursor,VARIANT *ReceiveTimeout);
      HRESULT (WINAPI *Reset)(IMSMQQueue3 *This);
      HRESULT (WINAPI *ReceiveCurrent_v1)(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *PeekNext_v1)(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *PeekCurrent_v1)(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
      HRESULT (WINAPI *Receive)(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *Peek)(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *ReceiveCurrent)(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *PeekNext)(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *PeekCurrent)(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *get_Properties)(IMSMQQueue3 *This,IDispatch **ppcolProperties);
      HRESULT (WINAPI *get_Handle2)(IMSMQQueue3 *This,VARIANT *pvarHandle);
      HRESULT (WINAPI *ReceiveByLookupId)(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *ReceiveNextByLookupId)(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *ReceivePreviousByLookupId)(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *ReceiveFirstByLookupId)(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *ReceiveLastByLookupId)(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *PeekByLookupId)(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *PeekNextByLookupId)(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *PeekPreviousByLookupId)(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *PeekFirstByLookupId)(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *PeekLastByLookupId)(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
      HRESULT (WINAPI *Purge)(IMSMQQueue3 *This);
      HRESULT (WINAPI *get_IsOpen2)(IMSMQQueue3 *This,VARIANT_BOOL *pisOpen);
    END_INTERFACE
  } IMSMQQueue3Vtbl;
  interface IMSMQQueue3 {
    CONST_VTBL struct IMSMQQueue3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQueue3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQueue3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQueue3_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQueue3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQueue3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQueue3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQueue3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQueue3_get_Access(This,plAccess) (This)->lpVtbl->get_Access(This,plAccess)
#define IMSMQQueue3_get_ShareMode(This,plShareMode) (This)->lpVtbl->get_ShareMode(This,plShareMode)
#define IMSMQQueue3_get_QueueInfo(This,ppqinfo) (This)->lpVtbl->get_QueueInfo(This,ppqinfo)
#define IMSMQQueue3_get_Handle(This,plHandle) (This)->lpVtbl->get_Handle(This,plHandle)
#define IMSMQQueue3_get_IsOpen(This,pisOpen) (This)->lpVtbl->get_IsOpen(This,pisOpen)
#define IMSMQQueue3_Close(This) (This)->lpVtbl->Close(This)
#define IMSMQQueue3_Receive_v1(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->Receive_v1(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue3_Peek_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->Peek_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue3_EnableNotification(This,Event,Cursor,ReceiveTimeout) (This)->lpVtbl->EnableNotification(This,Event,Cursor,ReceiveTimeout)
#define IMSMQQueue3_Reset(This) (This)->lpVtbl->Reset(This)
#define IMSMQQueue3_ReceiveCurrent_v1(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->ReceiveCurrent_v1(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue3_PeekNext_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->PeekNext_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue3_PeekCurrent_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg) (This)->lpVtbl->PeekCurrent_v1(This,WantDestinationQueue,WantBody,ReceiveTimeout,ppmsg)
#define IMSMQQueue3_Receive(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg) (This)->lpVtbl->Receive(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg)
#define IMSMQQueue3_Peek(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg) (This)->lpVtbl->Peek(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg)
#define IMSMQQueue3_ReceiveCurrent(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg) (This)->lpVtbl->ReceiveCurrent(This,Transaction,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg)
#define IMSMQQueue3_PeekNext(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg) (This)->lpVtbl->PeekNext(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg)
#define IMSMQQueue3_PeekCurrent(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg) (This)->lpVtbl->PeekCurrent(This,WantDestinationQueue,WantBody,ReceiveTimeout,WantConnectorType,ppmsg)
#define IMSMQQueue3_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#define IMSMQQueue3_get_Handle2(This,pvarHandle) (This)->lpVtbl->get_Handle2(This,pvarHandle)
#define IMSMQQueue3_ReceiveByLookupId(This,LookupId,Transaction,WantDestinationQueue,WantBody,WantConnectorType,ppmsg) (This)->lpVtbl->ReceiveByLookupId(This,LookupId,Transaction,WantDestinationQueue,WantBody,WantConnectorType,ppmsg)
#define IMSMQQueue3_ReceiveNextByLookupId(This,LookupId,Transaction,WantDestinationQueue,WantBody,WantConnectorType,ppmsg) (This)->lpVtbl->ReceiveNextByLookupId(This,LookupId,Transaction,WantDestinationQueue,WantBody,WantConnectorType,ppmsg)
#define IMSMQQueue3_ReceivePreviousByLookupId(This,LookupId,Transaction,WantDestinationQueue,WantBody,WantConnectorType,ppmsg) (This)->lpVtbl->ReceivePreviousByLookupId(This,LookupId,Transaction,WantDestinationQueue,WantBody,WantConnectorType,ppmsg)
#define IMSMQQueue3_ReceiveFirstByLookupId(This,Transaction,WantDestinationQueue,WantBody,WantConnectorType,ppmsg) (This)->lpVtbl->ReceiveFirstByLookupId(This,Transaction,WantDestinationQueue,WantBody,WantConnectorType,ppmsg)
#define IMSMQQueue3_ReceiveLastByLookupId(This,Transaction,WantDestinationQueue,WantBody,WantConnectorType,ppmsg) (This)->lpVtbl->ReceiveLastByLookupId(This,Transaction,WantDestinationQueue,WantBody,WantConnectorType,ppmsg)
#define IMSMQQueue3_PeekByLookupId(This,LookupId,WantDestinationQueue,WantBody,WantConnectorType,ppmsg) (This)->lpVtbl->PeekByLookupId(This,LookupId,WantDestinationQueue,WantBody,WantConnectorType,ppmsg)
#define IMSMQQueue3_PeekNextByLookupId(This,LookupId,WantDestinationQueue,WantBody,WantConnectorType,ppmsg) (This)->lpVtbl->PeekNextByLookupId(This,LookupId,WantDestinationQueue,WantBody,WantConnectorType,ppmsg)
#define IMSMQQueue3_PeekPreviousByLookupId(This,LookupId,WantDestinationQueue,WantBody,WantConnectorType,ppmsg) (This)->lpVtbl->PeekPreviousByLookupId(This,LookupId,WantDestinationQueue,WantBody,WantConnectorType,ppmsg)
#define IMSMQQueue3_PeekFirstByLookupId(This,WantDestinationQueue,WantBody,WantConnectorType,ppmsg) (This)->lpVtbl->PeekFirstByLookupId(This,WantDestinationQueue,WantBody,WantConnectorType,ppmsg)
#define IMSMQQueue3_PeekLastByLookupId(This,WantDestinationQueue,WantBody,WantConnectorType,ppmsg) (This)->lpVtbl->PeekLastByLookupId(This,WantDestinationQueue,WantBody,WantConnectorType,ppmsg)
#define IMSMQQueue3_Purge(This) (This)->lpVtbl->Purge(This)
#define IMSMQQueue3_get_IsOpen2(This,pisOpen) (This)->lpVtbl->get_IsOpen2(This,pisOpen)
#endif
#endif
  HRESULT WINAPI IMSMQQueue3_get_Access_Proxy(IMSMQQueue3 *This,long *plAccess);
  void __RPC_STUB IMSMQQueue3_get_Access_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_get_ShareMode_Proxy(IMSMQQueue3 *This,long *plShareMode);
  void __RPC_STUB IMSMQQueue3_get_ShareMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_get_QueueInfo_Proxy(IMSMQQueue3 *This,IMSMQQueueInfo3 **ppqinfo);
  void __RPC_STUB IMSMQQueue3_get_QueueInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_get_Handle_Proxy(IMSMQQueue3 *This,long *plHandle);
  void __RPC_STUB IMSMQQueue3_get_Handle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_get_IsOpen_Proxy(IMSMQQueue3 *This,Boolean *pisOpen);
  void __RPC_STUB IMSMQQueue3_get_IsOpen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_Close_Proxy(IMSMQQueue3 *This);
  void __RPC_STUB IMSMQQueue3_Close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_Receive_v1_Proxy(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue3_Receive_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_Peek_v1_Proxy(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue3_Peek_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_EnableNotification_Proxy(IMSMQQueue3 *This,IMSMQEvent3 *Event,VARIANT *Cursor,VARIANT *ReceiveTimeout);
  void __RPC_STUB IMSMQQueue3_EnableNotification_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_Reset_Proxy(IMSMQQueue3 *This);
  void __RPC_STUB IMSMQQueue3_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_ReceiveCurrent_v1_Proxy(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue3_ReceiveCurrent_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_PeekNext_v1_Proxy(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue3_PeekNext_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_PeekCurrent_v1_Proxy(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,IMSMQMessage **ppmsg);
  void __RPC_STUB IMSMQQueue3_PeekCurrent_v1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_Receive_Proxy(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_Receive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_Peek_Proxy(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_Peek_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_ReceiveCurrent_Proxy(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_ReceiveCurrent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_PeekNext_Proxy(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_PeekNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_PeekCurrent_Proxy(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *ReceiveTimeout,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_PeekCurrent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_get_Properties_Proxy(IMSMQQueue3 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQQueue3_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_get_Handle2_Proxy(IMSMQQueue3 *This,VARIANT *pvarHandle);
  void __RPC_STUB IMSMQQueue3_get_Handle2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_ReceiveByLookupId_Proxy(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_ReceiveByLookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_ReceiveNextByLookupId_Proxy(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_ReceiveNextByLookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_ReceivePreviousByLookupId_Proxy(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_ReceivePreviousByLookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_ReceiveFirstByLookupId_Proxy(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_ReceiveFirstByLookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_ReceiveLastByLookupId_Proxy(IMSMQQueue3 *This,VARIANT *Transaction,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_ReceiveLastByLookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_PeekByLookupId_Proxy(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_PeekByLookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_PeekNextByLookupId_Proxy(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_PeekNextByLookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_PeekPreviousByLookupId_Proxy(IMSMQQueue3 *This,VARIANT LookupId,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_PeekPreviousByLookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_PeekFirstByLookupId_Proxy(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_PeekFirstByLookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_PeekLastByLookupId_Proxy(IMSMQQueue3 *This,VARIANT *WantDestinationQueue,VARIANT *WantBody,VARIANT *WantConnectorType,IMSMQMessage3 **ppmsg);
  void __RPC_STUB IMSMQQueue3_PeekLastByLookupId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_Purge_Proxy(IMSMQQueue3 *This);
  void __RPC_STUB IMSMQQueue3_Purge_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueue3_get_IsOpen2_Proxy(IMSMQQueue3 *This,VARIANT_BOOL *pisOpen);
  void __RPC_STUB IMSMQQueue3_get_IsOpen2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQQueue;
#ifdef __cplusplus
  class MSMQQueue;
#endif

#ifndef __IMSMQPrivateEvent_INTERFACE_DEFINED__
#define __IMSMQPrivateEvent_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQPrivateEvent;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQPrivateEvent : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Hwnd(long *phwnd) = 0;
    virtual HRESULT WINAPI FireArrivedEvent(IMSMQQueue *pq,long msgcursor) = 0;
    virtual HRESULT WINAPI FireArrivedErrorEvent(IMSMQQueue *pq,HRESULT hrStatus,long msgcursor) = 0;
  };
#else
  typedef struct IMSMQPrivateEventVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQPrivateEvent *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQPrivateEvent *This);
      ULONG (WINAPI *Release)(IMSMQPrivateEvent *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQPrivateEvent *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQPrivateEvent *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQPrivateEvent *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQPrivateEvent *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Hwnd)(IMSMQPrivateEvent *This,long *phwnd);
      HRESULT (WINAPI *FireArrivedEvent)(IMSMQPrivateEvent *This,IMSMQQueue *pq,long msgcursor);
      HRESULT (WINAPI *FireArrivedErrorEvent)(IMSMQPrivateEvent *This,IMSMQQueue *pq,HRESULT hrStatus,long msgcursor);
    END_INTERFACE
  } IMSMQPrivateEventVtbl;
  interface IMSMQPrivateEvent {
    CONST_VTBL struct IMSMQPrivateEventVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQPrivateEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQPrivateEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQPrivateEvent_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQPrivateEvent_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQPrivateEvent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQPrivateEvent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQPrivateEvent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQPrivateEvent_get_Hwnd(This,phwnd) (This)->lpVtbl->get_Hwnd(This,phwnd)
#define IMSMQPrivateEvent_FireArrivedEvent(This,pq,msgcursor) (This)->lpVtbl->FireArrivedEvent(This,pq,msgcursor)
#define IMSMQPrivateEvent_FireArrivedErrorEvent(This,pq,hrStatus,msgcursor) (This)->lpVtbl->FireArrivedErrorEvent(This,pq,hrStatus,msgcursor)
#endif
#endif
  HRESULT WINAPI IMSMQPrivateEvent_get_Hwnd_Proxy(IMSMQPrivateEvent *This,long *phwnd);
  void __RPC_STUB IMSMQPrivateEvent_get_Hwnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQPrivateEvent_FireArrivedEvent_Proxy(IMSMQPrivateEvent *This,IMSMQQueue *pq,long msgcursor);
  void __RPC_STUB IMSMQPrivateEvent_FireArrivedEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQPrivateEvent_FireArrivedErrorEvent_Proxy(IMSMQPrivateEvent *This,IMSMQQueue *pq,HRESULT hrStatus,long msgcursor);
  void __RPC_STUB IMSMQPrivateEvent_FireArrivedErrorEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef ___DMSMQEventEvents_DISPINTERFACE_DEFINED__
#define ___DMSMQEventEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID__DMSMQEventEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct _DMSMQEventEvents : public IDispatch {
  };
#else
  typedef struct _DMSMQEventEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(_DMSMQEventEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(_DMSMQEventEvents *This);
      ULONG (WINAPI *Release)(_DMSMQEventEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(_DMSMQEventEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(_DMSMQEventEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(_DMSMQEventEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(_DMSMQEventEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } _DMSMQEventEventsVtbl;
  interface _DMSMQEventEvents {
    CONST_VTBL struct _DMSMQEventEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define _DMSMQEventEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _DMSMQEventEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _DMSMQEventEvents_Release(This) (This)->lpVtbl->Release(This)
#define _DMSMQEventEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _DMSMQEventEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _DMSMQEventEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _DMSMQEventEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_MSMQEvent;
#ifdef __cplusplus
  class MSMQEvent;
#endif
  EXTERN_C const CLSID CLSID_MSMQQueueInfo;
#ifdef __cplusplus
  class MSMQQueueInfo;
#endif
  EXTERN_C const CLSID CLSID_MSMQQueueInfos;
#ifdef __cplusplus
  class MSMQQueueInfos;
#endif

#ifndef __IMSMQTransaction2_INTERFACE_DEFINED__
#define __IMSMQTransaction2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQTransaction2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQTransaction2 : public IMSMQTransaction {
  public:
    virtual HRESULT WINAPI InitNew(VARIANT varTransaction) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQTransaction2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQTransaction2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQTransaction2 *This);
      ULONG (WINAPI *Release)(IMSMQTransaction2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQTransaction2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQTransaction2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQTransaction2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQTransaction2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Transaction)(IMSMQTransaction2 *This,long *plTransaction);
      HRESULT (WINAPI *Commit)(IMSMQTransaction2 *This,VARIANT *fRetaining,VARIANT *grfTC,VARIANT *grfRM);
      HRESULT (WINAPI *Abort)(IMSMQTransaction2 *This,VARIANT *fRetaining,VARIANT *fAsync);
      HRESULT (WINAPI *InitNew)(IMSMQTransaction2 *This,VARIANT varTransaction);
      HRESULT (WINAPI *get_Properties)(IMSMQTransaction2 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQTransaction2Vtbl;
  interface IMSMQTransaction2 {
    CONST_VTBL struct IMSMQTransaction2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQTransaction2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQTransaction2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQTransaction2_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQTransaction2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQTransaction2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQTransaction2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQTransaction2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQTransaction2_get_Transaction(This,plTransaction) (This)->lpVtbl->get_Transaction(This,plTransaction)
#define IMSMQTransaction2_Commit(This,fRetaining,grfTC,grfRM) (This)->lpVtbl->Commit(This,fRetaining,grfTC,grfRM)
#define IMSMQTransaction2_Abort(This,fRetaining,fAsync) (This)->lpVtbl->Abort(This,fRetaining,fAsync)
#define IMSMQTransaction2_InitNew(This,varTransaction) (This)->lpVtbl->InitNew(This,varTransaction)
#define IMSMQTransaction2_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQTransaction2_InitNew_Proxy(IMSMQTransaction2 *This,VARIANT varTransaction);
  void __RPC_STUB IMSMQTransaction2_InitNew_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQTransaction2_get_Properties_Proxy(IMSMQTransaction2 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQTransaction2_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQTransaction3_INTERFACE_DEFINED__
#define __IMSMQTransaction3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQTransaction3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQTransaction3 : public IMSMQTransaction2 {
  public:
    virtual HRESULT WINAPI get_ITransaction(VARIANT *pvarITransaction) = 0;
  };
#else
  typedef struct IMSMQTransaction3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQTransaction3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQTransaction3 *This);
      ULONG (WINAPI *Release)(IMSMQTransaction3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQTransaction3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQTransaction3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQTransaction3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQTransaction3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Transaction)(IMSMQTransaction3 *This,long *plTransaction);
      HRESULT (WINAPI *Commit)(IMSMQTransaction3 *This,VARIANT *fRetaining,VARIANT *grfTC,VARIANT *grfRM);
      HRESULT (WINAPI *Abort)(IMSMQTransaction3 *This,VARIANT *fRetaining,VARIANT *fAsync);
      HRESULT (WINAPI *InitNew)(IMSMQTransaction3 *This,VARIANT varTransaction);
      HRESULT (WINAPI *get_Properties)(IMSMQTransaction3 *This,IDispatch **ppcolProperties);
      HRESULT (WINAPI *get_ITransaction)(IMSMQTransaction3 *This,VARIANT *pvarITransaction);
    END_INTERFACE
  } IMSMQTransaction3Vtbl;
  interface IMSMQTransaction3 {
    CONST_VTBL struct IMSMQTransaction3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQTransaction3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQTransaction3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQTransaction3_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQTransaction3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQTransaction3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQTransaction3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQTransaction3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQTransaction3_get_Transaction(This,plTransaction) (This)->lpVtbl->get_Transaction(This,plTransaction)
#define IMSMQTransaction3_Commit(This,fRetaining,grfTC,grfRM) (This)->lpVtbl->Commit(This,fRetaining,grfTC,grfRM)
#define IMSMQTransaction3_Abort(This,fRetaining,fAsync) (This)->lpVtbl->Abort(This,fRetaining,fAsync)
#define IMSMQTransaction3_InitNew(This,varTransaction) (This)->lpVtbl->InitNew(This,varTransaction)
#define IMSMQTransaction3_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#define IMSMQTransaction3_get_ITransaction(This,pvarITransaction) (This)->lpVtbl->get_ITransaction(This,pvarITransaction)
#endif
#endif
  HRESULT WINAPI IMSMQTransaction3_get_ITransaction_Proxy(IMSMQTransaction3 *This,VARIANT *pvarITransaction);
  void __RPC_STUB IMSMQTransaction3_get_ITransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQTransaction;
#ifdef __cplusplus
  class MSMQTransaction;
#endif

#ifndef __IMSMQCoordinatedTransactionDispenser2_INTERFACE_DEFINED__
#define __IMSMQCoordinatedTransactionDispenser2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQCoordinatedTransactionDispenser2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQCoordinatedTransactionDispenser2 : public IDispatch {
  public:
    virtual HRESULT WINAPI BeginTransaction(IMSMQTransaction2 **ptransaction) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQCoordinatedTransactionDispenser2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQCoordinatedTransactionDispenser2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQCoordinatedTransactionDispenser2 *This);
      ULONG (WINAPI *Release)(IMSMQCoordinatedTransactionDispenser2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQCoordinatedTransactionDispenser2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQCoordinatedTransactionDispenser2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQCoordinatedTransactionDispenser2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQCoordinatedTransactionDispenser2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *BeginTransaction)(IMSMQCoordinatedTransactionDispenser2 *This,IMSMQTransaction2 **ptransaction);
      HRESULT (WINAPI *get_Properties)(IMSMQCoordinatedTransactionDispenser2 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQCoordinatedTransactionDispenser2Vtbl;
  interface IMSMQCoordinatedTransactionDispenser2 {
    CONST_VTBL struct IMSMQCoordinatedTransactionDispenser2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQCoordinatedTransactionDispenser2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQCoordinatedTransactionDispenser2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQCoordinatedTransactionDispenser2_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQCoordinatedTransactionDispenser2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQCoordinatedTransactionDispenser2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQCoordinatedTransactionDispenser2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQCoordinatedTransactionDispenser2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQCoordinatedTransactionDispenser2_BeginTransaction(This,ptransaction) (This)->lpVtbl->BeginTransaction(This,ptransaction)
#define IMSMQCoordinatedTransactionDispenser2_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQCoordinatedTransactionDispenser2_BeginTransaction_Proxy(IMSMQCoordinatedTransactionDispenser2 *This,IMSMQTransaction2 **ptransaction);
  void __RPC_STUB IMSMQCoordinatedTransactionDispenser2_BeginTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQCoordinatedTransactionDispenser2_get_Properties_Proxy(IMSMQCoordinatedTransactionDispenser2 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQCoordinatedTransactionDispenser2_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQCoordinatedTransactionDispenser3_INTERFACE_DEFINED__
#define __IMSMQCoordinatedTransactionDispenser3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQCoordinatedTransactionDispenser3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQCoordinatedTransactionDispenser3 : public IDispatch {
  public:
    virtual HRESULT WINAPI BeginTransaction(IMSMQTransaction3 **ptransaction) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQCoordinatedTransactionDispenser3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQCoordinatedTransactionDispenser3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQCoordinatedTransactionDispenser3 *This);
      ULONG (WINAPI *Release)(IMSMQCoordinatedTransactionDispenser3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQCoordinatedTransactionDispenser3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQCoordinatedTransactionDispenser3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQCoordinatedTransactionDispenser3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQCoordinatedTransactionDispenser3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *BeginTransaction)(IMSMQCoordinatedTransactionDispenser3 *This,IMSMQTransaction3 **ptransaction);
      HRESULT (WINAPI *get_Properties)(IMSMQCoordinatedTransactionDispenser3 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQCoordinatedTransactionDispenser3Vtbl;
  interface IMSMQCoordinatedTransactionDispenser3 {
    CONST_VTBL struct IMSMQCoordinatedTransactionDispenser3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQCoordinatedTransactionDispenser3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQCoordinatedTransactionDispenser3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQCoordinatedTransactionDispenser3_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQCoordinatedTransactionDispenser3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQCoordinatedTransactionDispenser3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQCoordinatedTransactionDispenser3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQCoordinatedTransactionDispenser3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQCoordinatedTransactionDispenser3_BeginTransaction(This,ptransaction) (This)->lpVtbl->BeginTransaction(This,ptransaction)
#define IMSMQCoordinatedTransactionDispenser3_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQCoordinatedTransactionDispenser3_BeginTransaction_Proxy(IMSMQCoordinatedTransactionDispenser3 *This,IMSMQTransaction3 **ptransaction);
  void __RPC_STUB IMSMQCoordinatedTransactionDispenser3_BeginTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQCoordinatedTransactionDispenser3_get_Properties_Proxy(IMSMQCoordinatedTransactionDispenser3 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQCoordinatedTransactionDispenser3_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQCoordinatedTransactionDispenser;
#ifdef __cplusplus
  class MSMQCoordinatedTransactionDispenser;
#endif

#ifndef __IMSMQTransactionDispenser2_INTERFACE_DEFINED__
#define __IMSMQTransactionDispenser2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQTransactionDispenser2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQTransactionDispenser2 : public IDispatch {
  public:
    virtual HRESULT WINAPI BeginTransaction(IMSMQTransaction2 **ptransaction) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQTransactionDispenser2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQTransactionDispenser2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQTransactionDispenser2 *This);
      ULONG (WINAPI *Release)(IMSMQTransactionDispenser2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQTransactionDispenser2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQTransactionDispenser2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQTransactionDispenser2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQTransactionDispenser2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *BeginTransaction)(IMSMQTransactionDispenser2 *This,IMSMQTransaction2 **ptransaction);
      HRESULT (WINAPI *get_Properties)(IMSMQTransactionDispenser2 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQTransactionDispenser2Vtbl;
  interface IMSMQTransactionDispenser2 {
    CONST_VTBL struct IMSMQTransactionDispenser2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQTransactionDispenser2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQTransactionDispenser2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQTransactionDispenser2_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQTransactionDispenser2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQTransactionDispenser2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQTransactionDispenser2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQTransactionDispenser2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQTransactionDispenser2_BeginTransaction(This,ptransaction) (This)->lpVtbl->BeginTransaction(This,ptransaction)
#define IMSMQTransactionDispenser2_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQTransactionDispenser2_BeginTransaction_Proxy(IMSMQTransactionDispenser2 *This,IMSMQTransaction2 **ptransaction);
  void __RPC_STUB IMSMQTransactionDispenser2_BeginTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQTransactionDispenser2_get_Properties_Proxy(IMSMQTransactionDispenser2 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQTransactionDispenser2_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQTransactionDispenser3_INTERFACE_DEFINED__
#define __IMSMQTransactionDispenser3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQTransactionDispenser3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQTransactionDispenser3 : public IDispatch {
  public:
    virtual HRESULT WINAPI BeginTransaction(IMSMQTransaction3 **ptransaction) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQTransactionDispenser3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQTransactionDispenser3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQTransactionDispenser3 *This);
      ULONG (WINAPI *Release)(IMSMQTransactionDispenser3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQTransactionDispenser3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQTransactionDispenser3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQTransactionDispenser3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQTransactionDispenser3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *BeginTransaction)(IMSMQTransactionDispenser3 *This,IMSMQTransaction3 **ptransaction);
      HRESULT (WINAPI *get_Properties)(IMSMQTransactionDispenser3 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQTransactionDispenser3Vtbl;
  interface IMSMQTransactionDispenser3 {
    CONST_VTBL struct IMSMQTransactionDispenser3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQTransactionDispenser3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQTransactionDispenser3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQTransactionDispenser3_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQTransactionDispenser3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQTransactionDispenser3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQTransactionDispenser3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQTransactionDispenser3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQTransactionDispenser3_BeginTransaction(This,ptransaction) (This)->lpVtbl->BeginTransaction(This,ptransaction)
#define IMSMQTransactionDispenser3_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQTransactionDispenser3_BeginTransaction_Proxy(IMSMQTransactionDispenser3 *This,IMSMQTransaction3 **ptransaction);
  void __RPC_STUB IMSMQTransactionDispenser3_BeginTransaction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQTransactionDispenser3_get_Properties_Proxy(IMSMQTransactionDispenser3 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQTransactionDispenser3_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQTransactionDispenser;
#ifdef __cplusplus
  class MSMQTransactionDispenser;
#endif

#ifndef __IMSMQApplication_INTERFACE_DEFINED__
#define __IMSMQApplication_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQApplication;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQApplication : public IDispatch {
  public:
    virtual HRESULT WINAPI MachineIdOfMachineName(BSTR MachineName,BSTR *pbstrGuid) = 0;
  };
#else
  typedef struct IMSMQApplicationVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQApplication *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQApplication *This);
      ULONG (WINAPI *Release)(IMSMQApplication *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQApplication *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQApplication *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQApplication *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQApplication *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *MachineIdOfMachineName)(IMSMQApplication *This,BSTR MachineName,BSTR *pbstrGuid);
    END_INTERFACE
  } IMSMQApplicationVtbl;
  interface IMSMQApplication {
    CONST_VTBL struct IMSMQApplicationVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQApplication_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQApplication_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQApplication_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQApplication_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQApplication_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQApplication_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQApplication_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQApplication_MachineIdOfMachineName(This,MachineName,pbstrGuid) (This)->lpVtbl->MachineIdOfMachineName(This,MachineName,pbstrGuid)
#endif
#endif
  HRESULT WINAPI IMSMQApplication_MachineIdOfMachineName_Proxy(IMSMQApplication *This,BSTR MachineName,BSTR *pbstrGuid);
  void __RPC_STUB IMSMQApplication_MachineIdOfMachineName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQApplication2_INTERFACE_DEFINED__
#define __IMSMQApplication2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQApplication2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQApplication2 : public IMSMQApplication {
  public:
    virtual HRESULT WINAPI RegisterCertificate(VARIANT *Flags,VARIANT *ExternalCertificate) = 0;
    virtual HRESULT WINAPI MachineNameOfMachineId(BSTR bstrGuid,BSTR *pbstrMachineName) = 0;
    virtual HRESULT WINAPI get_MSMQVersionMajor(short *psMSMQVersionMajor) = 0;
    virtual HRESULT WINAPI get_MSMQVersionMinor(short *psMSMQVersionMinor) = 0;
    virtual HRESULT WINAPI get_MSMQVersionBuild(short *psMSMQVersionBuild) = 0;
    virtual HRESULT WINAPI get_IsDsEnabled(VARIANT_BOOL *pfIsDsEnabled) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQApplication2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQApplication2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQApplication2 *This);
      ULONG (WINAPI *Release)(IMSMQApplication2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQApplication2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQApplication2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQApplication2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQApplication2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *MachineIdOfMachineName)(IMSMQApplication2 *This,BSTR MachineName,BSTR *pbstrGuid);
      HRESULT (WINAPI *RegisterCertificate)(IMSMQApplication2 *This,VARIANT *Flags,VARIANT *ExternalCertificate);
      HRESULT (WINAPI *MachineNameOfMachineId)(IMSMQApplication2 *This,BSTR bstrGuid,BSTR *pbstrMachineName);
      HRESULT (WINAPI *get_MSMQVersionMajor)(IMSMQApplication2 *This,short *psMSMQVersionMajor);
      HRESULT (WINAPI *get_MSMQVersionMinor)(IMSMQApplication2 *This,short *psMSMQVersionMinor);
      HRESULT (WINAPI *get_MSMQVersionBuild)(IMSMQApplication2 *This,short *psMSMQVersionBuild);
      HRESULT (WINAPI *get_IsDsEnabled)(IMSMQApplication2 *This,VARIANT_BOOL *pfIsDsEnabled);
      HRESULT (WINAPI *get_Properties)(IMSMQApplication2 *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQApplication2Vtbl;
  interface IMSMQApplication2 {
    CONST_VTBL struct IMSMQApplication2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQApplication2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQApplication2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQApplication2_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQApplication2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQApplication2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQApplication2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQApplication2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQApplication2_MachineIdOfMachineName(This,MachineName,pbstrGuid) (This)->lpVtbl->MachineIdOfMachineName(This,MachineName,pbstrGuid)
#define IMSMQApplication2_RegisterCertificate(This,Flags,ExternalCertificate) (This)->lpVtbl->RegisterCertificate(This,Flags,ExternalCertificate)
#define IMSMQApplication2_MachineNameOfMachineId(This,bstrGuid,pbstrMachineName) (This)->lpVtbl->MachineNameOfMachineId(This,bstrGuid,pbstrMachineName)
#define IMSMQApplication2_get_MSMQVersionMajor(This,psMSMQVersionMajor) (This)->lpVtbl->get_MSMQVersionMajor(This,psMSMQVersionMajor)
#define IMSMQApplication2_get_MSMQVersionMinor(This,psMSMQVersionMinor) (This)->lpVtbl->get_MSMQVersionMinor(This,psMSMQVersionMinor)
#define IMSMQApplication2_get_MSMQVersionBuild(This,psMSMQVersionBuild) (This)->lpVtbl->get_MSMQVersionBuild(This,psMSMQVersionBuild)
#define IMSMQApplication2_get_IsDsEnabled(This,pfIsDsEnabled) (This)->lpVtbl->get_IsDsEnabled(This,pfIsDsEnabled)
#define IMSMQApplication2_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQApplication2_RegisterCertificate_Proxy(IMSMQApplication2 *This,VARIANT *Flags,VARIANT *ExternalCertificate);
  void __RPC_STUB IMSMQApplication2_RegisterCertificate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication2_MachineNameOfMachineId_Proxy(IMSMQApplication2 *This,BSTR bstrGuid,BSTR *pbstrMachineName);
  void __RPC_STUB IMSMQApplication2_MachineNameOfMachineId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication2_get_MSMQVersionMajor_Proxy(IMSMQApplication2 *This,short *psMSMQVersionMajor);
  void __RPC_STUB IMSMQApplication2_get_MSMQVersionMajor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication2_get_MSMQVersionMinor_Proxy(IMSMQApplication2 *This,short *psMSMQVersionMinor);
  void __RPC_STUB IMSMQApplication2_get_MSMQVersionMinor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication2_get_MSMQVersionBuild_Proxy(IMSMQApplication2 *This,short *psMSMQVersionBuild);
  void __RPC_STUB IMSMQApplication2_get_MSMQVersionBuild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication2_get_IsDsEnabled_Proxy(IMSMQApplication2 *This,VARIANT_BOOL *pfIsDsEnabled);
  void __RPC_STUB IMSMQApplication2_get_IsDsEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication2_get_Properties_Proxy(IMSMQApplication2 *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQApplication2_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQApplication3_INTERFACE_DEFINED__
#define __IMSMQApplication3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQApplication3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQApplication3 : public IMSMQApplication2 {
  public:
    virtual HRESULT WINAPI get_ActiveQueues(VARIANT *pvActiveQueues) = 0;
    virtual HRESULT WINAPI get_PrivateQueues(VARIANT *pvPrivateQueues) = 0;
    virtual HRESULT WINAPI get_DirectoryServiceServer(BSTR *pbstrDirectoryServiceServer) = 0;
    virtual HRESULT WINAPI get_IsConnected(VARIANT_BOOL *pfIsConnected) = 0;
    virtual HRESULT WINAPI get_BytesInAllQueues(VARIANT *pvBytesInAllQueues) = 0;
    virtual HRESULT WINAPI put_Machine(BSTR bstrMachine) = 0;
    virtual HRESULT WINAPI get_Machine(BSTR *pbstrMachine) = 0;
    virtual HRESULT WINAPI Connect(void) = 0;
    virtual HRESULT WINAPI Disconnect(void) = 0;
    virtual HRESULT WINAPI Tidy(void) = 0;
  };
#else
  typedef struct IMSMQApplication3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQApplication3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQApplication3 *This);
      ULONG (WINAPI *Release)(IMSMQApplication3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQApplication3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQApplication3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQApplication3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQApplication3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *MachineIdOfMachineName)(IMSMQApplication3 *This,BSTR MachineName,BSTR *pbstrGuid);
      HRESULT (WINAPI *RegisterCertificate)(IMSMQApplication3 *This,VARIANT *Flags,VARIANT *ExternalCertificate);
      HRESULT (WINAPI *MachineNameOfMachineId)(IMSMQApplication3 *This,BSTR bstrGuid,BSTR *pbstrMachineName);
      HRESULT (WINAPI *get_MSMQVersionMajor)(IMSMQApplication3 *This,short *psMSMQVersionMajor);
      HRESULT (WINAPI *get_MSMQVersionMinor)(IMSMQApplication3 *This,short *psMSMQVersionMinor);
      HRESULT (WINAPI *get_MSMQVersionBuild)(IMSMQApplication3 *This,short *psMSMQVersionBuild);
      HRESULT (WINAPI *get_IsDsEnabled)(IMSMQApplication3 *This,VARIANT_BOOL *pfIsDsEnabled);
      HRESULT (WINAPI *get_Properties)(IMSMQApplication3 *This,IDispatch **ppcolProperties);
      HRESULT (WINAPI *get_ActiveQueues)(IMSMQApplication3 *This,VARIANT *pvActiveQueues);
      HRESULT (WINAPI *get_PrivateQueues)(IMSMQApplication3 *This,VARIANT *pvPrivateQueues);
      HRESULT (WINAPI *get_DirectoryServiceServer)(IMSMQApplication3 *This,BSTR *pbstrDirectoryServiceServer);
      HRESULT (WINAPI *get_IsConnected)(IMSMQApplication3 *This,VARIANT_BOOL *pfIsConnected);
      HRESULT (WINAPI *get_BytesInAllQueues)(IMSMQApplication3 *This,VARIANT *pvBytesInAllQueues);
      HRESULT (WINAPI *put_Machine)(IMSMQApplication3 *This,BSTR bstrMachine);
      HRESULT (WINAPI *get_Machine)(IMSMQApplication3 *This,BSTR *pbstrMachine);
      HRESULT (WINAPI *Connect)(IMSMQApplication3 *This);
      HRESULT (WINAPI *Disconnect)(IMSMQApplication3 *This);
      HRESULT (WINAPI *Tidy)(IMSMQApplication3 *This);
    END_INTERFACE
  } IMSMQApplication3Vtbl;
  interface IMSMQApplication3 {
    CONST_VTBL struct IMSMQApplication3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQApplication3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQApplication3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQApplication3_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQApplication3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQApplication3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQApplication3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQApplication3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQApplication3_MachineIdOfMachineName(This,MachineName,pbstrGuid) (This)->lpVtbl->MachineIdOfMachineName(This,MachineName,pbstrGuid)
#define IMSMQApplication3_RegisterCertificate(This,Flags,ExternalCertificate) (This)->lpVtbl->RegisterCertificate(This,Flags,ExternalCertificate)
#define IMSMQApplication3_MachineNameOfMachineId(This,bstrGuid,pbstrMachineName) (This)->lpVtbl->MachineNameOfMachineId(This,bstrGuid,pbstrMachineName)
#define IMSMQApplication3_get_MSMQVersionMajor(This,psMSMQVersionMajor) (This)->lpVtbl->get_MSMQVersionMajor(This,psMSMQVersionMajor)
#define IMSMQApplication3_get_MSMQVersionMinor(This,psMSMQVersionMinor) (This)->lpVtbl->get_MSMQVersionMinor(This,psMSMQVersionMinor)
#define IMSMQApplication3_get_MSMQVersionBuild(This,psMSMQVersionBuild) (This)->lpVtbl->get_MSMQVersionBuild(This,psMSMQVersionBuild)
#define IMSMQApplication3_get_IsDsEnabled(This,pfIsDsEnabled) (This)->lpVtbl->get_IsDsEnabled(This,pfIsDsEnabled)
#define IMSMQApplication3_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#define IMSMQApplication3_get_ActiveQueues(This,pvActiveQueues) (This)->lpVtbl->get_ActiveQueues(This,pvActiveQueues)
#define IMSMQApplication3_get_PrivateQueues(This,pvPrivateQueues) (This)->lpVtbl->get_PrivateQueues(This,pvPrivateQueues)
#define IMSMQApplication3_get_DirectoryServiceServer(This,pbstrDirectoryServiceServer) (This)->lpVtbl->get_DirectoryServiceServer(This,pbstrDirectoryServiceServer)
#define IMSMQApplication3_get_IsConnected(This,pfIsConnected) (This)->lpVtbl->get_IsConnected(This,pfIsConnected)
#define IMSMQApplication3_get_BytesInAllQueues(This,pvBytesInAllQueues) (This)->lpVtbl->get_BytesInAllQueues(This,pvBytesInAllQueues)
#define IMSMQApplication3_put_Machine(This,bstrMachine) (This)->lpVtbl->put_Machine(This,bstrMachine)
#define IMSMQApplication3_get_Machine(This,pbstrMachine) (This)->lpVtbl->get_Machine(This,pbstrMachine)
#define IMSMQApplication3_Connect(This) (This)->lpVtbl->Connect(This)
#define IMSMQApplication3_Disconnect(This) (This)->lpVtbl->Disconnect(This)
#define IMSMQApplication3_Tidy(This) (This)->lpVtbl->Tidy(This)
#endif
#endif
  HRESULT WINAPI IMSMQApplication3_get_ActiveQueues_Proxy(IMSMQApplication3 *This,VARIANT *pvActiveQueues);
  void __RPC_STUB IMSMQApplication3_get_ActiveQueues_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication3_get_PrivateQueues_Proxy(IMSMQApplication3 *This,VARIANT *pvPrivateQueues);
  void __RPC_STUB IMSMQApplication3_get_PrivateQueues_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication3_get_DirectoryServiceServer_Proxy(IMSMQApplication3 *This,BSTR *pbstrDirectoryServiceServer);
  void __RPC_STUB IMSMQApplication3_get_DirectoryServiceServer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication3_get_IsConnected_Proxy(IMSMQApplication3 *This,VARIANT_BOOL *pfIsConnected);
  void __RPC_STUB IMSMQApplication3_get_IsConnected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication3_get_BytesInAllQueues_Proxy(IMSMQApplication3 *This,VARIANT *pvBytesInAllQueues);
  void __RPC_STUB IMSMQApplication3_get_BytesInAllQueues_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication3_put_Machine_Proxy(IMSMQApplication3 *This,BSTR bstrMachine);
  void __RPC_STUB IMSMQApplication3_put_Machine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication3_get_Machine_Proxy(IMSMQApplication3 *This,BSTR *pbstrMachine);
  void __RPC_STUB IMSMQApplication3_get_Machine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication3_Connect_Proxy(IMSMQApplication3 *This);
  void __RPC_STUB IMSMQApplication3_Connect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication3_Disconnect_Proxy(IMSMQApplication3 *This);
  void __RPC_STUB IMSMQApplication3_Disconnect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQApplication3_Tidy_Proxy(IMSMQApplication3 *This);
  void __RPC_STUB IMSMQApplication3_Tidy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQApplication;
#ifdef __cplusplus
  class MSMQApplication;
#endif

#ifndef __IMSMQDestination_INTERFACE_DEFINED__
#define __IMSMQDestination_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQDestination;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQDestination : public IDispatch {
  public:
    virtual HRESULT WINAPI Open(void) = 0;
    virtual HRESULT WINAPI Close(void) = 0;
    virtual HRESULT WINAPI get_IsOpen(VARIANT_BOOL *pfIsOpen) = 0;
    virtual HRESULT WINAPI get_IADs(IDispatch **ppIADs) = 0;
    virtual HRESULT WINAPI putref_IADs(IDispatch *pIADs) = 0;
    virtual HRESULT WINAPI get_ADsPath(BSTR *pbstrADsPath) = 0;
    virtual HRESULT WINAPI put_ADsPath(BSTR bstrADsPath) = 0;
    virtual HRESULT WINAPI get_PathName(BSTR *pbstrPathName) = 0;
    virtual HRESULT WINAPI put_PathName(BSTR bstrPathName) = 0;
    virtual HRESULT WINAPI get_FormatName(BSTR *pbstrFormatName) = 0;
    virtual HRESULT WINAPI put_FormatName(BSTR bstrFormatName) = 0;
    virtual HRESULT WINAPI get_Destinations(IDispatch **ppDestinations) = 0;
    virtual HRESULT WINAPI putref_Destinations(IDispatch *pDestinations) = 0;
    virtual HRESULT WINAPI get_Properties(IDispatch **ppcolProperties) = 0;
  };
#else
  typedef struct IMSMQDestinationVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQDestination *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQDestination *This);
      ULONG (WINAPI *Release)(IMSMQDestination *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQDestination *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQDestination *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQDestination *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQDestination *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *Open)(IMSMQDestination *This);
      HRESULT (WINAPI *Close)(IMSMQDestination *This);
      HRESULT (WINAPI *get_IsOpen)(IMSMQDestination *This,VARIANT_BOOL *pfIsOpen);
      HRESULT (WINAPI *get_IADs)(IMSMQDestination *This,IDispatch **ppIADs);
      HRESULT (WINAPI *putref_IADs)(IMSMQDestination *This,IDispatch *pIADs);
      HRESULT (WINAPI *get_ADsPath)(IMSMQDestination *This,BSTR *pbstrADsPath);
      HRESULT (WINAPI *put_ADsPath)(IMSMQDestination *This,BSTR bstrADsPath);
      HRESULT (WINAPI *get_PathName)(IMSMQDestination *This,BSTR *pbstrPathName);
      HRESULT (WINAPI *put_PathName)(IMSMQDestination *This,BSTR bstrPathName);
      HRESULT (WINAPI *get_FormatName)(IMSMQDestination *This,BSTR *pbstrFormatName);
      HRESULT (WINAPI *put_FormatName)(IMSMQDestination *This,BSTR bstrFormatName);
      HRESULT (WINAPI *get_Destinations)(IMSMQDestination *This,IDispatch **ppDestinations);
      HRESULT (WINAPI *putref_Destinations)(IMSMQDestination *This,IDispatch *pDestinations);
      HRESULT (WINAPI *get_Properties)(IMSMQDestination *This,IDispatch **ppcolProperties);
    END_INTERFACE
  } IMSMQDestinationVtbl;
  interface IMSMQDestination {
    CONST_VTBL struct IMSMQDestinationVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQDestination_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQDestination_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQDestination_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQDestination_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQDestination_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQDestination_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQDestination_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQDestination_Open(This) (This)->lpVtbl->Open(This)
#define IMSMQDestination_Close(This) (This)->lpVtbl->Close(This)
#define IMSMQDestination_get_IsOpen(This,pfIsOpen) (This)->lpVtbl->get_IsOpen(This,pfIsOpen)
#define IMSMQDestination_get_IADs(This,ppIADs) (This)->lpVtbl->get_IADs(This,ppIADs)
#define IMSMQDestination_putref_IADs(This,pIADs) (This)->lpVtbl->putref_IADs(This,pIADs)
#define IMSMQDestination_get_ADsPath(This,pbstrADsPath) (This)->lpVtbl->get_ADsPath(This,pbstrADsPath)
#define IMSMQDestination_put_ADsPath(This,bstrADsPath) (This)->lpVtbl->put_ADsPath(This,bstrADsPath)
#define IMSMQDestination_get_PathName(This,pbstrPathName) (This)->lpVtbl->get_PathName(This,pbstrPathName)
#define IMSMQDestination_put_PathName(This,bstrPathName) (This)->lpVtbl->put_PathName(This,bstrPathName)
#define IMSMQDestination_get_FormatName(This,pbstrFormatName) (This)->lpVtbl->get_FormatName(This,pbstrFormatName)
#define IMSMQDestination_put_FormatName(This,bstrFormatName) (This)->lpVtbl->put_FormatName(This,bstrFormatName)
#define IMSMQDestination_get_Destinations(This,ppDestinations) (This)->lpVtbl->get_Destinations(This,ppDestinations)
#define IMSMQDestination_putref_Destinations(This,pDestinations) (This)->lpVtbl->putref_Destinations(This,pDestinations)
#define IMSMQDestination_get_Properties(This,ppcolProperties) (This)->lpVtbl->get_Properties(This,ppcolProperties)
#endif
#endif
  HRESULT WINAPI IMSMQDestination_Open_Proxy(IMSMQDestination *This);
  void __RPC_STUB IMSMQDestination_Open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_Close_Proxy(IMSMQDestination *This);
  void __RPC_STUB IMSMQDestination_Close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_get_IsOpen_Proxy(IMSMQDestination *This,VARIANT_BOOL *pfIsOpen);
  void __RPC_STUB IMSMQDestination_get_IsOpen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_get_IADs_Proxy(IMSMQDestination *This,IDispatch **ppIADs);
  void __RPC_STUB IMSMQDestination_get_IADs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_putref_IADs_Proxy(IMSMQDestination *This,IDispatch *pIADs);
  void __RPC_STUB IMSMQDestination_putref_IADs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_get_ADsPath_Proxy(IMSMQDestination *This,BSTR *pbstrADsPath);
  void __RPC_STUB IMSMQDestination_get_ADsPath_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_put_ADsPath_Proxy(IMSMQDestination *This,BSTR bstrADsPath);
  void __RPC_STUB IMSMQDestination_put_ADsPath_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_get_PathName_Proxy(IMSMQDestination *This,BSTR *pbstrPathName);
  void __RPC_STUB IMSMQDestination_get_PathName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_put_PathName_Proxy(IMSMQDestination *This,BSTR bstrPathName);
  void __RPC_STUB IMSMQDestination_put_PathName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_get_FormatName_Proxy(IMSMQDestination *This,BSTR *pbstrFormatName);
  void __RPC_STUB IMSMQDestination_get_FormatName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_put_FormatName_Proxy(IMSMQDestination *This,BSTR bstrFormatName);
  void __RPC_STUB IMSMQDestination_put_FormatName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_get_Destinations_Proxy(IMSMQDestination *This,IDispatch **ppDestinations);
  void __RPC_STUB IMSMQDestination_get_Destinations_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_putref_Destinations_Proxy(IMSMQDestination *This,IDispatch *pDestinations);
  void __RPC_STUB IMSMQDestination_putref_Destinations_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQDestination_get_Properties_Proxy(IMSMQDestination *This,IDispatch **ppcolProperties);
  void __RPC_STUB IMSMQDestination_get_Properties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSMQPrivateDestination_INTERFACE_DEFINED__
#define __IMSMQPrivateDestination_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQPrivateDestination;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQPrivateDestination : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Handle(VARIANT *pvarHandle) = 0;
    virtual HRESULT WINAPI put_Handle(VARIANT varHandle) = 0;
  };
#else
  typedef struct IMSMQPrivateDestinationVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQPrivateDestination *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQPrivateDestination *This);
      ULONG (WINAPI *Release)(IMSMQPrivateDestination *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQPrivateDestination *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQPrivateDestination *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQPrivateDestination *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQPrivateDestination *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Handle)(IMSMQPrivateDestination *This,VARIANT *pvarHandle);
      HRESULT (WINAPI *put_Handle)(IMSMQPrivateDestination *This,VARIANT varHandle);
    END_INTERFACE
  } IMSMQPrivateDestinationVtbl;
  interface IMSMQPrivateDestination {
    CONST_VTBL struct IMSMQPrivateDestinationVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQPrivateDestination_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQPrivateDestination_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQPrivateDestination_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQPrivateDestination_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQPrivateDestination_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQPrivateDestination_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQPrivateDestination_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQPrivateDestination_get_Handle(This,pvarHandle) (This)->lpVtbl->get_Handle(This,pvarHandle)
#define IMSMQPrivateDestination_put_Handle(This,varHandle) (This)->lpVtbl->put_Handle(This,varHandle)
#endif
#endif
  HRESULT WINAPI IMSMQPrivateDestination_get_Handle_Proxy(IMSMQPrivateDestination *This,VARIANT *pvarHandle);
  void __RPC_STUB IMSMQPrivateDestination_get_Handle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQPrivateDestination_put_Handle_Proxy(IMSMQPrivateDestination *This,VARIANT varHandle);
  void __RPC_STUB IMSMQPrivateDestination_put_Handle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQDestination;
#ifdef __cplusplus
  class MSMQDestination;
#endif

#ifndef __IMSMQCollection_INTERFACE_DEFINED__
#define __IMSMQCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI Item(VARIANT *Index,VARIANT *pvarRet) = 0;
    virtual HRESULT WINAPI get_Count(long *pCount) = 0;
    virtual HRESULT WINAPI _NewEnum(IUnknown **ppunk) = 0;
  };
#else
  typedef struct IMSMQCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQCollection *This);
      ULONG (WINAPI *Release)(IMSMQCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *Item)(IMSMQCollection *This,VARIANT *Index,VARIANT *pvarRet);
      HRESULT (WINAPI *get_Count)(IMSMQCollection *This,long *pCount);
      HRESULT (WINAPI *_NewEnum)(IMSMQCollection *This,IUnknown **ppunk);
    END_INTERFACE
  } IMSMQCollectionVtbl;
  interface IMSMQCollection {
    CONST_VTBL struct IMSMQCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQCollection_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQCollection_Item(This,Index,pvarRet) (This)->lpVtbl->Item(This,Index,pvarRet)
#define IMSMQCollection_get_Count(This,pCount) (This)->lpVtbl->get_Count(This,pCount)
#define IMSMQCollection__NewEnum(This,ppunk) (This)->lpVtbl->_NewEnum(This,ppunk)
#endif
#endif
  HRESULT WINAPI IMSMQCollection_Item_Proxy(IMSMQCollection *This,VARIANT *Index,VARIANT *pvarRet);
  void __RPC_STUB IMSMQCollection_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQCollection_get_Count_Proxy(IMSMQCollection *This,long *pCount);
  void __RPC_STUB IMSMQCollection_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQCollection__NewEnum_Proxy(IMSMQCollection *This,IUnknown **ppunk);
  void __RPC_STUB IMSMQCollection__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQCollection;
#ifdef __cplusplus
  class MSMQCollection;
#endif

#ifndef __IMSMQManagement_INTERFACE_DEFINED__
#define __IMSMQManagement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQManagement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQManagement : public IDispatch {
  public:
    virtual HRESULT WINAPI Init(VARIANT *Machine,VARIANT *Pathname,VARIANT *FormatName) = 0;
    virtual HRESULT WINAPI get_FormatName(BSTR *pbstrFormatName) = 0;
    virtual HRESULT WINAPI get_Machine(BSTR *pbstrMachine) = 0;
    virtual HRESULT WINAPI get_MessageCount(long *plMessageCount) = 0;
    virtual HRESULT WINAPI get_ForeignStatus(long *plForeignStatus) = 0;
    virtual HRESULT WINAPI get_QueueType(long *plQueueType) = 0;
    virtual HRESULT WINAPI get_IsLocal(VARIANT_BOOL *pfIsLocal) = 0;
    virtual HRESULT WINAPI get_TransactionalStatus(long *plTransactionalStatus) = 0;
    virtual HRESULT WINAPI get_BytesInQueue(VARIANT *pvBytesInQueue) = 0;
  };
#else
  typedef struct IMSMQManagementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQManagement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQManagement *This);
      ULONG (WINAPI *Release)(IMSMQManagement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQManagement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQManagement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQManagement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQManagement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *Init)(IMSMQManagement *This,VARIANT *Machine,VARIANT *Pathname,VARIANT *FormatName);
      HRESULT (WINAPI *get_FormatName)(IMSMQManagement *This,BSTR *pbstrFormatName);
      HRESULT (WINAPI *get_Machine)(IMSMQManagement *This,BSTR *pbstrMachine);
      HRESULT (WINAPI *get_MessageCount)(IMSMQManagement *This,long *plMessageCount);
      HRESULT (WINAPI *get_ForeignStatus)(IMSMQManagement *This,long *plForeignStatus);
      HRESULT (WINAPI *get_QueueType)(IMSMQManagement *This,long *plQueueType);
      HRESULT (WINAPI *get_IsLocal)(IMSMQManagement *This,VARIANT_BOOL *pfIsLocal);
      HRESULT (WINAPI *get_TransactionalStatus)(IMSMQManagement *This,long *plTransactionalStatus);
      HRESULT (WINAPI *get_BytesInQueue)(IMSMQManagement *This,VARIANT *pvBytesInQueue);
    END_INTERFACE
  } IMSMQManagementVtbl;
  interface IMSMQManagement {
    CONST_VTBL struct IMSMQManagementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQManagement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQManagement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQManagement_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQManagement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQManagement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQManagement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQManagement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQManagement_Init(This,Machine,Pathname,FormatName) (This)->lpVtbl->Init(This,Machine,Pathname,FormatName)
#define IMSMQManagement_get_FormatName(This,pbstrFormatName) (This)->lpVtbl->get_FormatName(This,pbstrFormatName)
#define IMSMQManagement_get_Machine(This,pbstrMachine) (This)->lpVtbl->get_Machine(This,pbstrMachine)
#define IMSMQManagement_get_MessageCount(This,plMessageCount) (This)->lpVtbl->get_MessageCount(This,plMessageCount)
#define IMSMQManagement_get_ForeignStatus(This,plForeignStatus) (This)->lpVtbl->get_ForeignStatus(This,plForeignStatus)
#define IMSMQManagement_get_QueueType(This,plQueueType) (This)->lpVtbl->get_QueueType(This,plQueueType)
#define IMSMQManagement_get_IsLocal(This,pfIsLocal) (This)->lpVtbl->get_IsLocal(This,pfIsLocal)
#define IMSMQManagement_get_TransactionalStatus(This,plTransactionalStatus) (This)->lpVtbl->get_TransactionalStatus(This,plTransactionalStatus)
#define IMSMQManagement_get_BytesInQueue(This,pvBytesInQueue) (This)->lpVtbl->get_BytesInQueue(This,pvBytesInQueue)
#endif
#endif
  HRESULT WINAPI IMSMQManagement_Init_Proxy(IMSMQManagement *This,VARIANT *Machine,VARIANT *Pathname,VARIANT *FormatName);
  void __RPC_STUB IMSMQManagement_Init_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQManagement_get_FormatName_Proxy(IMSMQManagement *This,BSTR *pbstrFormatName);
  void __RPC_STUB IMSMQManagement_get_FormatName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQManagement_get_Machine_Proxy(IMSMQManagement *This,BSTR *pbstrMachine);
  void __RPC_STUB IMSMQManagement_get_Machine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQManagement_get_MessageCount_Proxy(IMSMQManagement *This,long *plMessageCount);
  void __RPC_STUB IMSMQManagement_get_MessageCount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQManagement_get_ForeignStatus_Proxy(IMSMQManagement *This,long *plForeignStatus);
  void __RPC_STUB IMSMQManagement_get_ForeignStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQManagement_get_QueueType_Proxy(IMSMQManagement *This,long *plQueueType);
  void __RPC_STUB IMSMQManagement_get_QueueType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQManagement_get_IsLocal_Proxy(IMSMQManagement *This,VARIANT_BOOL *pfIsLocal);
  void __RPC_STUB IMSMQManagement_get_IsLocal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQManagement_get_TransactionalStatus_Proxy(IMSMQManagement *This,long *plTransactionalStatus);
  void __RPC_STUB IMSMQManagement_get_TransactionalStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQManagement_get_BytesInQueue_Proxy(IMSMQManagement *This,VARIANT *pvBytesInQueue);
  void __RPC_STUB IMSMQManagement_get_BytesInQueue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQManagement;
#ifdef __cplusplus
  class MSMQManagement;
#endif

#ifndef __IMSMQOutgoingQueueManagement_INTERFACE_DEFINED__
#define __IMSMQOutgoingQueueManagement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQOutgoingQueueManagement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQOutgoingQueueManagement : public IMSMQManagement {
  public:
    virtual HRESULT WINAPI get_State(long *plState) = 0;
    virtual HRESULT WINAPI get_NextHops(VARIANT *pvNextHops) = 0;
    virtual HRESULT WINAPI EodGetSendInfo(IMSMQCollection **ppCollection) = 0;
    virtual HRESULT WINAPI Resume(void) = 0;
    virtual HRESULT WINAPI Pause(void) = 0;
    virtual HRESULT WINAPI EodResend(void) = 0;
  };
#else
  typedef struct IMSMQOutgoingQueueManagementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQOutgoingQueueManagement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQOutgoingQueueManagement *This);
      ULONG (WINAPI *Release)(IMSMQOutgoingQueueManagement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQOutgoingQueueManagement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQOutgoingQueueManagement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQOutgoingQueueManagement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQOutgoingQueueManagement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *Init)(IMSMQOutgoingQueueManagement *This,VARIANT *Machine,VARIANT *Pathname,VARIANT *FormatName);
      HRESULT (WINAPI *get_FormatName)(IMSMQOutgoingQueueManagement *This,BSTR *pbstrFormatName);
      HRESULT (WINAPI *get_Machine)(IMSMQOutgoingQueueManagement *This,BSTR *pbstrMachine);
      HRESULT (WINAPI *get_MessageCount)(IMSMQOutgoingQueueManagement *This,long *plMessageCount);
      HRESULT (WINAPI *get_ForeignStatus)(IMSMQOutgoingQueueManagement *This,long *plForeignStatus);
      HRESULT (WINAPI *get_QueueType)(IMSMQOutgoingQueueManagement *This,long *plQueueType);
      HRESULT (WINAPI *get_IsLocal)(IMSMQOutgoingQueueManagement *This,VARIANT_BOOL *pfIsLocal);
      HRESULT (WINAPI *get_TransactionalStatus)(IMSMQOutgoingQueueManagement *This,long *plTransactionalStatus);
      HRESULT (WINAPI *get_BytesInQueue)(IMSMQOutgoingQueueManagement *This,VARIANT *pvBytesInQueue);
      HRESULT (WINAPI *get_State)(IMSMQOutgoingQueueManagement *This,long *plState);
      HRESULT (WINAPI *get_NextHops)(IMSMQOutgoingQueueManagement *This,VARIANT *pvNextHops);
      HRESULT (WINAPI *EodGetSendInfo)(IMSMQOutgoingQueueManagement *This,IMSMQCollection **ppCollection);
      HRESULT (WINAPI *Resume)(IMSMQOutgoingQueueManagement *This);
      HRESULT (WINAPI *Pause)(IMSMQOutgoingQueueManagement *This);
      HRESULT (WINAPI *EodResend)(IMSMQOutgoingQueueManagement *This);
    END_INTERFACE
  } IMSMQOutgoingQueueManagementVtbl;
  interface IMSMQOutgoingQueueManagement {
    CONST_VTBL struct IMSMQOutgoingQueueManagementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQOutgoingQueueManagement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQOutgoingQueueManagement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQOutgoingQueueManagement_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQOutgoingQueueManagement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQOutgoingQueueManagement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQOutgoingQueueManagement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQOutgoingQueueManagement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQOutgoingQueueManagement_Init(This,Machine,Pathname,FormatName) (This)->lpVtbl->Init(This,Machine,Pathname,FormatName)
#define IMSMQOutgoingQueueManagement_get_FormatName(This,pbstrFormatName) (This)->lpVtbl->get_FormatName(This,pbstrFormatName)
#define IMSMQOutgoingQueueManagement_get_Machine(This,pbstrMachine) (This)->lpVtbl->get_Machine(This,pbstrMachine)
#define IMSMQOutgoingQueueManagement_get_MessageCount(This,plMessageCount) (This)->lpVtbl->get_MessageCount(This,plMessageCount)
#define IMSMQOutgoingQueueManagement_get_ForeignStatus(This,plForeignStatus) (This)->lpVtbl->get_ForeignStatus(This,plForeignStatus)
#define IMSMQOutgoingQueueManagement_get_QueueType(This,plQueueType) (This)->lpVtbl->get_QueueType(This,plQueueType)
#define IMSMQOutgoingQueueManagement_get_IsLocal(This,pfIsLocal) (This)->lpVtbl->get_IsLocal(This,pfIsLocal)
#define IMSMQOutgoingQueueManagement_get_TransactionalStatus(This,plTransactionalStatus) (This)->lpVtbl->get_TransactionalStatus(This,plTransactionalStatus)
#define IMSMQOutgoingQueueManagement_get_BytesInQueue(This,pvBytesInQueue) (This)->lpVtbl->get_BytesInQueue(This,pvBytesInQueue)
#define IMSMQOutgoingQueueManagement_get_State(This,plState) (This)->lpVtbl->get_State(This,plState)
#define IMSMQOutgoingQueueManagement_get_NextHops(This,pvNextHops) (This)->lpVtbl->get_NextHops(This,pvNextHops)
#define IMSMQOutgoingQueueManagement_EodGetSendInfo(This,ppCollection) (This)->lpVtbl->EodGetSendInfo(This,ppCollection)
#define IMSMQOutgoingQueueManagement_Resume(This) (This)->lpVtbl->Resume(This)
#define IMSMQOutgoingQueueManagement_Pause(This) (This)->lpVtbl->Pause(This)
#define IMSMQOutgoingQueueManagement_EodResend(This) (This)->lpVtbl->EodResend(This)
#endif
#endif
  HRESULT WINAPI IMSMQOutgoingQueueManagement_get_State_Proxy(IMSMQOutgoingQueueManagement *This,long *plState);
  void __RPC_STUB IMSMQOutgoingQueueManagement_get_State_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQOutgoingQueueManagement_get_NextHops_Proxy(IMSMQOutgoingQueueManagement *This,VARIANT *pvNextHops);
  void __RPC_STUB IMSMQOutgoingQueueManagement_get_NextHops_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQOutgoingQueueManagement_EodGetSendInfo_Proxy(IMSMQOutgoingQueueManagement *This,IMSMQCollection **ppCollection);
  void __RPC_STUB IMSMQOutgoingQueueManagement_EodGetSendInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQOutgoingQueueManagement_Resume_Proxy(IMSMQOutgoingQueueManagement *This);
  void __RPC_STUB IMSMQOutgoingQueueManagement_Resume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQOutgoingQueueManagement_Pause_Proxy(IMSMQOutgoingQueueManagement *This);
  void __RPC_STUB IMSMQOutgoingQueueManagement_Pause_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQOutgoingQueueManagement_EodResend_Proxy(IMSMQOutgoingQueueManagement *This);
  void __RPC_STUB IMSMQOutgoingQueueManagement_EodResend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQOutgoingQueueManagement;
#ifdef __cplusplus
  class MSMQOutgoingQueueManagement;
#endif

#ifndef __IMSMQQueueManagement_INTERFACE_DEFINED__
#define __IMSMQQueueManagement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSMQQueueManagement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSMQQueueManagement : public IMSMQManagement {
  public:
    virtual HRESULT WINAPI get_JournalMessageCount(long *plJournalMessageCount) = 0;
    virtual HRESULT WINAPI get_BytesInJournal(VARIANT *pvBytesInJournal) = 0;
    virtual HRESULT WINAPI EodGetReceiveInfo(VARIANT *pvCollection) = 0;
  };
#else
  typedef struct IMSMQQueueManagementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSMQQueueManagement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSMQQueueManagement *This);
      ULONG (WINAPI *Release)(IMSMQQueueManagement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSMQQueueManagement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSMQQueueManagement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSMQQueueManagement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSMQQueueManagement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *Init)(IMSMQQueueManagement *This,VARIANT *Machine,VARIANT *Pathname,VARIANT *FormatName);
      HRESULT (WINAPI *get_FormatName)(IMSMQQueueManagement *This,BSTR *pbstrFormatName);
      HRESULT (WINAPI *get_Machine)(IMSMQQueueManagement *This,BSTR *pbstrMachine);
      HRESULT (WINAPI *get_MessageCount)(IMSMQQueueManagement *This,long *plMessageCount);
      HRESULT (WINAPI *get_ForeignStatus)(IMSMQQueueManagement *This,long *plForeignStatus);
      HRESULT (WINAPI *get_QueueType)(IMSMQQueueManagement *This,long *plQueueType);
      HRESULT (WINAPI *get_IsLocal)(IMSMQQueueManagement *This,VARIANT_BOOL *pfIsLocal);
      HRESULT (WINAPI *get_TransactionalStatus)(IMSMQQueueManagement *This,long *plTransactionalStatus);
      HRESULT (WINAPI *get_BytesInQueue)(IMSMQQueueManagement *This,VARIANT *pvBytesInQueue);
      HRESULT (WINAPI *get_JournalMessageCount)(IMSMQQueueManagement *This,long *plJournalMessageCount);
      HRESULT (WINAPI *get_BytesInJournal)(IMSMQQueueManagement *This,VARIANT *pvBytesInJournal);
      HRESULT (WINAPI *EodGetReceiveInfo)(IMSMQQueueManagement *This,VARIANT *pvCollection);
    END_INTERFACE
  } IMSMQQueueManagementVtbl;
  interface IMSMQQueueManagement {
    CONST_VTBL struct IMSMQQueueManagementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSMQQueueManagement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSMQQueueManagement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSMQQueueManagement_Release(This) (This)->lpVtbl->Release(This)
#define IMSMQQueueManagement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSMQQueueManagement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSMQQueueManagement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSMQQueueManagement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSMQQueueManagement_Init(This,Machine,Pathname,FormatName) (This)->lpVtbl->Init(This,Machine,Pathname,FormatName)
#define IMSMQQueueManagement_get_FormatName(This,pbstrFormatName) (This)->lpVtbl->get_FormatName(This,pbstrFormatName)
#define IMSMQQueueManagement_get_Machine(This,pbstrMachine) (This)->lpVtbl->get_Machine(This,pbstrMachine)
#define IMSMQQueueManagement_get_MessageCount(This,plMessageCount) (This)->lpVtbl->get_MessageCount(This,plMessageCount)
#define IMSMQQueueManagement_get_ForeignStatus(This,plForeignStatus) (This)->lpVtbl->get_ForeignStatus(This,plForeignStatus)
#define IMSMQQueueManagement_get_QueueType(This,plQueueType) (This)->lpVtbl->get_QueueType(This,plQueueType)
#define IMSMQQueueManagement_get_IsLocal(This,pfIsLocal) (This)->lpVtbl->get_IsLocal(This,pfIsLocal)
#define IMSMQQueueManagement_get_TransactionalStatus(This,plTransactionalStatus) (This)->lpVtbl->get_TransactionalStatus(This,plTransactionalStatus)
#define IMSMQQueueManagement_get_BytesInQueue(This,pvBytesInQueue) (This)->lpVtbl->get_BytesInQueue(This,pvBytesInQueue)
#define IMSMQQueueManagement_get_JournalMessageCount(This,plJournalMessageCount) (This)->lpVtbl->get_JournalMessageCount(This,plJournalMessageCount)
#define IMSMQQueueManagement_get_BytesInJournal(This,pvBytesInJournal) (This)->lpVtbl->get_BytesInJournal(This,pvBytesInJournal)
#define IMSMQQueueManagement_EodGetReceiveInfo(This,pvCollection) (This)->lpVtbl->EodGetReceiveInfo(This,pvCollection)
#endif
#endif
  HRESULT WINAPI IMSMQQueueManagement_get_JournalMessageCount_Proxy(IMSMQQueueManagement *This,long *plJournalMessageCount);
  void __RPC_STUB IMSMQQueueManagement_get_JournalMessageCount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueManagement_get_BytesInJournal_Proxy(IMSMQQueueManagement *This,VARIANT *pvBytesInJournal);
  void __RPC_STUB IMSMQQueueManagement_get_BytesInJournal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSMQQueueManagement_EodGetReceiveInfo_Proxy(IMSMQQueueManagement *This,VARIANT *pvCollection);
  void __RPC_STUB IMSMQQueueManagement_EodGetReceiveInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_MSMQQueueManagement;
#ifdef __cplusplus
  class MSMQQueueManagement;
#endif
#endif

#ifdef __cplusplus
}
#endif
#endif
