⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mqoa.odl

📁 Windows CE 6.0 Server 源码
💻 ODL
📖 第 1 页 / 共 5 页
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft shared
// source or premium shared source license agreement under which you licensed
// this source code. If you did not accept the terms of the license agreement,
// you are not authorized to use this source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the SOURCE.RTF on your install media or the root of your tools installation.
// THE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//

//=--------------------------------------------------------------------------=
// mqoa.ODL
//=--------------------------------------------------------------------------=
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//=--------------------------------------------------------------------------=
//
// ODL file for the automation object(s) in this inproc server
//
//
#include "dispids.h"

//
// resource ids
//
#include "resrc1.h"

// can't include oaidl.h, so this will have to do
//
#define DISPID_NEWENUM -4

// This is our implementation dll
#define MQOADLL "mqoa.dll"

//=--------------------------------------------------------------------------=
// the libid for this type libray
//
[
    uuid(D7D6E071-DCCD-11d0-AA4B-0060970DEBAE),
    helpstring("Microsoft Message Queue Object Library"),
    helpstringdll(MQOADLL),
    lcid(0x0000),
    version(1.0)
]
library MSMQ {
    typedef short Boolean;

    // standard imports
    //
    importlib("STDOLE32.TLB");

#if 0
    // assumes that typelib is on path
    importlib("mqadminx.TLB");
#endif // 0

    typedef unsigned char BYTE;
    typedef unsigned long ULONG;
    typedef unsigned long DWORD;
    typedef int BOOL;


    // forwards defs

  	interface IMSMQQueueInfos;
    interface IMSMQQuery;
    interface IMSMQQueueInfo;
    interface IMSMQQueue;
    interface IMSMQMessage;
    interface IMSMQEvent;
#if 0 // these interfaces are not supported
    interface IMSMQTransaction;
    interface IMSMQCoordinatedTransactionDispenser;
    interface IMSMQTransactionDispenser;
#endif // 0

    // enums
    //
    // crypto stuff stolen from wincrypt.h
    // UNDONE: note that due to midl bug can't use shift operators
    //  in constant initializers so we use manifest constants.
    //
// ALG_ID crackers
#define GET_ALG_CLASS(x)                (x & (7 << 13))
#define GET_ALG_TYPE(x)                 (x & (15 << 9))
#define GET_ALG_SID(x)                  (x & (511))

// Algorithm classes
#define ALG_CLASS_ANY                   (0)
#define ALG_CLASS_SIGNATURE             (0x2000) // (1 << 13)
#define ALG_CLASS_MSG_ENCRYPT           (0x4000) // (2 << 13)
#define ALG_CLASS_DATA_ENCRYPT          (0x6000) // (3 << 13)
#define ALG_CLASS_HASH                  (0x8000) // (4 << 13)
#define ALG_CLASS_KEY_EXCHANGE          (0xA000) // (5 << 13)

// Algorithm types
#define ALG_TYPE_ANY                    (0)
#define ALG_TYPE_DSS                    (0x200) // (1 << 9)
#define ALG_TYPE_RSA                    (0x400) // (2 << 9)
#define ALG_TYPE_BLOCK                  (0x600) // (3 << 9)
#define ALG_TYPE_STREAM                 (0x800) // (4 << 9)

// Generic sub-ids
#define ALG_SID_ANY                     (0)

// Some RSA sub-ids
#define ALG_SID_RSA_ANY                 0
#define ALG_SID_RSA_PKCS                1
#define ALG_SID_RSA_MSATWORK            2
#define ALG_SID_RSA_ENTRUST             3
#define ALG_SID_RSA_PGP                 4

// Some DSS sub-ids
//
#define ALG_SID_DSS_ANY                 0
#define ALG_SID_DSS_PKCS                1
#define ALG_SID_DSS_DMS                 2

// Block cipher sub ids
// DES sub_ids
#define ALG_SID_DES                     1
#define ALG_SID_3DES                    3
#define ALG_SID_DESX                    4
#define ALG_SID_IDEA                    5
#define ALG_SID_CAST                    6
#define ALG_SID_SAFERSK64               7
#define ALD_SID_SAFERSK128              8

// KP_MODE
#define CRYPT_MODE_CBCI                 6       // ANSI CBC Interleaved
#define CRYPT_MODE_CFBP                 7       // ANSI CFB Pipelined
#define CRYPT_MODE_OFBP                 8       // ANSI OFB Pipelined
#define CRYPT_MODE_CBCOFM               9       // ANSI CBC + OF Masking
#define CRYPT_MODE_CBCOFMI              10      // ANSI CBC + OFM Interleaved

// RC2 sub-ids
#define ALG_SID_RC2                     2

// Stream cipher sub-ids
#define ALG_SID_RC4                     1
#define ALG_SID_SEAL                    2

// Hash sub ids
#define ALG_SID_MD2                     1
#define ALG_SID_MD4                     2
#define ALG_SID_MD5                     3
#define ALG_SID_SHA                     4
#define ALG_SID_MAC                     5
#define ALG_SID_RIPEMD                  6
#define ALG_SID_RIPEMD160               7
#define ALG_SID_SSL3SHAMD5              8

    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQCALG)]
