Export (0) Print
Expand All

6 Appendix A: Full IDL

For ease of implementation, the full IDL is provided below, where "ms-dtyp.idl" is the IDL found in [MS-DTYP]Appendix A (section 5), "ms-mqrr.idl" is the IDL found in [MS-MQRR]Appendix A (section 6), and "ms-mqmq.idl" is the IDL found in [MS-MQMQ]Appendix A (section 5).

// Please refer to [MS-MQMQ] for definitions of the 
// following types:

//   MULTICAST_ID
//   OBJECTID
//   PROPVARIANT
//   QUEUE_FORMAT
//   XACTUOW
import "ms-mqmq.idl";

// Please refer to [MS-MQRR] for definitions of the 
// following types:
//   DL_ID
import "ms-mqrr.idl";

// Please refer to [MS-DTYP] for definitions of the 
// following types:
//   DWORD
//   GUID


[
  uuid(fdb3a030-065f-11d1-bb9b-00a024ea5525),
  version(1.0),
  pointer_default(unique)
]
interface qmcomm
{

struct CACCreateRemoteCursor {
      DWORD hCursor;
      DWORD srv_hACQueue;
      DWORD cli_pQMQueue;
};
enum TRANSFER_TYPE {
    CACTB_SEND = 0,
    CACTB_RECEIVE,
    CACTB_CREATECURSOR,
};

struct CACTransferBufferV1 {
    [range(0,2)] DWORD uTransferType;
    [switch_is(uTransferType)]
    union {
        [case(CACTB_SEND)]
        struct {

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

struct CACTransferBufferV2 {
    struct CACTransferBufferV1 old;
    unsigned char * pbFirstInXact;
    unsigned char * pbLastInXact;
    OBJECTID** ppXactID;
}; // CACTransferBufferV2

struct OBJECT_FORMAT {
    [range(1,2)] DWORD ObjType;
        [switch_is(ObjType)] union
        {
            [case(1)]

                QUEUE_FORMAT* pQueueFormat;
        };
};

typedef [context_handle] void* PCTX_OPENREMOTE_HANDLE_TYPE;
typedef [context_handle] void* RPC_QUEUE_HANDLE;
typedef [context_handle] void* RPC_INT_XACT_HANDLE;

// opnum 0
void
Opnum0NotUsedOnWire (void);

// opnum 1
HRESULT
R_QMGetRemoteQueueName(
    [in]  handle_t                hBind,
    [in]  DWORD                   pQueue,
    [in, out, ptr, string]        WCHAR** lplpRemoteQueueName
    );

// opnum 2
HRESULT
R_QMOpenRemoteQueue(
    [in] handle_t                      hBind,
    [out] PCTX_OPENREMOTE_HANDLE_TYPE  *pphContext,
    [out] DWORD                        *pdwContext,

    [in, unique] QUEUE_FORMAT          *pQueueFormat,
    [in]  DWORD                        dwCallingProcessID,
    [in]  DWORD                        dwDesiredAccess,
    [in]  DWORD                        dwShareMode,
    [in]  GUID*                        pLicGuid,
    [in]  DWORD                        dwMQS,
    [out] DWORD                        *dwpQueue,
    [out] DWORD                        *phQueue
    );

// opnum 3
void
R_QMCloseRemoteQueueContext(
    [in, out] PCTX_OPENREMOTE_HANDLE_TYPE  *pphContext
    );

// opnum 4    
HRESULT
R_QMCreateRemoteCursor(
    [in]  handle_t                     hBind,
    [in]  struct CACTransferBufferV1 * ptb1,
    [in]  DWORD                        hQueue,
    [out] DWORD *                      phCursor
    );

// opnum 5
void
Opnum5NotUsedOnWire (void);

// opnum 6
HRESULT
R_QMCreateObjectInternal(
    [in] handle_t                   hBind,
    [in] DWORD                      dwObjectType,
    [in, string] const WCHAR*       lpwcsPathName,
    [in, range(0, 524288)] DWORD    SDSize,
    [in, unique, size_is (SDSize)]  
        unsigned char               *pSecurityDescriptor,
    [in, range(1, 128)] DWORD       cp,
    [in, size_is (cp)]  DWORD       aProp[],
    [in, size_is (cp)]  PROPVARIANT apVar[]
    );

// opnum 7
HRESULT
R_QMSetObjectSecurityInternal(
    [in] handle_t                  hBind,
    [in] struct OBJECT_FORMAT*     pObjectFormat,
    [in] DWORD                     SecurityInformation,
    [in, range(0, 524288)] DWORD   SDSize,
    [in, unique, size_is (SDSize)] 
        unsigned char              *pSecurityDescriptor);


// opnum 8
HRESULT
R_QMGetObjectSecurityInternal(
    [in] handle_t                           hBind,
    [in] struct OBJECT_FORMAT*              pObjectFormat,
    [in] DWORD                              RequestedInformation,
    [out, size_is (nLength)]  unsigned char *pSecurityDescriptor,
    [in, range(0, 524288)] DWORD            nLength,
    [out]  DWORD*                           lpnLengthNeeded
    );

// opnum 9
HRESULT
R_QMDeleteObject(
     [in] handle_t hBind,
     [in] struct OBJECT_FORMAT*  pObjectFormat
     );

// opnum 10
HRESULT
R_QMGetObjectProperties(
    [in] handle_t                        hBind,
    [in] struct OBJECT_FORMAT*           pObjectFormat,
    [in, range(1, 128)] DWORD            cp,
    [in, size_is (cp )]  DWORD           aProp[],
    [in, out, size_is(cp )]  PROPVARIANT apVar[]
    );


// opnum 11
HRESULT
R_QMSetObjectProperties(
    [in] handle_t                            hBind,
    [in] struct OBJECT_FORMAT*               pObjectFormat,
    [in, range(1, 128)] DWORD                cp,
    [in, unique, size_is (cp )]  DWORD      aProp[],
    [in, unique, size_is(cp )]  PROPVARIANT  apVar[]
    );

// opnum 12
HRESULT
R_QMObjectPathToObjectFormat(
    [in] handle_t hBind,
    [in, string] const WCHAR* lpwcsPathName,
    [in, out] struct OBJECT_FORMAT *pObjectFormat
    );

// opnum 13
void
Opnum13NotUsedOnWire (void);

// opnum 14
HRESULT
R_QMGetTmWhereabouts(
    [in]  handle_t                      hBind,
    [in, range(0, 131072)]  DWORD       cbBufSize,
    [out, size_is (cbBufSize)]          unsigned char* pbWhereabouts,
    [out] DWORD                         *pcbWhereabouts
    );

// opnum 15
HRESULT
R_QMEnlistTransaction(
    [in] handle_t                       hBind,
    [in] XACTUOW*                       pUow,
    [in, range(0, 131072)] DWORD        cbCookie,
    [in, size_is (cbCookie)]  unsigned char*    pbCookie 
    );

// opnum 16
HRESULT
R_QMEnlistInternalTransaction(
    [in]  handle_t hBind,
    [in]  XACTUOW* pUow,
    [out] RPC_INT_XACT_HANDLE* phIntXact
    );

// opnum 17
HRESULT
R_QMCommitTransaction(
    [in, out] RPC_INT_XACT_HANDLE* phIntXact
    );

// opnum 18
HRESULT
R_QMAbortTransaction(
    [in, out] RPC_INT_XACT_HANDLE* phIntXact
    );

// opnum 19
HRESULT
rpc_QMOpenQueueInternal(
    [in]  handle_t      hBind,

    [in]  QUEUE_FORMAT* pQueueFormat,
    [in]  DWORD         dwDesiredAccess,
    [in]  DWORD         dwShareMode,
    [in]  DWORD         hRemoteQueue,
    [in, out, ptr, string] WCHAR**  lplpRemoteQueueName,
    [in]  DWORD*            dwpQueue,
    [in]  GUID*             pLicGuid,
    [in, string] WCHAR*     lpClientName,
    [out] DWORD*            pdwQMContext,
    [out] RPC_QUEUE_HANDLE* phQueue,
    [in]  DWORD             dwRemoteProtocol,
    [in]  DWORD             dwpRemoteContext
    );

// opnum 20
HRESULT
rpc_ACCloseHandle(
    [in, out] RPC_QUEUE_HANDLE* phQueue
    );

// opnum 21
void
Opnum21NotUsedOnWire (void);

// opnum 22
HRESULT
rpc_ACCloseCursor(
    [in] RPC_QUEUE_HANDLE hQueue,
    [in] DWORD hCursor
    );

// opnum 23
HRESULT
rpc_ACSetCursorProperties(
    [in] RPC_QUEUE_HANDLE hProxy,
    [in] DWORD hCursor,
    [in] DWORD hRemoteCursor
    );


// opnum 24
void
Opnum24NotUsedOnWire (void);

// opnum 25
void
Opnum25NotUsedOnWire(void);


// opnum 26
HRESULT
rpc_ACHandleToFormatName(
    [in] RPC_QUEUE_HANDLE hQueue,
    [in, range(0, 524288)] DWORD dwFormatNameRPCBufferLen,
    [in, out, unique,
     size_is(dwFormatNameRPCBufferLen),
     length_is(dwFormatNameRPCBufferLen)] WCHAR* lpwcsFormatName,
    [in, out] DWORD* pdwLength
    );


// opnum 27
HRESULT
rpc_ACPurgeQueue(
    [in] RPC_QUEUE_HANDLE hQueue
    );

// opnum 28
HRESULT
R_QMQueryQMRegistryInternal(
    [in]  handle_t         hBind,
    [in]  DWORD            dwQueryType,
    [out, string] WCHAR**  lplpMQISServer
    );

// opnum 29
void
Opnum29NotUsedOnWire (void);

// opnum 30
void
Opnum30NotUsedOnWire (void);

// opnum 31
DWORD
R_QMGetRTQMServerPort(
      [in] handle_t hBind,
      [in] DWORD fIP
);

// opnum 32
void
Opnum32NotUsedOnWire (void);

// opnum 33
void
Opnum33NotUsedOnWire (void);

// opnum 34
void
Opnum34NotUsedOnWire(void);

}  // interface qmcomm

[
  uuid(76d12b80-3467-11d3-91ff-0090272f9ea3), 
  version(1.0),
  pointer_default(unique)
]
interface qmcomm2
{

// opnum 0
HRESULT
QMSendMessageInternalEx(
    [in] handle_t                     hBind,

    [in] QUEUE_FORMAT *               pQueueFormat,
    [in] struct CACTransferBufferV2 * ptb,
    [in, out, unique] OBJECTID *      pMessageID
    );


// opnum 1
HRESULT
rpc_ACSendMessageEx(
    [in] RPC_QUEUE_HANDLE             hQueue,
    [in] struct CACTransferBufferV2 * ptb,
    [in, out, unique] OBJECTID *      pMessageID
    );

// opnum 2
HRESULT
rpc_ACReceiveMessageEx(
    [in] handle_t                          hBind,
    [in] DWORD                             hQMContext,
    [in, out] struct CACTransferBufferV2 * ptb
    );

// opnum 3
HRESULT
rpc_ACCreateCursorEx(
    [in] RPC_QUEUE_HANDLE                    hQueue,
    [in, out] struct CACCreateRemoteCursor * pcc
    );

}  // interface qmcomm2

 
Show:
© 2014 Microsoft