|  | /* | 
|  | * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
|  | */ | 
|  |  | 
|  | #ifndef MAPIDEFS_H | 
|  | #define MAPIDEFS_H | 
|  |  | 
|  | #ifndef __WINESRC__ | 
|  | # include <windows.h> | 
|  | #endif | 
|  |  | 
|  | #include <winerror.h> | 
|  | #include <objbase.h> | 
|  | #include <stddef.h> | 
|  |  | 
|  | /* 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 | 
|  | { | 
|  | #ifdef WORDS_BIGENDIAN | 
|  | DWORD dwHighDateTime; | 
|  | DWORD dwLowDateTime; | 
|  | #else | 
|  | DWORD dwLowDateTime; | 
|  | DWORD dwHighDateTime; | 
|  | #endif | 
|  | } 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 *LPMAPIADVISESINK; | 
|  | typedef struct IMAPIContainer IMAPIContainer; | 
|  | typedef IMAPIContainer *LPMAPICONTAINER; | 
|  | typedef struct IMAPIFolder IMAPIFolder; | 
|  | typedef IMAPIFolder *LPMAPIFOLDER; | 
|  | typedef struct IMAPIProgress IMAPIProgress; | 
|  | typedef IMAPIProgress *LPMAPIPROGRESS; | 
|  | typedef struct IMAPIStatus IMAPIStatus; | 
|  | typedef IMAPIStatus *LPMAPISTATUS; | 
|  | 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 | 
|  | DECLARE_INTERFACE_(IMAPITable,IUnknown) | 
|  | { | 
|  | /*** IUnknown methods ***/ | 
|  | STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; | 
|  | STDMETHOD_(ULONG,AddRef)(THIS) PURE; | 
|  | STDMETHOD_(ULONG,Release)(THIS) PURE; | 
|  | /*** IMAPITable 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; | 
|  | }; | 
|  | #undef INTERFACE | 
|  |  | 
|  | #if !defined(__cplusplus) || defined(CINTERFACE) | 
|  | /*** 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 | 
|  |  | 
|  | typedef IMAPITable *LPMAPITABLE; | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMAPIAdviseSink interface | 
|  | */ | 
|  | #define INTERFACE IMAPIAdviseSink | 
|  | DECLARE_INTERFACE_(IMAPIAdviseSink,IUnknown) | 
|  | { | 
|  | /*** IUnknown methods ***/ | 
|  | STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; | 
|  | STDMETHOD_(ULONG,AddRef)(THIS) PURE; | 
|  | STDMETHOD_(ULONG,Release)(THIS) PURE; | 
|  | /*** IMAPIAdviseSink methods ***/ | 
|  | STDMETHOD(OnNotify)(THIS_ ULONG NumNotif, LPNOTIFICATION lpNotif) PURE; | 
|  | }; | 
|  | #undef INTERFACE | 
|  |  | 
|  | #if !defined(__cplusplus) || defined(CINTERFACE) | 
|  | /*** 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 | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMAPIProp interface | 
|  | */ | 
|  | #define INTERFACE IMAPIProp | 
|  | DECLARE_INTERFACE_(IMAPIProp,IUnknown) | 
|  | { | 
|  | /*** IUnknown methods ***/ | 
|  | STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; | 
|  | STDMETHOD_(ULONG,AddRef)(THIS) PURE; | 
|  | STDMETHOD_(ULONG,Release)(THIS) PURE; | 
|  | /*** IMAPIProp methods ***/ | 
|  | STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE; | 
|  | STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE; | 
|  | STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE; | 
|  | STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE; | 
|  | STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE; | 
|  | STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE; | 
|  | STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE; | 
|  | STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam, | 
|  | LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags, | 
|  | LPSPropProblemArray *lppProbs) PURE; | 
|  | STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, | 
|  | LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE; | 
|  | STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount, | 
|  | LPMAPINAMEID **lpppNames) PURE; | 
|  | STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE; | 
|  | }; | 
|  | #undef INTERFACE | 
|  |  | 
|  | #if !defined(__cplusplus) || defined(CINTERFACE) | 
|  | /*** IUnknown methods ***/ | 
|  | #define IMAPIProp_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b) | 
|  | #define IMAPIProp_AddRef(p)                    (p)->lpVtbl->AddRef(p) | 
|  | #define IMAPIProp_Release(p)                   (p)->lpVtbl->Release(p) | 
|  | /*** IMAPIProp methods ***/ | 
|  | #define IMAPIProp_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c) | 
|  | #define IMAPIProp_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a) | 
|  | #define IMAPIProp_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d) | 
|  | #define IMAPIProp_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b) | 
|  | #define IMAPIProp_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e) | 
|  | #define IMAPIProp_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c) | 
|  | #define IMAPIProp_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b) | 
|  | #define IMAPIProp_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i) | 
|  | #define IMAPIProp_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g) | 
|  | #define IMAPIProp_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) | 
|  | #define IMAPIProp_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d) | 
|  | #endif | 
|  |  | 
|  | typedef IMAPIProp *LPMAPIPROP; | 
|  |  | 
|  | 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*/ |