#endif
    enum _MQCALG {
      MQMSG_CALG_MD2        = (ALG_CLASS_HASH + ALG_TYPE_ANY + ALG_SID_MD2),
      MQMSG_CALG_MD4        = (ALG_CLASS_HASH + ALG_TYPE_ANY + ALG_SID_MD4),
      MQMSG_CALG_MD5        = (ALG_CLASS_HASH + ALG_TYPE_ANY + ALG_SID_MD5),
      MQMSG_CALG_SHA        = (ALG_CLASS_HASH + ALG_TYPE_ANY + ALG_SID_SHA),
      MQMSG_CALG_MAC        = (ALG_CLASS_HASH + ALG_TYPE_ANY + ALG_SID_MAC),
      MQMSG_CALG_RSA_SIGN   = (ALG_CLASS_SIGNATURE + ALG_TYPE_RSA + ALG_SID_RSA_ANY),
      MQMSG_CALG_DSS_SIGN   = (ALG_CLASS_SIGNATURE + ALG_TYPE_DSS + ALG_SID_DSS_ANY),
      MQMSG_CALG_RSA_KEYX   = (ALG_CLASS_KEY_EXCHANGE+ALG_TYPE_RSA+ALG_SID_RSA_ANY),
      MQMSG_CALG_DES        = (ALG_CLASS_DATA_ENCRYPT+ALG_TYPE_BLOCK+ALG_SID_DES),
      MQMSG_CALG_RC2        = (ALG_CLASS_DATA_ENCRYPT+ALG_TYPE_BLOCK+ALG_SID_RC2),
      MQMSG_CALG_RC4        = (ALG_CLASS_DATA_ENCRYPT+ALG_TYPE_STREAM+ALG_SID_RC4),
      MQMSG_CALG_SEAL       = (ALG_CLASS_DATA_ENCRYPT+ALG_TYPE_STREAM+ALG_SID_SEAL)
    } MQCALG;

    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQTRANSACTION)]
#endif
    enum _MQTRANSACTION {
      MQ_NO_TRANSACTION             = 0,
      MQ_MTS_TRANSACTION            = 1,
      MQ_XA_TRANSACTION             = 2,
      MQ_SINGLE_MESSAGE             = 3
    } MQTRANSACTION;

    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_RELOPS)]
#endif
    enum _RELOPS {
      REL_NOP = 0,
      REL_EQ,
      REL_NEQ,
      REL_LT,
      REL_GT,
      REL_LE,
      REL_GE,
    } RELOPS;


    //
    // event/cursor related enums
    // 
    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQMSGCURSOR)]
#endif
    enum _MQMSGCURSOR {
	MQMSG_FIRST = 0,
	MQMSG_CURRENT = 1,
	MQMSG_NEXT = 2
    } MQMSGCURSOR;

    //
    // Message related enums
    //

    #define MQCLASS_CODE(s, r, code) ((s) + (r) + (code))
    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQMSGCLASS)]
