📄 edkmdb.h
字号:
/*------------------------------------------------------------------------
*
* Gateway "MTE" ENVELOPE properties
*
* Id Range: 0x66E0-0x66FF
*
*-----------------------------------------------------------------------*/
#define PR_ORIGINATOR_NAME PROP_TAG( PT_TSTRING, pidMessageWriteableMin+0x3)
#define PR_ORIGINATOR_ADDR PROP_TAG( PT_TSTRING, pidMessageWriteableMin+0x4)
#define PR_ORIGINATOR_ADDRTYPE PROP_TAG( PT_TSTRING, pidMessageWriteableMin+0x5)
#define PR_ORIGINATOR_ENTRYID PROP_TAG( PT_BINARY, pidMessageWriteableMin+0x6)
#define PR_ARRIVAL_TIME PROP_TAG( PT_SYSTIME, pidMessageWriteableMin+0x7)
#define PR_TRACE_INFO PROP_TAG( PT_BINARY, pidMessageWriteableMin+0x8)
#define PR_INTERNAL_TRACE_INFO PROP_TAG( PT_BINARY, pidMessageWriteableMin+0x12)
#define PR_SUBJECT_TRACE_INFO PROP_TAG( PT_BINARY, pidMessageWriteableMin+0x9)
#define PR_RECIPIENT_NUMBER PROP_TAG( PT_LONG, pidMessageWriteableMin+0xA)
#define PR_MTS_SUBJECT_ID PROP_TAG(PT_BINARY, pidMessageWriteableMin+0xB)
#define PR_REPORT_DESTINATION_NAME PROP_TAG(PT_TSTRING, pidMessageWriteableMin+0xC)
#define PR_REPORT_DESTINATION_ENTRYID PROP_TAG(PT_BINARY, pidMessageWriteableMin+0xD)
#define PR_CONTENT_SEARCH_KEY PROP_TAG(PT_BINARY, pidMessageWriteableMin+0xE)
#define PR_FOREIGN_ID PROP_TAG(PT_BINARY, pidMessageWriteableMin+0xF)
#define PR_FOREIGN_REPORT_ID PROP_TAG(PT_BINARY, pidMessageWriteableMin+0x10)
#define PR_FOREIGN_SUBJECT_ID PROP_TAG(PT_BINARY, pidMessageWriteableMin+0x11)
#define PR_MTS_ID PR_MESSAGE_SUBMISSION_ID
#define PR_MTS_REPORT_ID PR_MESSAGE_SUBMISSION_ID
/*------------------------------------------------------------------------
*
* Trace properties format
* PR_TRACE_INFO
* PR_INTERNAL_TRACE_INFO
*
*-----------------------------------------------------------------------*/
#define MAX_ADMD_NAME_SIZ 17
#define MAX_PRMD_NAME_SIZ 17
#define MAX_COUNTRY_NAME_SIZ 4
#define MAX_MTA_NAME_SIZ 33
#define ADMN_PAD 3
#define PRMD_PAD 3
#define COUNTRY_PAD 0
#define MTA_PAD 3
typedef struct {
LONG lAction; // The routing action the tracing site
// took.
FILETIME ftArrivalTime; // The time at which the communique
// entered the tracing site.
FILETIME ftDeferredTime; // The time are which the tracing site
// released the message.
char rgchADMDName[MAX_ADMD_NAME_SIZ+ADMN_PAD]; // ADMD
char rgchCountryName[MAX_COUNTRY_NAME_SIZ+COUNTRY_PAD]; // Country
char rgchPRMDId[MAX_PRMD_NAME_SIZ+PRMD_PAD]; // PRMD
char rgchAttADMDName[MAX_ADMD_NAME_SIZ+ADMN_PAD]; // Attempted ADMD
char rgchAttCountryName[MAX_COUNTRY_NAME_SIZ+COUNTRY_PAD]; // Attempted Country
char rgchAttPRMDId[MAX_PRMD_NAME_SIZ+PRMD_PAD]; // Attempted PRMD
} TRACEENTRY, FAR * LPTRACEENTRY;
typedef struct {
ULONG cEntries; // Number of trace entries
TRACEENTRY rgtraceentry[MAPI_DIM]; // array of trace entries
} TRACEINFO, FAR * LPTRACEINFO;
typedef struct
{
LONG lAction; // The routing action the tracing domain took.
FILETIME ftArrivalTime; // The time at which the communique entered the tracing domain.
FILETIME ftDeferredTime; // The time are which the tracing domain released the message.
char rgchADMDName[MAX_ADMD_NAME_SIZ+ADMN_PAD]; // ADMD
char rgchCountryName[MAX_COUNTRY_NAME_SIZ+COUNTRY_PAD]; // Country
char rgchPRMDId[MAX_PRMD_NAME_SIZ+PRMD_PAD]; // PRMD
char rgchAttADMDName[MAX_ADMD_NAME_SIZ+ADMN_PAD]; // Attempted ADMD
char rgchAttCountryName[MAX_COUNTRY_NAME_SIZ+COUNTRY_PAD]; // Attempted Country
char rgchAttPRMDId[MAX_PRMD_NAME_SIZ+PRMD_PAD]; // Attempted PRMD
char rgchMTAName[MAX_MTA_NAME_SIZ+MTA_PAD]; // MTA Name
char rgchAttMTAName[MAX_MTA_NAME_SIZ+MTA_PAD]; // Attempted MTA Name
}INTTRACEENTRY, *PINTTRACEENTRY;
typedef struct
{
ULONG cEntries; // Number of trace entries
INTTRACEENTRY rgIntTraceEntry[MAPI_DIM]; // array of internal trace entries
}INTTRACEINFO, *PINTTRACEINFO;
/*------------------------------------------------------------------------
*
* "IExchangeModifyTable" Interface Declaration
*
* Used for get/set rules and access control on folders.
*
*-----------------------------------------------------------------------*/
/* ulRowFlags */
#define ROWLIST_REPLACE ((ULONG)1)
#define ROW_ADD ((ULONG)1)
#define ROW_MODIFY ((ULONG)2)
#define ROW_REMOVE ((ULONG)4)
#define ROW_EMPTY (ROW_ADD|ROW_REMOVE)
typedef struct _ROWENTRY
{
ULONG ulRowFlags;
ULONG cValues;
LPSPropValue rgPropVals;
} ROWENTRY, FAR * LPROWENTRY;
typedef struct _ROWLIST
{
ULONG cEntries;
ROWENTRY aEntries[MAPI_DIM];
} ROWLIST, FAR * LPROWLIST;
#define EXCHANGE_IEXCHANGEMODIFYTABLE_METHODS(IPURE) \
MAPIMETHOD(GetLastError) \
(THIS_ HRESULT hResult, \
ULONG ulFlags, \
LPMAPIERROR FAR * lppMAPIError) IPURE; \
MAPIMETHOD(GetTable) \
(THIS_ ULONG ulFlags, \
LPMAPITABLE FAR * lppTable) IPURE; \
MAPIMETHOD(ModifyTable) \
(THIS_ ULONG ulFlags, \
LPROWLIST lpMods) IPURE;
#undef INTERFACE
#define INTERFACE IExchangeModifyTable
DECLARE_MAPI_INTERFACE_(IExchangeModifyTable, IUnknown)
{
MAPI_IUNKNOWN_METHODS(PURE)
EXCHANGE_IEXCHANGEMODIFYTABLE_METHODS(PURE)
};
#undef IMPL
#define IMPL
DECLARE_MAPI_INTERFACE_PTR(IExchangeModifyTable, LPEXCHANGEMODIFYTABLE);
/* Access Control Specifics */
//Properties
#define PR_MEMBER_ID PROP_TAG( PT_I8, pidSpecialMin+0x01)
#define PR_MEMBER_NAME PROP_TAG( PT_TSTRING, pidSpecialMin+0x02)
#define PR_MEMBER_ENTRYID PR_ENTRYID
#define PR_MEMBER_RIGHTS PROP_TAG( PT_LONG, pidSpecialMin+0x03)
//Security bits
typedef DWORD RIGHTS;
#define frightsReadAny 0x0000001L
#define frightsCreate 0x0000002L
#define frightsEditOwned 0x0000008L
#define frightsDeleteOwned 0x0000010L
#define frightsEditAny 0x0000020L
#define frightsDeleteAny 0x0000040L
#define frightsCreateSubfolder 0x0000080L
#define frightsOwner 0x0000100L
#define frightsContact 0x0000200L // NOTE: not part of rightsAll
#define rightsNone 0x00000000
#define rightsReadOnly frightsReadAny
#define rightsReadWrite (frightsReadAny|frightsEditAny)
#define rightsAll 0x00001FBL
/* Rules specifics */
//Property types
#define PT_SRESTRICTION ((ULONG) 0x00FD)
#define PT_ACTIONS ((ULONG) 0x00FE)
//Properties in rule table
#define PR_RULE_ID PROP_TAG( PT_I8, pidSpecialMin+0x04)
#define PR_RULE_IDS PROP_TAG( PT_BINARY, pidSpecialMin+0x05)
#define PR_RULE_SEQUENCE PROP_TAG( PT_LONG, pidSpecialMin+0x06)
#define PR_RULE_STATE PROP_TAG( PT_LONG, pidSpecialMin+0x07)
#define PR_RULE_USER_FLAGS PROP_TAG( PT_LONG, pidSpecialMin+0x08)
#define PR_RULE_CONDITION PROP_TAG( PT_SRESTRICTION, pidSpecialMin+0x09)
#define PR_RULE_ACTIONS PROP_TAG( PT_ACTIONS, pidSpecialMin+0x10)
#define PR_RULE_PROVIDER PROP_TAG( PT_STRING8, pidSpecialMin+0x11)
#define PR_RULE_NAME PROP_TAG( PT_TSTRING, pidSpecialMin+0x12)
#define PR_RULE_LEVEL PROP_TAG( PT_LONG, pidSpecialMin+0x13)
#define PR_RULE_PROVIDER_DATA PROP_TAG( PT_BINARY, pidSpecialMin+0x14)
//PR_STATE property values
#define ST_DISABLED 0x0000
#define ST_ENABLED 0x0001
#define ST_ERROR 0x0002
#define ST_ONLY_WHEN_OOF 0x0004
#define ST_KEEP_OOF_HIST 0x0008
#define ST_EXIT_LEVEL 0x0010
#define ST_CLEAR_OOF_HIST 0x80000000
//Empty restriction
#define NULL_RESTRICTION 0xff
// special RELOP for Member of DL
#define RELOP_MEMBER_OF_DL 100
//Action types
typedef enum
{
OP_MOVE = 1,
OP_COPY,
OP_REPLY,
OP_OOF_REPLY,
OP_DEFER_ACTION,
OP_BOUNCE,
OP_FORWARD,
OP_DELEGATE,
OP_TAG,
OP_DELETE,
OP_MARK_AS_READ
} ACTTYPE;
// action flavors
// for OP_REPLY
#define DO_NOT_SEND_TO_ORIGINATOR 1
//scBounceCode values
#define BOUNCE_MESSAGE_SIZE_TOO_LARGE (SCODE) MAPI_DIAG_LENGTH_CONSTRAINT_VIOLATD
#define BOUNCE_FORMS_MISMATCH (SCODE) MAPI_DIAG_RENDITION_UNSUPPORTED
#define BOUNCE_ACCESS_DENIED (SCODE) MAPI_DIAG_MAIL_REFUSED
//Message class prefix for Reply and OOF Reply templates
#define szReplyTemplateMsgClassPrefix "IPM.Note.Rules.ReplyTemplate."
#define szOofTemplateMsgClassPrefix "IPM.Note.Rules.OofTemplate."
//Action structure
typedef struct _action
{
ACTTYPE acttype;
// to indicate which flavour of the action.
ULONG ulActionFlavor;
// Action restriction
// currently unsed and must be set to NULL
LPSRestriction lpRes;
// currently unused, must be set to 0.
LPSPropTagArray lpPropTagArray;
// User defined flags
ULONG ulFlags;
// padding to align the union on 8 byte boundary
ULONG dwAlignPad;
union
{
// used for OP_MOVE and OP_COPY actions
struct
{
ULONG cbStoreEntryId;
LPENTRYID lpStoreEntryId;
ULONG cbFldEntryId;
LPENTRYID lpFldEntryId;
} actMoveCopy;
// used for OP_REPLY and OP_OOF_REPLY actions
struct
{
ULONG cbEntryId;
LPENTRYID lpEntryId;
GUID guidReplyTemplate;
} actReply;
// used for OP_DEFER_ACTION action
struct
{
ULONG cbData;
BYTE *pbData;
} actDeferAction;
// Error code to set for OP_BOUNCE action
SCODE scBounceCode;
// list of address for OP_FORWARD and OP_DELEGATE action
LPADRLIST lpadrlist;
// prop value for OP_TAG action
SPropValue propTag;
};
} ACTION, FAR * LPACTION;
// Rules version
#define EDK_RULES_VERSION 1
//Array of actions
typedef struct _actions
{
ULONG ulVersion; // use the #define above
UINT cActions;
LPACTION lpAction;
} ACTIONS;
// message class definitions for Deferred Action and Deffered Error messages
#define szDamMsgClass "IPC.Microsoft Exchange 4.0.Deferred Action"
#define szDemMsgClass "IPC.Microsoft Exchange 4.0.Deferred Error"
/*
* Rule error codes
* Values for PR_RULE_ERROR
*/
#define RULE_ERR_UNKNOWN 1 //general catchall error
#define RULE_ERR_LOAD 2 //unable to load folder rules
#define RULE_ERR_DELIVERY 3 //unable to deliver message temporarily
#define RULE_ERR_PARSING 4 //error while parsing
#define RULE_ERR_CREATE_DAE 5 //error creating DAE message
#define RULE_ERR_NO_FOLDER 6 //folder to move/copy doesn't exist
#define RULE_ERR_NO_RIGHTS 7 //no rights to move/copy into folder
#define RULE_ERR_CREATE_DAM 8 //error creating DAM
#define RULE_ERR_NO_SENDAS 9 //can not send as another user
#define RULE_ERR_NO_TEMPLATE 10 //reply template is missing
#define RULE_ERR_EXECUTION 11 //error in rule execution
#define RULE_ERR_QUOTA_EXCEEDED 12
#define RULE_ERR_FIRST RULE_ERR_UNKNOWN
#define RULE_ERR_LAST RULE_ERR_QUOTA_EXCEEDED
/*------------------------------------------------------------------------
*
* "IExchangeRuleAction" Interface Declaration
*
* Used for get actions from a Deferred Action Message.
*
*-----------------------------------------------------------------------*/
#define EXCHANGE_IEXCHANGERULEACTION_METHODS(IPURE) \
MAPIMETHOD(ActionCount) \
(THIS_ ULONG FAR * lpcActions) IPURE; \
MAPIMETHOD(GetAction) \
(THIS_ ULONG ulActionNumber, \
LARGE_INTEGER * lpruleid, \
LPACTION FAR * lppAction) IPURE;
#undef INTERFACE
#define INTERFACE IExchangeRuleAction
DECLARE_MAPI_INTERFACE_(IExchangeRuleAction, IUnknown)
{
MAPI_IUNKNOWN_METHODS(PURE)
EXCHANGE_IEXCHANGERULEACTION_METHODS(PURE)
};
#undef IMPL
#define IMPL
DECLARE_MAPI_INTERFACE_PTR(IExchangeRuleAction, LPEXCHANGERULEACTION);
/*------------------------------------------------------------------------
*
* "IExchangeManageStore" Interface Declaration
*
* Used for store management functions.
*
*-----------------------------------------------------------------------*/
#define EXCHANGE_IEXCHANGEMANAGESTORE_METHODS(IPURE) \
MAPIMETHOD(CreateStoreEntryID) \
(THIS_ LPSTR lpszMsgStoreDN, \
LPSTR lpszMailboxDN, \
ULONG ulFlags, \
ULONG FAR * lpcbEntryID, \
LPENTRYID FAR * lppEntryID) IPURE; \
MAPIMETHOD(EntryIDFromSourceKey) \
(THIS_ ULONG cFolderKeySize, \
BYTE FAR * lpFolderSourceKey, \
ULONG cMessageKeySize, \
BYTE FAR * lpMessageSourceKey, \
ULONG FAR * lpcbEntryID, \
LPENTRYID FAR * lppEntryID) IPURE; \
MAPIMETHOD(GetRights) \
(THIS_ ULONG cbUserEntryID, \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -