📄 mqoa.odl
字号:
//
// 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 + -