#endif
    enum _MQMSGCLASS {
	MQMSG_CLASS_NORMAL                      = MQCLASS_CODE(0x0000, 0x0000, 0x00),
	MQMSG_CLASS_REPORT                      = MQCLASS_CODE(0x0000, 0x0000, 0x01),
	MQMSG_CLASS_ACK_REACH_QUEUE             = MQCLASS_CODE(0x0000, 0x0000, 0x02),

	MQMSG_CLASS_ACK_RECEIVE                 = MQCLASS_CODE(0x0000, 0x4000, 0x00),

	MQMSG_CLASS_NACK_BAD_DST_Q              = MQCLASS_CODE(0x8000, 0x0000, 0x00),
	MQMSG_CLASS_NACK_PURGED                 = MQCLASS_CODE(0x8000, 0x0000, 0x01),
	MQMSG_CLASS_NACK_REACH_QUEUE_TIMEOUT    = MQCLASS_CODE(0x8000, 0x0000, 0x02),
	MQMSG_CLASS_NACK_Q_EXCEED_QUOTA         = MQCLASS_CODE(0x8000, 0x0000, 0x03),
	MQMSG_CLASS_NACK_ACCESS_DENIED          = MQCLASS_CODE(0x8000, 0x0000, 0x04),
	MQMSG_CLASS_NACK_HOP_COUNT_EXCEEDED     = MQCLASS_CODE(0x8000, 0x0000, 0x05),
	MQMSG_CLASS_NACK_BAD_SIGNATURE          = MQCLASS_CODE(0x8000, 0x0000, 0x06),
	MQMSG_CLASS_NACK_BAD_ENCRYPTION         = MQCLASS_CODE(0x8000, 0x0000, 0x07),
	MQMSG_CLASS_NACK_COULD_NOT_ENCRYPT      = MQCLASS_CODE(0x8000, 0x0000, 0x08),
	MQMSG_CLASS_NACK_NOT_TRANSACTIONAL_Q    = MQCLASS_CODE(0x8000, 0x0000, 0x09),
	MQMSG_CLASS_NACK_NOT_TRANSACTIONAL_MSG  = MQCLASS_CODE(0x8000, 0x0000, 0x0A),

	MQMSG_CLASS_NACK_Q_DELETED              = MQCLASS_CODE(0x8000, 0x4000, 0x00),
	MQMSG_CLASS_NACK_Q_PURGED               = MQCLASS_CODE(0x8000, 0x4000, 0x01),
	MQMSG_CLASS_NACK_RECEIVE_TIMEOUT        = MQCLASS_CODE(0x8000, 0x4000, 0x02),

    } MQMSGCLASS;

#define DEF_MQMSG_DELIVERY_EXPRESS 0
#define DEF_MQMSG_DELIVERY_RECOVERABLE 1
    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQMSGDELIVERY)]
#endif
    enum _MQMSGDELIVERY {
	MQMSG_DELIVERY_EXPRESS              = DEF_MQMSG_DELIVERY_EXPRESS,
	MQMSG_DELIVERY_RECOVERABLE          = DEF_MQMSG_DELIVERY_RECOVERABLE
    } MQMSGDELIVERY;

#define DEF_MQMSG_ACKNOWLEDGMENT_NONE 0x00
    typedef
#if defined(MQOAHELP)
 	[helpstringcontext(IDS_MQMSGACKNOWLEDGEMENT)] 
#endif
    enum _MQMSGACKNOWLEDGEMENT {
	MQMSG_ACKNOWLEDGMENT_NONE           = DEF_MQMSG_ACKNOWLEDGMENT_NONE,
	MQMSG_ACKNOWLEDGMENT_POS_ARRIVAL    = 0x01,
	MQMSG_ACKNOWLEDGMENT_POS_RECEIVE    = 0x02,
	MQMSG_ACKNOWLEDGMENT_NEG_ARRIVAL    = 0x04,
	MQMSG_ACKNOWLEDGMENT_NEG_RECEIVE    = 0x08,

	MQMSG_ACKNOWLEDGMENT_NACK_REACH_QUEUE = 
	    /* MQMSG_ACKNOWLEDGMENT_NEG_ARRIVAL */ 0x04,

	MQMSG_ACKNOWLEDGMENT_FULL_REACH_QUEUE =
	    /* MQMSG_ACKNOWLEDGMENT_NEG_ARRIVAL */ 0x04 +
	    /* MQMSG_ACKNOWLEDGMENT_POS_ARRIVAL */ 0x01,

	MQMSG_ACKNOWLEDGMENT_NACK_RECEIVE =
	    /* MQMSG_ACKNOWLEDGMENT_NEG_ARRIVAL */ 0x04 +
	    /* MQMSG_ACKNOWLEDGMENT_NEG_RECEIVE */ 0x08,

	MQMSG_ACKNOWLEDGMENT_FULL_RECEIVE =
	    /* MQMSG_ACKNOWLEDGMENT_NEG_ARRIVAL */ 0x04 +
	    /* MQMSG_ACKNOWLEDGMENT_NEG_RECEIVE */ 0x08 +
	    /* MQMSG_ACKNOWLEDGMENT_POS_RECEIVE */ 0x02
    } MQMSGACKNOWLEDGEMENT;

