6 Appendix A: Full IDL
For ease of implementation, the full IDL is provided in this section, where "ms-dtyp.idl" is the IDL as specified in [MS-DTYP] Appendix A, and "ms-mqmq.idl" is the IDL as specified in [MS-MQMQ] Appendix A.
-
import "ms-dtyp.idl"; import "ms-mqmq.idl"; [ uuid(1a9134dd-7b39-45ba-ad88-44d01ca47f28), version(1.0), pointer_default(unique) ] interface RemoteRead { typedef [context_handle] void* QUEUE_CONTEXT_HANDLE_NOSERIALIZE; typedef [context_handle] QUEUE_CONTEXT_HANDLE_NOSERIALIZE QUEUE_CONTEXT_HANDLE_SERIALIZE; typedef enum { stFullPacket = 0, stBinaryFirstSection = 1, stBinarySecondSection = 2, stSrmpFirstSection = 3, stSrmpSecondSection = 4 } SectionType; typedef struct _SectionBuffer { SectionType SectionBufferType; DWORD SectionSizeAlloc; DWORD SectionSize; [unique, size_is(SectionSize)] byte* pSectionBuffer; } SectionBuffer; DWORD R_GetServerPort( [in] handle_t hBind ); void Opnum1NotUsedOnWire(void); void R_OpenQueue( [in] handle_t hBind, [in] QUEUE_FORMAT* pQueueFormat, [in] DWORD dwAccess, [in] DWORD dwShareMode, [in] GUID* pClientId, [in] LONG fNonRoutingServer, [in] unsigned char Major, [in] unsigned char Minor, [in] USHORT BuildNumber, [in] LONG fWorkgroup, [out] QUEUE_CONTEXT_HANDLE_SERIALIZE* pphContext ); HRESULT R_CloseQueue( [in] handle_t hBind, [in, out] QUEUE_CONTEXT_HANDLE_SERIALIZE* pphContext ); HRESULT R_CreateCursor( [in] handle_t hBind, [in] QUEUE_CONTEXT_HANDLE_NOSERIALIZE phContext, [out] DWORD* phCursor ); HRESULT R_CloseCursor( [in] handle_t hBind, [in] QUEUE_CONTEXT_HANDLE_NOSERIALIZE phContext, [in] DWORD hCursor ); HRESULT R_PurgeQueue( [in] handle_t hBind, [in] QUEUE_CONTEXT_HANDLE_NOSERIALIZE phContext ); HRESULT R_StartReceive( [in] handle_t hBind, [in] QUEUE_CONTEXT_HANDLE_NOSERIALIZE phContext, [in] ULONGLONG LookupId, [in] DWORD hCursor, [in] DWORD ulAction, [in] DWORD ulTimeout, [in] DWORD dwRequestId, [in] DWORD dwMaxBodySize, [in] DWORD dwMaxCompoundMessageSize, [out] DWORD* pdwArriveTime, [out] ULONGLONG* pSequenceId, [out] DWORD* pdwNumberOfSections, [out, size_is(, *pdwNumberOfSections)] SectionBuffer** ppPacketSections ); HRESULT R_CancelReceive( [in] handle_t hBind, [in] QUEUE_CONTEXT_HANDLE_NOSERIALIZE phContext, [in] DWORD dwRequestId ); HRESULT R_EndReceive( [in] handle_t hBind, [in] QUEUE_CONTEXT_HANDLE_NOSERIALIZE phContext, [in, range(1,2)] DWORD dwAck, [in] DWORD dwRequestId ); HRESULT R_MoveMessage( [in] handle_t hBind, [in] QUEUE_CONTEXT_HANDLE_NOSERIALIZE phContextFrom, [in] ULONGLONG ullContextTo, [in] ULONGLONG LookupId, [in] XACTUOW *pTransactionId ); void R_OpenQueueForMove( [in] handle_t hBind, [in] QUEUE_FORMAT* pQueueFormat, [in] DWORD dwAccess, [in] DWORD dwShareMode, [in] GUID* pClientId, [in] LONG fNonRoutingServer, [in] unsigned char Major, [in] unsigned char Minor, [in] USHORT BuildNumber, [in] LONG fWorkgroup, [out] ULONGLONG *pMoveContext, [out] QUEUE_CONTEXT_HANDLE_SERIALIZE* pphContext ); HRESULT R_QMEnlistRemoteTransaction( [in] handle_t hBind, [in] XACTUOW* pTransactionId, [in, range(0, 131072)] DWORD cbPropagationToken, [in, size_is (cbPropagationToken)] unsigned char* pbPropagationToken, [in] QUEUE_FORMAT* pQueueFormat ); HRESULT R_StartTransactionalReceive( [in] handle_t hBind, [in] QUEUE_CONTEXT_HANDLE_NOSERIALIZE phContext, [in] ULONGLONG LookupId, [in] DWORD hCursor, [in] DWORD ulAction, [in] DWORD ulTimeout, [in] DWORD dwRequestId, [in] DWORD dwMaxBodySize, [in] DWORD dwMaxCompoundMessageSize, [in] XACTUOW* pTransactionId, [out] DWORD* pdwArriveTime, [out] ULONGLONG* pSequenceId, [out] DWORD* pdwNumberOfSections, [out, size_is(, *pdwNumberOfSections)] SectionBuffer** ppPacketSections ); HRESULT R_SetUserAcknowledgementClass( [in] handle_t hBind, [in] QUEUE_CONTEXT_HANDLE_NOSERIALIZE phContext, [in] ULONGLONG LookupId, [in] USHORT usClass ); HRESULT R_EndTransactionalReceive( [in] handle_t hBind, [in] QUEUE_CONTEXT_HANDLE_NOSERIALIZE phContext, [in, range(1,2)] DWORD dwAck, [in] DWORD dwRequestId ); }