892 lines
28 KiB
C
892 lines
28 KiB
C
/*
|
|
* Copyright (C) 1998 Justin Bradford
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef MAPIDEFS_H
|
|
#define MAPIDEFS_H
|
|
|
|
#ifndef __WINESRC__
|
|
# include <windows.h>
|
|
#endif
|
|
|
|
#include <winerror.h>
|
|
#ifndef _OBJBASE_H_
|
|
#include <objbase.h>
|
|
#endif
|
|
|
|
/* Some types from other headers */
|
|
#ifndef __LHANDLE
|
|
#define __LHANDLE
|
|
typedef ULONG_PTR LHANDLE, *LPLHANDLE;
|
|
#endif
|
|
|
|
#ifndef _tagCY_DEFINED
|
|
#define _tagCY_DEFINED
|
|
typedef union tagCY
|
|
{
|
|
struct
|
|
{
|
|
#ifdef WORDS_BIGENDIAN
|
|
LONG Hi;
|
|
ULONG Lo;
|
|
#else
|
|
ULONG Lo;
|
|
LONG Hi;
|
|
#endif
|
|
} DUMMYSTRUCTNAME;
|
|
LONGLONG int64;
|
|
} CY;
|
|
typedef CY CURRENCY;
|
|
#endif /* _tagCY_DEFINED */
|
|
|
|
|
|
#ifndef _FILETIME_
|
|
#define _FILETIME_
|
|
typedef struct _FILETIME
|
|
{
|
|
DWORD dwLowDateTime;
|
|
DWORD dwHighDateTime;
|
|
} FILETIME, *PFILETIME, *LPFILETIME;
|
|
#endif
|
|
|
|
/* Memory allocation routines */
|
|
typedef SCODE (WINAPI ALLOCATEBUFFER)(ULONG,LPVOID*);
|
|
typedef SCODE (WINAPI ALLOCATEMORE)(ULONG,LPVOID,LPVOID*);
|
|
typedef ULONG (WINAPI FREEBUFFER)(LPVOID);
|
|
|
|
typedef ALLOCATEBUFFER *LPALLOCATEBUFFER;
|
|
typedef ALLOCATEMORE *LPALLOCATEMORE;
|
|
typedef FREEBUFFER *LPFREEBUFFER;
|
|
|
|
/* MAPI exposed interfaces */
|
|
typedef const IID *LPCIID;
|
|
|
|
typedef struct IAddrBook IAddrBook;
|
|
typedef IAddrBook *LPADRBOOK;
|
|
typedef struct IABContainer IABContainer;
|
|
typedef IABContainer *LPABCONT;
|
|
typedef struct IAttach IAttach;
|
|
typedef IAttach *LPATTACH;
|
|
typedef struct IDistList IDistList;
|
|
typedef IDistList *LPDISTLIST;
|
|
typedef struct IMailUser IMailUser;
|
|
typedef IMailUser *LPMAILUSER;
|
|
typedef struct IMAPIAdviseSink IMAPIAdviseSink;
|
|
typedef IMAPIAdviseSink *LPMAPIADVISESINK;
|
|
typedef struct IMAPIContainer IMAPIContainer;
|
|
typedef IMAPIContainer *LPMAPICONTAINER;
|
|
typedef struct IMAPIFolder IMAPIFolder;
|
|
typedef IMAPIFolder *LPMAPIFOLDER;
|
|
typedef struct IMAPIProgress IMAPIProgress;
|
|
typedef IMAPIProgress *LPMAPIPROGRESS;
|
|
typedef struct IMAPIProp IMAPIProp;
|
|
typedef IMAPIProp *LPMAPIPROP;
|
|
typedef struct IMAPIStatus IMAPIStatus;
|
|
typedef IMAPIStatus *LPMAPISTATUS;
|
|
typedef struct IMAPITable IMAPITable;
|
|
typedef IMAPITable *LPMAPITABLE;
|
|
typedef struct IMessage IMessage;
|
|
typedef IMessage *LPMESSAGE;
|
|
typedef struct IMsgStore IMsgStore;
|
|
typedef IMsgStore *LPMDB;
|
|
typedef struct IProfSect IProfSect;
|
|
typedef IProfSect *LPPROFSECT;
|
|
typedef struct IProviderAdmin IProviderAdmin;
|
|
typedef IProviderAdmin *LPPROVIDERADMIN;
|
|
|
|
#ifndef MAPI_DIM
|
|
# define MAPI_DIM 1 /* Default to one dimension for variable length arrays */
|
|
#endif
|
|
|
|
/* Flags for abFlags[0] */
|
|
#define MAPI_NOTRESERVED 0x08
|
|
#define MAPI_NOW 0x10
|
|
#define MAPI_THISSESSION 0x20
|
|
#define MAPI_NOTRECIP 0x40
|
|
#define MAPI_SHORTTERM 0x80
|
|
|
|
/* Flags for abFlags[1] */
|
|
#define MAPI_COMPOUND 0x80
|
|
|
|
typedef struct _ENTRYID
|
|
{
|
|
BYTE abFlags[4];
|
|
BYTE ab[MAPI_DIM];
|
|
} ENTRYID, *LPENTRYID;
|
|
|
|
/* MAPI GUID's */
|
|
typedef struct _MAPIUID
|
|
{
|
|
BYTE ab[sizeof(GUID)];
|
|
} MAPIUID, *LPMAPIUID;
|
|
|
|
#define IsEqualMAPIUID(pl,pr) (!memcmp((pl),(pr),sizeof(MAPIUID)))
|
|
|
|
#define MAPI_ONE_OFF_UID { 0x81,0x2b,0x1f,0xa4,0xbe,0xa3,0x10,0x19,0x9d,0x6e, \
|
|
0x00,0xdd,0x01,0x0f,0x54,0x02 }
|
|
#define MAPI_ONE_OFF_UNICODE 0x8000
|
|
#define MAPI_ONE_OFF_NO_RICH_INFO 0x0001
|
|
|
|
/* Object types */
|
|
#define MAPI_STORE 1U
|
|
#define MAPI_ADDRBOOK 2U
|
|
#define MAPI_FOLDER 3U
|
|
#define MAPI_ABCONT 4U
|
|
#define MAPI_MESSAGE 5U
|
|
#define MAPI_MAILUSER 6U
|
|
#define MAPI_ATTACH 7U
|
|
#define MAPI_DISTLIST 8U
|
|
#define MAPI_PROFSECT 9U
|
|
#define MAPI_STATUS 10U
|
|
#define MAPI_SESSION 11U
|
|
#define MAPI_FORMINFO 12U
|
|
|
|
/* Flags for various calls */
|
|
#define MAPI_MODIFY 0x00000001U /* Object can be modified */
|
|
#define MAPI_ACCESS_MODIFY MAPI_MODIFY /* Want write access */
|
|
#define MAPI_ACCESS_READ 0x00000002U /* Want read access */
|
|
#define MAPI_ACCESS_DELETE 0x00000004U /* Want delete access */
|
|
#define MAPI_ACCESS_CREATE_HIERARCHY 0x00000008U
|
|
#define MAPI_ACCESS_CREATE_CONTENTS 0x00000010U
|
|
#define MAPI_ACCESS_CREATE_ASSOCIATED 0x00000020U
|
|
#define MAPI_UNICODE 0x80000000U /* Strings in this call are Unicode */
|
|
|
|
#if defined (UNICODE) || defined (__WINESRC__)
|
|
#define fMapiUnicode MAPI_UNICODE
|
|
#else
|
|
#define fMapiUnicode 0U
|
|
#endif
|
|
|
|
/* Types of message receivers */
|
|
#ifndef MAPI_ORIG
|
|
#define MAPI_ORIG 0 /* The original author */
|
|
#define MAPI_TO 1 /* The primary message receiver */
|
|
#define MAPI_CC 2 /* A carbon copy receiver */
|
|
#define MAPI_BCC 3 /* A blind carbon copy receiver */
|
|
#define MAPI_P1 0x10000000 /* A message resend */
|
|
#define MAPI_SUBMITTED 0x80000000 /* This message has already been sent */
|
|
#endif
|
|
|
|
#ifndef cchProfileNameMax
|
|
#define cchProfileNameMax 64 /* Maximum length of a profile name */
|
|
#define cchProfilePassMax 64 /* Maximum length of a profile password */
|
|
#endif
|
|
|
|
/* Properties: The are the contents of cells in MAPI tables, as well as the
|
|
* values returned when object properties are queried.
|
|
*/
|
|
|
|
/* Property types */
|
|
#define PT_UNSPECIFIED 0U
|
|
#define PT_NULL 1U
|
|
#define PT_I2 2U
|
|
#define PT_SHORT PT_I2
|
|
#define PT_LONG 3U
|
|
#define PT_I4 PT_LONG
|
|
#define PT_R4 4U
|
|
#define PT_FLOAT PT_R4
|
|
#define PT_DOUBLE 5U
|
|
#define PT_R8 PT_DOUBLE
|
|
#define PT_CURRENCY 6U
|
|
#define PT_APPTIME 7U
|
|
#define PT_ERROR 10U
|
|
#define PT_BOOLEAN 11U
|
|
#define PT_OBJECT 13U
|
|
#define PT_I8 20U
|
|
#define PT_LONGLONG PT_I8
|
|
#define PT_STRING8 30U
|
|
#define PT_UNICODE 31U
|
|
#define PT_SYSTIME 64U
|
|
#define PT_CLSID 72U
|
|
#define PT_BINARY 258U
|
|
|
|
#define MV_FLAG 0x1000 /* This property type is multi-valued (an array) */
|
|
#define MV_INSTANCE 0x2000
|
|
#define MVI_FLAG (MV_FLAG|MV_INSTANCE)
|
|
#define MVI_PROP(t) ((t)|MVI_FLAG)
|
|
|
|
#ifndef __WINESRC__
|
|
# ifdef UNICODE
|
|
# define PT_TSTRING PT_UNICODE
|
|
# define PT_MV_TSTRING (MV_FLAG|PT_UNICODE)
|
|
# define LPSZ lpszW
|
|
# define LPPSZ lppszW
|
|
# define MVSZ MVszW
|
|
# else
|
|
# define PT_TSTRING PT_STRING8
|
|
# define PT_MV_TSTRING (MV_FLAG|PT_STRING8)
|
|
# define LPSZ lpszA
|
|
# define LPPSZ lppszA
|
|
# define MVSZ MVszA
|
|
# endif
|
|
#endif
|
|
|
|
#define PROP_TYPE_MASK 0xFFFFU
|
|
#define PROP_TYPE(t) ((t) & PROP_TYPE_MASK)
|
|
#define PROP_ID(t) ((t) >> 16)
|
|
#define PROP_TAG(t,id) (((id) << 16) | t)
|
|
#define PROP_ID_NULL 0
|
|
#define PROP_ID_INVALID 0xFFFF
|
|
#define PR_NULL PROP_TAG(PT_NULL, PROP_ID_NULL)
|
|
|
|
#define CHANGE_PROP_TYPE(t,typ) ((0xFFFF0000 & t) | typ)
|
|
|
|
/* Multi-valued property types */
|
|
#define PT_MV_I2 (MV_FLAG|PT_I2)
|
|
#define PT_MV_SHORT PT_MV_I2
|
|
#define PT_MV_LONG (MV_FLAG|PT_LONG)
|
|
#define PT_MV_I4 PT_MV_LONG
|
|
#define PT_MV_R4 (MV_FLAG|PT_R4)
|
|
#define PT_MV_FLOAT PT_MV_R4
|
|
#define PT_MV_DOUBLE (MV_FLAG|PT_DOUBLE)
|
|
#define PT_MV_R8 PT_MV_DOUBLE
|
|
#define PT_MV_CURRENCY (MV_FLAG|PT_CURRENCY)
|
|
#define PT_MV_APPTIME (MV_FLAG|PT_APPTIME)
|
|
#define PT_MV_SYSTIME (MV_FLAG|PT_SYSTIME)
|
|
#define PT_MV_STRING8 (MV_FLAG|PT_STRING8)
|
|
#define PT_MV_BINARY (MV_FLAG|PT_BINARY)
|
|
#define PT_MV_UNICODE (MV_FLAG|PT_UNICODE)
|
|
#define PT_MV_CLSID (MV_FLAG|PT_CLSID)
|
|
#define PT_MV_I8 (MV_FLAG|PT_I8)
|
|
#define PT_MV_LONGLONG PT_MV_I8
|
|
|
|
|
|
/* The property tag structure. This describes a list of columns */
|
|
typedef struct _SPropTagArray
|
|
{
|
|
ULONG cValues; /* Number of elements in aulPropTag */
|
|
ULONG aulPropTag[MAPI_DIM]; /* Property tags */
|
|
} SPropTagArray, *LPSPropTagArray;
|
|
|
|
#define CbNewSPropTagArray(c) (offsetof(SPropTagArray,aulPropTag)+(c)*sizeof(ULONG))
|
|
#define CbSPropTagArray(p) CbNewSPropTagArray((p)->cValues)
|
|
#define SizedSPropTagArray(n,id) \
|
|
struct _SPropTagArray_##id { ULONG cValues; ULONG aulPropTag[n]; } id
|
|
|
|
/* Multi-valued PT_APPTIME property value */
|
|
typedef struct _SAppTimeArray
|
|
{
|
|
ULONG cValues; /* Number of doubles in lpat */
|
|
double *lpat; /* Pointer to double array of length cValues */
|
|
} SAppTimeArray;
|
|
|
|
/* PT_BINARY property value */
|
|
typedef struct _SBinary
|
|
{
|
|
ULONG cb; /* Number of bytes in lpb */
|
|
LPBYTE lpb; /* Pointer to byte array of length cb */
|
|
} SBinary, *LPSBinary;
|
|
|
|
/* Multi-valued PT_BINARY property value */
|
|
typedef struct _SBinaryArray
|
|
{
|
|
ULONG cValues; /* Number of SBinarys in lpbin */
|
|
SBinary *lpbin; /* Pointer to SBinary array of length cValues */
|
|
} SBinaryArray;
|
|
|
|
typedef SBinaryArray ENTRYLIST, *LPENTRYLIST;
|
|
|
|
/* Multi-valued PT_CY property value */
|
|
typedef struct _SCurrencyArray
|
|
{
|
|
ULONG cValues; /* Number of CYs in lpcu */
|
|
CY *lpcur; /* Pointer to CY array of length cValues */
|
|
} SCurrencyArray;
|
|
|
|
/* Multi-valued PT_SYSTIME property value */
|
|
typedef struct _SDateTimeArray
|
|
{
|
|
ULONG cValues; /* Number of FILETIMEs in lpft */
|
|
FILETIME *lpft; /* Pointer to FILETIME array of length cValues */
|
|
} SDateTimeArray;
|
|
|
|
/* Multi-valued PT_DOUBLE property value */
|
|
typedef struct _SDoubleArray
|
|
{
|
|
ULONG cValues; /* Number of doubles in lpdbl */
|
|
double *lpdbl; /* Pointer to double array of length cValues */
|
|
} SDoubleArray;
|
|
|
|
/* Multi-valued PT_CLSID property value */
|
|
typedef struct _SGuidArray
|
|
{
|
|
ULONG cValues; /* Number of GUIDs in lpguid */
|
|
GUID *lpguid; /* Pointer to GUID array of length cValues */
|
|
} SGuidArray;
|
|
|
|
/* Multi-valued PT_LONGLONG property value */
|
|
typedef struct _SLargeIntegerArray
|
|
{
|
|
ULONG cValues; /* Number of long64s in lpli */
|
|
LARGE_INTEGER *lpli; /* Pointer to long64 array of length cValues */
|
|
} SLargeIntegerArray;
|
|
|
|
/* Multi-valued PT_LONG property value */
|
|
typedef struct _SLongArray
|
|
{
|
|
ULONG cValues; /* Number of longs in lpl */
|
|
LONG *lpl; /* Pointer to long array of length cValues */
|
|
} SLongArray;
|
|
|
|
/* Multi-valued PT_STRING8 property value */
|
|
typedef struct _SLPSTRArray
|
|
{
|
|
ULONG cValues; /* Number of Ascii strings in lppszA */
|
|
LPSTR *lppszA; /* Pointer to Ascii string array of length cValues */
|
|
} SLPSTRArray;
|
|
|
|
/* Multi-valued PT_FLOAT property value */
|
|
typedef struct _SRealArray
|
|
{
|
|
ULONG cValues; /* Number of floats in lpflt */
|
|
float *lpflt; /* Pointer to float array of length cValues */
|
|
} SRealArray;
|
|
|
|
/* Multi-valued PT_SHORT property value */
|
|
typedef struct _SShortArray
|
|
{
|
|
ULONG cValues; /* Number of shorts in lpb */
|
|
short int *lpi; /* Pointer to short array of length cValues */
|
|
} SShortArray;
|
|
|
|
/* Multi-valued PT_UNICODE property value */
|
|
typedef struct _SWStringArray
|
|
{
|
|
ULONG cValues; /* Number of Unicode strings in lppszW */
|
|
LPWSTR *lppszW; /* Pointer to Unicode string array of length cValues */
|
|
} SWStringArray;
|
|
|
|
/* A property value */
|
|
typedef union _PV
|
|
{
|
|
short int i;
|
|
LONG l;
|
|
ULONG ul;
|
|
float flt;
|
|
double dbl;
|
|
unsigned short b;
|
|
CY cur;
|
|
double at;
|
|
FILETIME ft;
|
|
LPSTR lpszA;
|
|
SBinary bin;
|
|
LPWSTR lpszW;
|
|
LPGUID lpguid;
|
|
LARGE_INTEGER li;
|
|
SShortArray MVi;
|
|
SLongArray MVl;
|
|
SRealArray MVflt;
|
|
SDoubleArray MVdbl;
|
|
SCurrencyArray MVcur;
|
|
SAppTimeArray MVat;
|
|
SDateTimeArray MVft;
|
|
SBinaryArray MVbin;
|
|
SLPSTRArray MVszA;
|
|
SWStringArray MVszW;
|
|
SGuidArray MVguid;
|
|
SLargeIntegerArray MVli;
|
|
SCODE err;
|
|
LONG x;
|
|
} __UPV;
|
|
|
|
/* Property value structure. This is essentially a mini-Variant */
|
|
typedef struct _SPropValue
|
|
{
|
|
ULONG ulPropTag; /* The property type */
|
|
ULONG dwAlignPad; /* Alignment, treat as reserved */
|
|
union _PV Value; /* The property value */
|
|
} SPropValue, *LPSPropValue;
|
|
|
|
/* Structure describing a table row (a collection of property values) */
|
|
typedef struct _SRow
|
|
{
|
|
ULONG ulAdrEntryPad; /* Padding, treat as reserved */
|
|
ULONG cValues; /* Count of property values in lpProbs */
|
|
LPSPropValue lpProps; /* Pointer to an array of property values of length cValues */
|
|
} SRow, *LPSRow;
|
|
|
|
/* Structure describing a set of table rows */
|
|
typedef struct _SRowSet
|
|
{
|
|
ULONG cRows; /* Count of rows in aRow */
|
|
SRow aRow[MAPI_DIM]; /* Array of rows of length cRows */
|
|
} SRowSet, *LPSRowSet;
|
|
|
|
#define CbNewSRowSet(c) (offsetof(SRowSet,aRow)+(c)*sizeof(SRow))
|
|
#define CbSRowSet(p) CbNewSRowSet((p)->cRows)
|
|
#define SizedSRowSet(n,id) \
|
|
struct _SRowSet_##id { ULONG cRows; SRow aRow[n]; } id
|
|
|
|
/* Structure describing a problem with a property */
|
|
typedef struct _SPropProblem
|
|
{
|
|
ULONG ulIndex; /* Index of the property */
|
|
ULONG ulPropTag; /* Proprty tag of the property */
|
|
SCODE scode; /* Error code of the problem */
|
|
} SPropProblem, *LPSPropProblem;
|
|
|
|
/* A collection of property problems */
|
|
typedef struct _SPropProblemArray
|
|
{
|
|
ULONG cProblem; /* Number of problems in aProblem */
|
|
SPropProblem aProblem[MAPI_DIM]; /* Array of problems of length cProblem */
|
|
} SPropProblemArray, *LPSPropProblemArray;
|
|
|
|
/* FPropContainsProp flags */
|
|
#define FL_FULLSTRING 0x00000ul /* Exact string match */
|
|
#define FL_SUBSTRING 0x00001ul /* Substring match */
|
|
#define FL_PREFIX 0x00002ul /* Prefix match */
|
|
#define FL_IGNORECASE 0x10000ul /* Case insensitive */
|
|
#define FL_IGNORENONSPACE 0x20000ul /* Ignore non spacing characters */
|
|
#define FL_LOOSE 0x40000ul /* Try very hard to match */
|
|
|
|
|
|
/* Table types returned by IMAPITable_GetStatus() */
|
|
#define TBLTYPE_SNAPSHOT 0U /* Table is fixed at creation time and contents do not change */
|
|
#define TBLTYPE_KEYSET 1U /* Table has a fixed number of rows, but row values may change */
|
|
#define TBLTYPE_DYNAMIC 2U /* Table values and the number of rows may change */
|
|
|
|
/* Table status returned by IMAPITable_GetStatus() */
|
|
#define TBLSTAT_COMPLETE 0U /* All operations have completed (normal status) */
|
|
#define TBLSTAT_QCHANGED 7U /* Table data has changed as expected */
|
|
#define TBLSTAT_SORTING 9U /* Table is being asynchronously sorted */
|
|
#define TBLSTAT_SORT_ERROR 10U /* An error occurred while sorting the table */
|
|
#define TBLSTAT_SETTING_COLS 11U /* Table columns are being asynchronously changed */
|
|
#define TBLSTAT_SETCOL_ERROR 13U /* An error occurred during column changing */
|
|
#define TBLSTAT_RESTRICTING 14U /* Table rows are being asynchronously restricted */
|
|
#define TBLSTAT_RESTRICT_ERROR 15U /* An error occurred during row restriction */
|
|
|
|
/* Flags for IMAPITable operations that can be asynchronous */
|
|
#define TBL_NOWAIT 1U /* Perform the operation asynchronously */
|
|
#define TBL_BATCH 2U /* Perform the operation when the results are needed */
|
|
#define TBL_ASYNC TBL_NOWAIT /* Synonym for TBL_NOWAIT */
|
|
|
|
/* Flags for IMAPITable_FindRow() */
|
|
#define DIR_BACKWARD 1U /* Read rows backwards from the start bookmark */
|
|
|
|
/* Table bookmarks */
|
|
typedef ULONG BOOKMARK;
|
|
|
|
#define BOOKMARK_BEGINNING ((BOOKMARK)0) /* The first row */
|
|
#define BOOKMARK_CURRENT ((BOOKMARK)1) /* The curent table row */
|
|
#define BOOKMARK_END ((BOOKMARK)2) /* The last row */
|
|
|
|
/* Row restrictions */
|
|
typedef struct _SRestriction* LPSRestriction;
|
|
|
|
typedef struct _SAndRestriction
|
|
{
|
|
ULONG cRes;
|
|
LPSRestriction lpRes;
|
|
} SAndRestriction;
|
|
|
|
typedef struct _SBitMaskRestriction
|
|
{
|
|
ULONG relBMR;
|
|
ULONG ulPropTag;
|
|
ULONG ulMask;
|
|
} SBitMaskRestriction;
|
|
|
|
typedef struct _SCommentRestriction
|
|
{
|
|
ULONG cValues;
|
|
LPSRestriction lpRes;
|
|
LPSPropValue lpProp;
|
|
} SCommentRestriction;
|
|
|
|
#define RELOP_LT 0U
|
|
#define RELOP_LE 1U
|
|
#define RELOP_GT 2U
|
|
#define RELOP_GE 3U
|
|
#define RELOP_EQ 4U
|
|
#define RELOP_NE 5U
|
|
#define RELOP_RE 6U
|
|
|
|
typedef struct _SComparePropsRestriction
|
|
{
|
|
ULONG relop;
|
|
ULONG ulPropTag1;
|
|
ULONG ulPropTag2;
|
|
} SComparePropsRestriction;
|
|
|
|
typedef struct _SContentRestriction
|
|
{
|
|
ULONG ulFuzzyLevel;
|
|
ULONG ulPropTag;
|
|
LPSPropValue lpProp;
|
|
} SContentRestriction;
|
|
|
|
typedef struct _SExistRestriction
|
|
{
|
|
ULONG ulReserved1;
|
|
ULONG ulPropTag;
|
|
ULONG ulReserved2;
|
|
} SExistRestriction;
|
|
|
|
typedef struct _SNotRestriction
|
|
{
|
|
ULONG ulReserved;
|
|
LPSRestriction lpRes;
|
|
} SNotRestriction;
|
|
|
|
typedef struct _SOrRestriction
|
|
{
|
|
ULONG cRes;
|
|
LPSRestriction lpRes;
|
|
} SOrRestriction;
|
|
|
|
typedef struct _SPropertyRestriction
|
|
{
|
|
ULONG relop;
|
|
ULONG ulPropTag;
|
|
LPSPropValue lpProp;
|
|
} SPropertyRestriction;
|
|
|
|
typedef struct _SSizeRestriction
|
|
{
|
|
ULONG relop;
|
|
ULONG ulPropTag;
|
|
ULONG cb;
|
|
} SSizeRestriction;
|
|
|
|
typedef struct _SSubRestriction
|
|
{
|
|
ULONG ulSubObject;
|
|
LPSRestriction lpRes;
|
|
} SSubRestriction;
|
|
|
|
/* Restriction types */
|
|
#define RES_AND 0U
|
|
#define RES_OR 1U
|
|
#define RES_NOT 2U
|
|
#define RES_CONTENT 3U
|
|
#define RES_PROPERTY 4U
|
|
#define RES_COMPAREPROPS 5U
|
|
#define RES_BITMASK 6U
|
|
#define RES_SIZE 7U
|
|
#define RES_EXIST 8U
|
|
#define RES_SUBRESTRICTION 9U
|
|
#define RES_COMMENT 10U
|
|
|
|
typedef struct _SRestriction
|
|
{
|
|
ULONG rt;
|
|
union
|
|
{
|
|
SAndRestriction resAnd;
|
|
SBitMaskRestriction resBitMask;
|
|
SCommentRestriction resComment;
|
|
SComparePropsRestriction resCompareProps;
|
|
SContentRestriction resContent;
|
|
SExistRestriction resExist;
|
|
SNotRestriction resNot;
|
|
SOrRestriction resOr;
|
|
SPropertyRestriction resProperty;
|
|
SSizeRestriction resSize;
|
|
SSubRestriction resSub;
|
|
} res;
|
|
} SRestriction;
|
|
|
|
/* Errors */
|
|
typedef struct _MAPIERROR
|
|
{
|
|
ULONG ulVersion; /* Mapi version */
|
|
#if defined (UNICODE) || defined (__WINESRC__)
|
|
LPWSTR lpszError; /* Error and component strings. These are Ascii */
|
|
LPWSTR lpszComponent; /* unless the MAPI_UNICODE flag is passed in */
|
|
#else
|
|
LPSTR lpszError;
|
|
LPSTR lpszComponent;
|
|
#endif
|
|
ULONG ulLowLevelError;
|
|
ULONG ulContext;
|
|
} MAPIERROR, *LPMAPIERROR;
|
|
|
|
/* Sorting */
|
|
#define TABLE_SORT_ASCEND 0U
|
|
#define TABLE_SORT_DESCEND 1U
|
|
#define TABLE_SORT_COMBINE 2U
|
|
|
|
typedef struct _SSortOrder
|
|
{
|
|
ULONG ulPropTag;
|
|
ULONG ulOrder;
|
|
} SSortOrder, *LPSSortOrder;
|
|
|
|
typedef struct _SSortOrderSet
|
|
{
|
|
ULONG cSorts;
|
|
ULONG cCategories;
|
|
ULONG cExpanded;
|
|
SSortOrder aSort[MAPI_DIM];
|
|
} SSortOrderSet, * LPSSortOrderSet;
|
|
|
|
#define MNID_ID 0
|
|
#define MNID_STRING 1
|
|
|
|
typedef struct _MAPINAMEID
|
|
{
|
|
LPGUID lpguid;
|
|
ULONG ulKind;
|
|
union
|
|
{
|
|
LONG lID;
|
|
LPWSTR lpwstrName;
|
|
} Kind;
|
|
} MAPINAMEID, *LPMAPINAMEID;
|
|
|
|
/* Desired notification types (bitflags) */
|
|
#define fnevCriticalError 0x00000001UL
|
|
#define fnevNewMail 0x00000002UL
|
|
#define fnevObjectCreated 0x00000004UL
|
|
#define fnevObjectDeleted 0x00000008UL
|
|
#define fnevObjectModified 0x00000010UL
|
|
#define fnevObjectMoved 0x00000020UL
|
|
#define fnevObjectCopied 0x00000040UL
|
|
#define fnevSearchComplete 0x00000080UL
|
|
#define fnevTableModified 0x00000100UL
|
|
#define fnevStatusObjectModified 0x00000200UL
|
|
#define fnevReservedForMapi 0x40000000UL
|
|
#define fnevExtended 0x80000000UL
|
|
|
|
/* Type of notification event */
|
|
#define TABLE_CHANGED 1U
|
|
#define TABLE_ERROR 2U
|
|
#define TABLE_ROW_ADDED 3U
|
|
#define TABLE_ROW_DELETED 4U
|
|
#define TABLE_ROW_MODIFIED 5U
|
|
#define TABLE_SORT_DONE 6U
|
|
#define TABLE_RESTRICT_DONE 7U
|
|
#define TABLE_SETCOL_DONE 8U
|
|
#define TABLE_RELOAD 9U
|
|
|
|
/* fnevCriticalError notification */
|
|
typedef struct _ERROR_NOTIFICATION
|
|
{
|
|
ULONG cbEntryID;
|
|
LPENTRYID lpEntryID;
|
|
SCODE scode;
|
|
ULONG ulFlags;
|
|
LPMAPIERROR lpMAPIError;
|
|
} ERROR_NOTIFICATION;
|
|
|
|
/* fnevNewMail notification */
|
|
typedef struct _NEWMAIL_NOTIFICATION
|
|
{
|
|
ULONG cbEntryID;
|
|
LPENTRYID lpEntryID;
|
|
ULONG cbParentID;
|
|
LPENTRYID lpParentID;
|
|
ULONG ulFlags;
|
|
#if defined (UNICODE) || defined (__WINESRC__)
|
|
LPWSTR lpszMessageClass;
|
|
#else
|
|
LPSTR lpszMessageClass;
|
|
#endif
|
|
ULONG ulMessageFlags;
|
|
} NEWMAIL_NOTIFICATION;
|
|
|
|
/* fnevObjectCreated/Deleted/Modified/Moved/Copied notification */
|
|
typedef struct _OBJECT_NOTIFICATION
|
|
{
|
|
ULONG cbEntryID;
|
|
LPENTRYID lpEntryID;
|
|
ULONG ulObjType;
|
|
ULONG cbParentID;
|
|
LPENTRYID lpParentID;
|
|
ULONG cbOldID;
|
|
LPENTRYID lpOldID;
|
|
ULONG cbOldParentID;
|
|
LPENTRYID lpOldParentID;
|
|
LPSPropTagArray lpPropTagArray;
|
|
} OBJECT_NOTIFICATION;
|
|
|
|
/* fnevTableModified notification */
|
|
typedef struct _TABLE_NOTIFICATION
|
|
{
|
|
ULONG ulTableEvent;
|
|
HRESULT hResult;
|
|
SPropValue propIndex;
|
|
SPropValue propPrior;
|
|
SRow row;
|
|
ULONG ulPad;
|
|
} TABLE_NOTIFICATION;
|
|
|
|
/* fnevExtended notification */
|
|
typedef struct _EXTENDED_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
ULONG cb;
|
|
LPBYTE pbEventParameters;
|
|
} EXTENDED_NOTIFICATION;
|
|
|
|
/* fnevStatusObjectModified notification */
|
|
typedef struct
|
|
{
|
|
ULONG cbEntryID;
|
|
LPENTRYID lpEntryID;
|
|
ULONG cValues;
|
|
LPSPropValue lpPropVals;
|
|
} STATUS_OBJECT_NOTIFICATION;
|
|
|
|
/* The notification structure passed to advise sinks */
|
|
typedef struct _NOTIFICATION
|
|
{
|
|
ULONG ulEventType;
|
|
ULONG ulAlignPad;
|
|
union
|
|
{
|
|
ERROR_NOTIFICATION err;
|
|
NEWMAIL_NOTIFICATION newmail;
|
|
OBJECT_NOTIFICATION obj;
|
|
TABLE_NOTIFICATION tab;
|
|
EXTENDED_NOTIFICATION ext;
|
|
STATUS_OBJECT_NOTIFICATION statobj;
|
|
} info;
|
|
} NOTIFICATION, *LPNOTIFICATION;
|
|
|
|
typedef LONG (WINAPI NOTIFCALLBACK)(LPVOID,ULONG,LPNOTIFICATION);
|
|
typedef NOTIFCALLBACK *LPNOTIFCALLBACK;
|
|
|
|
/*****************************************************************************
|
|
* IMAPITable interface
|
|
*
|
|
* This is the read-only 'view' over an I(MAPI)TableData object.
|
|
*/
|
|
#define INTERFACE IMAPITable
|
|
#define IMAPITable_METHODS \
|
|
IUnknown_METHODS \
|
|
STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppError) PURE; \
|
|
STDMETHOD(Advise)(THIS_ ULONG ulMask, LPMAPIADVISESINK lpSink, ULONG *lpCxn) PURE; \
|
|
STDMETHOD(Unadvise)(THIS_ ULONG ulCxn) PURE; \
|
|
STDMETHOD(GetStatus)(THIS_ ULONG *lpStatus, ULONG *lpType) PURE; \
|
|
STDMETHOD(SetColumns)(THIS_ LPSPropTagArray lpProps, ULONG ulFlags) PURE; \
|
|
STDMETHOD(QueryColumns)(THIS_ ULONG ulFlags, LPSPropTagArray *lpCols) PURE; \
|
|
STDMETHOD(GetRowCount)(THIS_ ULONG ulFlags, ULONG *lpCount) PURE; \
|
|
STDMETHOD(SeekRow)(THIS_ BOOKMARK lpStart, LONG lRows, LONG *lpSeeked) PURE; \
|
|
STDMETHOD(SeekRowApprox)(THIS_ ULONG ulNum, ULONG ulDenom) PURE; \
|
|
STDMETHOD(QueryPosition)(THIS_ ULONG *lpRow, ULONG *lpNum, ULONG *lpDenom) PURE; \
|
|
STDMETHOD(FindRow)(THIS_ LPSRestriction lpRestrict, BOOKMARK lpOrigin, ULONG ulFlags) PURE; \
|
|
STDMETHOD(Restrict)(THIS_ LPSRestriction lpRestrict, ULONG ulFlags) PURE; \
|
|
STDMETHOD(CreateBookmark)(THIS_ BOOKMARK *lppPos) PURE; \
|
|
STDMETHOD(FreeBookmark)(THIS_ BOOKMARK lpPos) PURE; \
|
|
STDMETHOD(SortTable)(THIS_ LPSSortOrderSet lpSortOpts, ULONG ulFlags) PURE; \
|
|
STDMETHOD(QuerySortOrder)(THIS_ LPSSortOrderSet *lppSortOpts) PURE; \
|
|
STDMETHOD(QueryRows)(THIS_ LONG lRows, ULONG ulFlags, LPSRowSet *lppRows) PURE; \
|
|
STDMETHOD(Abort) (THIS) PURE; \
|
|
STDMETHOD(ExpandRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulRows, \
|
|
ULONG ulFlags, LPSRowSet *lppRows, ULONG *lpMore) PURE; \
|
|
STDMETHOD(CollapseRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulFlags, ULONG *lpRows) PURE; \
|
|
STDMETHOD(WaitForCompletion)(THIS_ ULONG ulFlags, ULONG ulTime, ULONG *lpState) PURE; \
|
|
STDMETHOD(GetCollapseState)(THIS_ ULONG ulFlags, ULONG cbKey, LPBYTE lpKey, \
|
|
ULONG *lpStateLen, LPBYTE *lpState) PURE; \
|
|
STDMETHOD(SetCollapseState)(THIS_ ULONG ulFlags, ULONG ulLen, \
|
|
LPBYTE lpStart, BOOKMARK *lppWhere) PURE;
|
|
ICOM_DEFINE(IMAPITable,IUnknown)
|
|
#undef INTERFACE
|
|
|
|
#ifdef COBJMACROS
|
|
/*** IUnknown methods ***/
|
|
#define IMAPITable_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
|
|
#define IMAPITable_AddRef(p) (p)->lpVtbl->AddRef(p)
|
|
#define IMAPITable_Release(p) (p)->lpVtbl->Release(p)
|
|
/*** IMAPITable methods ***/
|
|
#define IMAPITable_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c)
|
|
#define IMAPITable_Advise(p,a,b,c) (p)->lpVtbl->Advise(p,a,b,c)
|
|
#define IMAPITable_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a)
|
|
#define IMAPITable_GetStatus(p,a,b) (p)->lpVtbl->GetStatus(p,a,b)
|
|
#define IMAPITable_SetColumns(p,a,b) (p)->lpVtbl->SetColumns(p,a,b)
|
|
#define IMAPITable_QueryColumns(p,a,b) (p)->lpVtbl->QueryColumns(p,a,b)
|
|
#define IMAPITable_GetRowCount(p,a,b) (p)->lpVtbl->GetRowCount(p,a,b)
|
|
#define IMAPITable_SeekRow(p,a,b) (p)->lpVtbl->SeekRow(p,a,b)
|
|
#define IMAPITable_SeekRowApprox(p,a,b) (p)->lpVtbl->SeekRowApprox(p,a,b)
|
|
#define IMAPITable_QueryPosition(p,a,b) (p)->lpVtbl->QueryPosition(p,a,b)
|
|
#define IMAPITable_FindRow(p,a,b,c) (p)->lpVtbl->FindRow(p,a,b,c)
|
|
#define IMAPITable_Restrict(p,a,b) (p)->lpVtbl->Recstrict(p,a,b)
|
|
#define IMAPITable_CreateBookmark(p,a) (p)->lpVtbl->CreateBookmark(p,a)
|
|
#define IMAPITable_FreeBookmark(p,a) (p)->lpVtbl->FreeBookmark(p,a)
|
|
#define IMAPITable_SortTable(p,a,b) (p)->lpVtbl->SortTable(p,a,b)
|
|
#define IMAPITable_QuerySortOrder(p,a) (p)->lpVtbl->QuerySortOrder(p,a)
|
|
#define IMAPITable_QueryRows(p,a,b,c) (p)->lpVtbl->QueryRows(p,a,b,c)
|
|
#define IMAPITable_Abort(p) (p)->lpVtbl->Abort(p)
|
|
#define IMAPITable_ExpandRow(p,a,b,c,d,e,f) (p)->lpVtbl->ExpandRow(p,a,b,c,d,e,f)
|
|
#define IMAPITable_CollapseRow(p,a,b,c,d) (p)->lpVtbl->CollapseRow(p,a,b,c,d)
|
|
#define IMAPITable_WaitForCompletion(p,a,b,c) (p)->lpVtbl->WaitForCompletion(p,a,b,c)
|
|
#define IMAPITable_GetCollapseState(p,a,b,c,d,e) (p)->lpVtbl->GetCollapseState(p,a,b,c,d,e)
|
|
#define IMAPITable_SetCollapseState(p,a,b,c,d) (p)->lpVtbl->SetCollapseState(p,a,b,c,d)
|
|
#endif
|
|
|
|
/*****************************************************************************
|
|
* IMAPIAdviseSink interface
|
|
*/
|
|
#define INTERFACE IMAPIAdviseSink
|
|
#define IMAPIAdviseSink_METHODS \
|
|
IUnknown_METHODS \
|
|
STDMETHOD(OnNotify)(THIS_ ULONG NumNotif, LPNOTIFICATION lpNotif) PURE;
|
|
ICOM_DEFINE(IMAPIAdviseSink,IUnknown)
|
|
#undef INTERFACE
|
|
|
|
#ifdef COBJMACROS
|
|
/*** IUnknown methods ***/
|
|
#define IMAPIAdviseSink_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
|
|
#define IMAPIAdviseSink_AddRef(p) (p)->lpVtbl->AddRef(p)
|
|
#define IMAPIAdviseSink_Release(p) (p)->lpVtbl->Release(p)
|
|
/*** IMAPIAdviseSink methods ***/
|
|
#define IMAPIAdviseSink_OnNotify(p,a,b) (p)->lpVtbl->OnNotify(p,a,b)
|
|
#endif
|
|
|
|
typedef struct
|
|
{
|
|
ULONG cb;
|
|
BYTE abEntry[MAPI_DIM];
|
|
} FLATENTRY, *LPFLATENTRY;
|
|
|
|
typedef struct
|
|
{
|
|
ULONG cEntries;
|
|
ULONG cbEntries;
|
|
BYTE abEntries[MAPI_DIM];
|
|
} FLATENTRYLIST, *LPFLATENTRYLIST;
|
|
|
|
typedef struct
|
|
{
|
|
ULONG cb;
|
|
BYTE ab[MAPI_DIM];
|
|
} MTSID, *LPMTSID;
|
|
|
|
typedef struct
|
|
{
|
|
ULONG cMTSIDs;
|
|
ULONG cbMTSIDs;
|
|
BYTE abMTSIDs[MAPI_DIM];
|
|
} FLATMTSIDLIST, *LPFLATMTSIDLIST;
|
|
|
|
typedef struct _ADRENTRY
|
|
{
|
|
ULONG ulReserved1;
|
|
ULONG cValues;
|
|
LPSPropValue rgPropVals;
|
|
} ADRENTRY, *LPADRENTRY;
|
|
|
|
typedef struct _ADRLIST
|
|
{
|
|
ULONG cEntries;
|
|
ADRENTRY aEntries[MAPI_DIM];
|
|
} ADRLIST, *LPADRLIST;
|
|
|
|
#endif /*MAPIDEFS_H*/
|