#define DEF_MQMSG_JOURNAL_NONE 0
    typedef
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQMSGJOURNAL)] 
#endif
    enum _MQMSGJOURNAL {
      MQMSG_JOURNAL_NONE = DEF_MQMSG_JOURNAL_NONE,
      MQMSG_DEADLETTER = 1,
      MQMSG_JOURNAL = 2
    } MQMSGJOURNAL;

    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQMSGTRACE)] 
#endif
    enum _MQMSGTRACE {
      MQMSG_TRACE_NONE = 0,
      MQMSG_SEND_ROUTE_TO_REPORT_QUEUE = 1
    } MQMSGTRACE;

#define DEF_MQMSG_SENDERID_TYPE_SID 1
    typedef
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQMSGSENDERIDTYPE)] 
#endif
    enum _MQMSGSENDERIDTYPE {
      MQMSG_SENDERID_TYPE_NONE = 0,
      MQMSG_SENDERID_TYPE_SID = 1
    } MQMSGSENDERIDTYPE;

#define DEF_MQMSG_PRIV_LEVEL_NONE 0
    typedef 
#if defined(MQOAHELP)
	[helpstringcontext(IDS_MQMSGPRIVLEVEL)] 
#endif
	enum _MQMSGPRIVLEVEL {
      MQMSG_PRIV_LEVEL_NONE        = DEF_MQMSG_PRIV_LEVEL_NONE,
      MQMSG_PRIV_LEVEL_BODY        = 1
    } MQMSGPRIVLEVEL;

#define DEF_MQMSG_AUTH_LEVEL_NONE 0
    typedef 
#if defined(MQOAHELP)
	[helpstringcontext(IDS_MQMSGAUTHLEVEL)] 
#endif
	enum _MQMSGAUTHLEVEL {
      MQMSG_AUTH_LEVEL_NONE = DEF_MQMSG_AUTH_LEVEL_NONE,
      MQMSG_AUTH_LEVEL_ALWAYS = 1
    } MQMSGAUTHLEVEL;

    typedef 
#if defined(MQOAHELP)
	[helpstringcontext(IDS_MQMSGIDSIZE)] 
#endif
	enum _MQMSGIDSIZE {
      MQMSG_MSGID_SIZE         = 20,
      MQMSG_CORRELATIONID_SIZE = 20
    } MQMSGIDSIZE;

    typedef 
#if defined(MQOAHELP)
	[helpstringcontext(IDS_MQMSGMAX)] 
#endif
	enum _MQMSGMAX {
      MQ_MAX_MSG_LABEL_LEN   = 249,
    } MQMSGMAX;

    //
    // Queue related enums
    //
    typedef 
#if defined(MQOAHELP)
	[helpstringcontext(IDS_MQSHARE)] 
#endif
	enum _MQSHARE {
	    MQ_DENY_NONE = 0,
	    MQ_DENY_RECEIVE_SHARE = 1
    } MQSHARE;

    typedef 
#if defined(MQOAHELP)
	[helpstringcontext(IDS_MQACCESS)] 
#endif
	enum _MQACCESS {
      MQ_RECEIVE_ACCESS = 1,
      MQ_SEND_ACCESS = 2,
      MQ_PEEK_ACCESS = 0x20
    } MQACCESS;

#define DEF_MQ_JOURNAL_NONE 0
    typedef 
#if defined(MQOAHELP)
	[helpstringcontext(IDS_MQJOURNAL)] 
#endif
	enum _MQJOURNAL {
      MQ_JOURNAL_NONE = DEF_MQ_JOURNAL_NONE,
      MQ_JOURNAL = 1
    } MQJOURNAL;

#define DEF_MQ_TRANSACTIONAL_NONE 0
    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQTRANSACTIONAL)] 
#endif
    enum _MQTRANSACTIONAL {
      MQ_TRANSACTIONAL_NONE = DEF_MQ_TRANSACTIONAL_NONE,
      MQ_TRANSACTIONAL = 1
    } MQTRANSACTIONAL;

#define DEF_MQ_AUTHENTICATE_NONE 0
    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQAUTHENTICATE)] 
#endif
    enum _MQAUTHENTICATE {
      MQ_AUTHENTICATE_NONE = DEF_MQ_AUTHENTICATE_NONE,
      MQ_AUTHENTICATE = 1
    } MQAUTHENTICATE;

#define DEF_MQ_PRIV_LEVEL_OPTIONAL 1
    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQPRIVLEVEL)] 
#endif
    enum _MQPRIVLEVEL {
      MQ_PRIV_LEVEL_NONE        = 0,
      MQ_PRIV_LEVEL_OPTIONAL    = DEF_MQ_PRIV_LEVEL_OPTIONAL,
      MQ_PRIV_LEVEL_BODY        = 2
    } MQPRIVLEVEL;

    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQPRIORITY)] 
#endif
    enum _MQPRIORITY {
      MQ_MIN_PRIORITY = 0,
      MQ_MAX_PRIORITY = 7
    } MQPRIORITY;

    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQMAX)] 
#endif
    enum _MQMAX {
      MQ_MAX_Q_NAME_LEN      = 124,
      MQ_MAX_Q_LABEL_LEN     = 124
    } MQMAX;


    //
    // default property values
    //
// ((MQ_MAX_PRIORITY + MQ_MIN_PRIORITY) >> 1)
#define DEF_DEFAULT_M_PRIORITY 3
    typedef 
#if defined(MQOAHELP)
    [helpstringcontext(IDS_MQDEFAULT)]
#endif
    enum _MQDEFAULT {
      DEFAULT_M_PRIORITY      = DEF_DEFAULT_M_PRIORITY,
      DEFAULT_M_DELIVERY      = DEF_MQMSG_DELIVERY_EXPRESS,
      DEFAULT_M_ACKNOWLEDGE   = DEF_MQMSG_ACKNOWLEDGMENT_NONE,
      DEFAULT_M_JOURNAL       = DEF_MQMSG_JOURNAL_NONE,
      DEFAULT_M_APPSPECIFIC   = 0,
      DEFAULT_M_PRIV_LEVEL    = DEF_MQMSG_PRIV_LEVEL_NONE,
      DEFAULT_M_AUTH_LEVEL    = DEF_MQMSG_AUTH_LEVEL_NONE,
      DEFAULT_M_SENDERID_TYPE = DEF_MQMSG_SENDERID_TYPE_SID,
      DEFAULT_Q_JOURNAL       = DEF_MQ_JOURNAL_NONE,
      DEFAULT_Q_BASEPRIORITY  = 0,
      DEFAULT_Q_QUOTA         = 0xFFFFFFFF,
      DEFAULT_Q_JOURNAL_QUOTA = 0xFFFFFFFF,
      DEFAULT_Q_TRANSACTION   = DEF_MQ_TRANSACTIONAL_NONE,
      DEFAULT_Q_AUTHENTICATE  = DEF_MQ_AUTHENTICATE_NONE,
      DEFAULT_Q_PRIV_LEVEL    = DEF_MQ_PRIV_LEVEL_OPTIONAL
    } MQDEFAULT;

    //
    // Security related enums
    //

    //
    // some required NT stuff
    //
#define DELETE                           (0x00010000)
#define READ_CONTROL                     (0x00020000)
#define WRITE_DAC                        (0x00040000)
#define WRITE_OWNER                      (0x00080000)
#define SYNCHRONIZE                      (0x00100000)
//
// Queue security flags
//
#if 0
    typedef [helpstringcontext(1)] enum _MQSECFLAGS {
      MQSEC_DELETE_MESSAGE                = 0x1,
      MQSEC_PEEK_MESSAGE                  = 0x2,
      MQSEC_WRITE_MESSAGE                 = 0x4,
      MQSEC_DELETE_JOURNAL_MESSAGE        = 0x8,
      MQSEC_SET_QUEUE_PROPERTIES          = 0x10,
      MQSEC_GET_QUEUE_PROPERTIES          = 0x20,
      MQSEC_DELETE_QUEUE                  = DELETE,
      MQSEC_GET_QUEUE_PERMISSIONS         = READ_CONTROL,
      MQSEC_CHANGE_QUEUE_PERMISSIONS      = WRITE_DAC,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -