ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

mapidefs.h
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 1998 Justin Bradford
00003  * Copyright (c) 2009 Owen Rudge for CodeWeavers
00004  *
00005  * This library is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU Lesser General Public
00007  * License as published by the Free Software Foundation; either
00008  * version 2.1 of the License, or (at your option) any later version.
00009  *
00010  * This library is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  * Lesser General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU Lesser General Public
00016  * License along with this library; if not, write to the Free Software
00017  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00018  */
00019 
00020 #ifndef MAPIDEFS_H
00021 #define MAPIDEFS_H
00022 
00023 #ifndef __WINESRC__
00024 # include <windows.h>
00025 #endif
00026 
00027 #include <winerror.h>
00028 #include <objbase.h>
00029 #include <stddef.h>
00030 
00031 /* Some types from other headers */
00032 #ifndef __LHANDLE
00033 #define __LHANDLE
00034 typedef ULONG_PTR LHANDLE, *LPLHANDLE;
00035 #endif
00036 
00037 #ifndef _tagCY_DEFINED
00038 #define _tagCY_DEFINED
00039 typedef union tagCY
00040 {
00041     struct
00042     {
00043 #ifdef WORDS_BIGENDIAN
00044         LONG  Hi;
00045         ULONG Lo;
00046 #else
00047         ULONG Lo;
00048         LONG  Hi;
00049 #endif
00050     } DUMMYSTRUCTNAME;
00051     LONGLONG int64;
00052 } CY;
00053 typedef CY CURRENCY;
00054 #endif /* _tagCY_DEFINED */
00055 
00056 
00057 #ifndef _FILETIME_
00058 #define _FILETIME_
00059 typedef struct _FILETIME
00060 {
00061 #ifdef WORDS_BIGENDIAN
00062     DWORD dwHighDateTime;
00063     DWORD dwLowDateTime;
00064 #else
00065     DWORD dwLowDateTime;
00066     DWORD dwHighDateTime;
00067 #endif
00068 } FILETIME, *PFILETIME, *LPFILETIME;
00069 #endif
00070 
00071 /* Memory allocation routines */
00072 typedef SCODE (WINAPI ALLOCATEBUFFER)(ULONG,LPVOID*);
00073 typedef SCODE (WINAPI ALLOCATEMORE)(ULONG,LPVOID,LPVOID*);
00074 typedef ULONG (WINAPI FREEBUFFER)(LPVOID);
00075 
00076 typedef ALLOCATEBUFFER *LPALLOCATEBUFFER;
00077 typedef ALLOCATEMORE *LPALLOCATEMORE;
00078 typedef FREEBUFFER *LPFREEBUFFER;
00079 
00080 /* MAPI exposed interfaces */
00081 typedef const IID *LPCIID;
00082 
00083 typedef struct IAddrBook IAddrBook;
00084 typedef IAddrBook *LPADRBOOK;
00085 typedef struct IABContainer IABContainer;
00086 typedef IABContainer *LPABCONT;
00087 typedef struct IAttach *LPATTACH;
00088 typedef struct IDistList IDistList;
00089 typedef IDistList *LPDISTLIST;
00090 typedef struct IMailUser IMailUser;
00091 typedef IMailUser *LPMAILUSER;
00092 typedef struct IMAPIAdviseSink *LPMAPIADVISESINK;
00093 typedef struct IMAPIContainer *LPMAPICONTAINER;
00094 typedef struct IMAPIFolder *LPMAPIFOLDER;
00095 typedef struct IMAPIProgress IMAPIProgress;
00096 typedef IMAPIProgress *LPMAPIPROGRESS;
00097 typedef struct IMAPIStatus IMAPIStatus;
00098 typedef IMAPIStatus *LPMAPISTATUS;
00099 typedef struct IMessage *LPMESSAGE;
00100 typedef struct IProfSect IProfSect;
00101 typedef IProfSect *LPPROFSECT;
00102 typedef struct IProviderAdmin IProviderAdmin;
00103 typedef IProviderAdmin *LPPROVIDERADMIN;
00104 
00105 #ifndef MAPI_DIM
00106 # define MAPI_DIM 1 /* Default to one dimension for variable length arrays */
00107 #endif
00108 
00109 /* Flags for abFlags[0] */
00110 #define MAPI_NOTRESERVED 0x08
00111 #define MAPI_NOW         0x10
00112 #define MAPI_THISSESSION 0x20
00113 #define MAPI_NOTRECIP    0x40
00114 #define MAPI_SHORTTERM   0x80
00115 
00116 /* Flags for abFlags[1]  */
00117 #define MAPI_COMPOUND    0x80
00118 
00119 typedef struct _ENTRYID
00120 {
00121     BYTE abFlags[4];
00122     BYTE ab[MAPI_DIM];
00123 } ENTRYID, *LPENTRYID;
00124 
00125 /* MAPI GUID's */
00126 typedef struct _MAPIUID
00127 {
00128     BYTE ab[sizeof(GUID)];
00129 } MAPIUID, *LPMAPIUID;
00130 
00131 #define IsEqualMAPIUID(pl,pr) (!memcmp((pl),(pr),sizeof(MAPIUID)))
00132 
00133 #define MAPI_ONE_OFF_UID { 0x81,0x2b,0x1f,0xa4,0xbe,0xa3,0x10,0x19,0x9d,0x6e, \
00134                            0x00,0xdd,0x01,0x0f,0x54,0x02 }
00135 #define MAPI_ONE_OFF_UNICODE      0x8000
00136 #define MAPI_ONE_OFF_NO_RICH_INFO 0x0001
00137 
00138 /* Object types */
00139 #define MAPI_STORE    1U
00140 #define MAPI_ADDRBOOK 2U
00141 #define MAPI_FOLDER   3U
00142 #define MAPI_ABCONT   4U
00143 #define MAPI_MESSAGE  5U
00144 #define MAPI_MAILUSER 6U
00145 #define MAPI_ATTACH   7U
00146 #define MAPI_DISTLIST 8U
00147 #define MAPI_PROFSECT 9U
00148 #define MAPI_STATUS   10U
00149 #define MAPI_SESSION  11U
00150 #define MAPI_FORMINFO 12U
00151 
00152 /* Flags for various calls */
00153 #define MAPI_MODIFY                   0x00000001U /* Object can be modified */
00154 #define MAPI_CREATE                   0x00000002U /* Object can be created */
00155 #define MAPI_ACCESS_MODIFY            MAPI_MODIFY /* Want write access */
00156 #define MAPI_ACCESS_READ              0x00000002U /* Want read access */
00157 #define MAPI_ACCESS_DELETE            0x00000004U /* Want delete access */
00158 #define MAPI_ACCESS_CREATE_HIERARCHY  0x00000008U
00159 #define MAPI_ACCESS_CREATE_CONTENTS   0x00000010U
00160 #define MAPI_ACCESS_CREATE_ASSOCIATED 0x00000020U
00161 #define MAPI_USE_DEFAULT              0x00000040U
00162 #define MAPI_UNICODE                  0x80000000U /* Strings in this call are Unicode */
00163 
00164 #if defined (UNICODE) || defined (__WINESRC__)
00165 #define fMapiUnicode MAPI_UNICODE
00166 #else
00167 #define fMapiUnicode 0U
00168 #endif
00169 
00170 /* IMAPISession::OpenMessageStore() flags */
00171 #define MDB_NO_DIALOG           0x00000001
00172 
00173 /* Types of message receivers */
00174 #ifndef MAPI_ORIG
00175 #define MAPI_ORIG      0          /* The original author */
00176 #define MAPI_TO        1          /* The primary message receiver */
00177 #define MAPI_CC        2          /* A carbon copy receiver */
00178 #define MAPI_BCC       3          /* A blind carbon copy receiver */
00179 #define MAPI_P1        0x10000000 /* A message resend */
00180 #define MAPI_SUBMITTED 0x80000000 /* This message has already been sent */
00181 #endif
00182 
00183 #ifndef cchProfileNameMax
00184 #define cchProfileNameMax 64 /* Maximum length of a profile name */
00185 #define cchProfilePassMax 64 /* Maximum length of a profile password */
00186 #endif
00187 
00188 /* Properties: The are the contents of cells in MAPI tables, as well as the
00189  * values returned when object properties are queried.
00190  */
00191 
00192 /* Property types */
00193 #define PT_UNSPECIFIED 0U
00194 #define PT_NULL        1U
00195 #define PT_I2          2U
00196 #define PT_SHORT       PT_I2
00197 #define PT_LONG        3U
00198 #define PT_I4          PT_LONG
00199 #define PT_R4          4U
00200 #define PT_FLOAT       PT_R4
00201 #define PT_DOUBLE      5U
00202 #define PT_R8          PT_DOUBLE
00203 #define PT_CURRENCY    6U
00204 #define PT_APPTIME     7U
00205 #define PT_ERROR       10U
00206 #define PT_BOOLEAN     11U
00207 #define PT_OBJECT      13U
00208 #define PT_I8          20U
00209 #define PT_LONGLONG    PT_I8
00210 #define PT_STRING8     30U
00211 #define PT_UNICODE     31U
00212 #define PT_SYSTIME     64U
00213 #define PT_CLSID       72U
00214 #define PT_BINARY      258U
00215 
00216 #define MV_FLAG     0x1000 /* This property type is multi-valued (an array) */
00217 #define MV_INSTANCE 0x2000
00218 #define MVI_FLAG    (MV_FLAG|MV_INSTANCE)
00219 #define MVI_PROP(t) ((t)|MVI_FLAG)
00220 
00221 #ifndef WINE_NO_UNICODE_MACROS
00222 # ifdef UNICODE
00223 # define PT_TSTRING      PT_UNICODE
00224 # define PT_MV_TSTRING   (MV_FLAG|PT_UNICODE)
00225 # define LPSZ            lpszW
00226 # define LPPSZ           lppszW
00227 # define MVSZ            MVszW
00228 # else
00229 # define PT_TSTRING      PT_STRING8
00230 # define PT_MV_TSTRING   (MV_FLAG|PT_STRING8)
00231 # define LPSZ            lpszA
00232 # define LPPSZ           lppszA
00233 # define MVSZ            MVszA
00234 # endif
00235 #endif
00236 
00237 #define PROP_TYPE_MASK  0xFFFFU
00238 #define PROP_TYPE(t)    ((t) & PROP_TYPE_MASK)
00239 #define PROP_ID(t)      ((t) >> 16)
00240 #define PROP_TAG(t,id)  (((id) << 16) | t)
00241 #define PROP_ID_NULL    0
00242 #define PROP_ID_INVALID 0xFFFF
00243 #define PR_NULL         PROP_TAG(PT_NULL, PROP_ID_NULL)
00244 
00245 #define CHANGE_PROP_TYPE(t,typ) ((0xFFFF0000 & t) | typ)
00246 
00247 /* Multi-valued property types */
00248 #define PT_MV_I2       (MV_FLAG|PT_I2)
00249 #define PT_MV_SHORT    PT_MV_I2
00250 #define PT_MV_LONG     (MV_FLAG|PT_LONG)
00251 #define PT_MV_I4       PT_MV_LONG
00252 #define PT_MV_R4       (MV_FLAG|PT_R4)
00253 #define PT_MV_FLOAT    PT_MV_R4
00254 #define PT_MV_DOUBLE   (MV_FLAG|PT_DOUBLE)
00255 #define PT_MV_R8       PT_MV_DOUBLE
00256 #define PT_MV_CURRENCY (MV_FLAG|PT_CURRENCY)
00257 #define PT_MV_APPTIME  (MV_FLAG|PT_APPTIME)
00258 #define PT_MV_SYSTIME  (MV_FLAG|PT_SYSTIME)
00259 #define PT_MV_STRING8  (MV_FLAG|PT_STRING8)
00260 #define PT_MV_BINARY   (MV_FLAG|PT_BINARY)
00261 #define PT_MV_UNICODE  (MV_FLAG|PT_UNICODE)
00262 #define PT_MV_CLSID    (MV_FLAG|PT_CLSID)
00263 #define PT_MV_I8       (MV_FLAG|PT_I8)
00264 #define PT_MV_LONGLONG PT_MV_I8
00265 
00266 
00267 /* The property tag structure. This describes a list of columns */
00268 typedef struct _SPropTagArray
00269 {
00270     ULONG cValues;              /* Number of elements in aulPropTag */
00271     ULONG aulPropTag[MAPI_DIM]; /* Property tags */
00272 } SPropTagArray, *LPSPropTagArray;
00273 
00274 #define CbNewSPropTagArray(c) (offsetof(SPropTagArray,aulPropTag)+(c)*sizeof(ULONG))
00275 #define CbSPropTagArray(p)    CbNewSPropTagArray((p)->cValues)
00276 #define SizedSPropTagArray(n,id) \
00277     struct _SPropTagArray_##id { ULONG cValues; ULONG aulPropTag[n]; } id
00278 
00279 /* Multi-valued PT_APPTIME property value */
00280 typedef struct _SAppTimeArray
00281 {
00282     ULONG   cValues; /* Number of doubles in lpat */
00283     double *lpat;    /* Pointer to double array of length cValues */
00284 } SAppTimeArray;
00285 
00286 /* PT_BINARY property value */
00287 typedef struct _SBinary
00288 {
00289     ULONG  cb;  /* Number of bytes in lpb */
00290     LPBYTE lpb; /* Pointer to byte array of length cb */
00291 } SBinary, *LPSBinary;
00292 
00293 /* Multi-valued PT_BINARY property value */
00294 typedef struct _SBinaryArray
00295 {
00296     ULONG    cValues; /* Number of SBinarys in lpbin */
00297     SBinary *lpbin;   /* Pointer to SBinary array of length cValues */
00298 } SBinaryArray;
00299 
00300 typedef SBinaryArray ENTRYLIST, *LPENTRYLIST;
00301 
00302 /* Multi-valued PT_CY property value */
00303 typedef struct _SCurrencyArray
00304 {
00305     ULONG  cValues; /* Number of CYs in lpcu */
00306     CY    *lpcur;   /* Pointer to CY array of length cValues */
00307 } SCurrencyArray;
00308 
00309 /* Multi-valued PT_SYSTIME property value */
00310 typedef struct _SDateTimeArray
00311 {
00312     ULONG     cValues; /* Number of FILETIMEs in lpft */
00313     FILETIME *lpft;    /* Pointer to FILETIME array of length cValues */
00314 } SDateTimeArray;
00315 
00316 /* Multi-valued PT_DOUBLE property value */
00317 typedef struct _SDoubleArray
00318 {
00319     ULONG   cValues; /* Number of doubles in lpdbl */
00320     double *lpdbl;   /* Pointer to double array of length cValues */
00321 } SDoubleArray;
00322 
00323 /* Multi-valued PT_CLSID property value */
00324 typedef struct _SGuidArray
00325 {
00326     ULONG cValues; /* Number of GUIDs in lpguid */
00327     GUID *lpguid;  /* Pointer to GUID array of length cValues */
00328 } SGuidArray;
00329 
00330 /* Multi-valued PT_LONGLONG property value */
00331 typedef struct _SLargeIntegerArray
00332 {
00333     ULONG          cValues; /* Number of long64s in lpli */
00334     LARGE_INTEGER *lpli;    /* Pointer to long64 array of length cValues */
00335 } SLargeIntegerArray;
00336 
00337 /* Multi-valued PT_LONG property value */
00338 typedef struct _SLongArray
00339 {
00340     ULONG  cValues; /* Number of longs in lpl */
00341     LONG  *lpl;     /* Pointer to long array of length cValues */
00342 } SLongArray;
00343 
00344 /* Multi-valued PT_STRING8 property value */
00345 typedef struct _SLPSTRArray
00346 {
00347     ULONG  cValues; /* Number of Ascii strings in lppszA */
00348     LPSTR *lppszA;  /* Pointer to Ascii string array of length cValues */
00349 } SLPSTRArray;
00350 
00351 /* Multi-valued PT_FLOAT property value */
00352 typedef struct _SRealArray
00353 {
00354     ULONG cValues; /* Number of floats in lpflt */
00355     float *lpflt;  /* Pointer to float array of length cValues */
00356 } SRealArray;
00357 
00358 /* Multi-valued PT_SHORT property value */
00359 typedef struct _SShortArray
00360 {
00361     ULONG      cValues; /* Number of shorts in lpb */
00362     short int *lpi;     /* Pointer to short array of length cValues */
00363 } SShortArray;
00364 
00365 /* Multi-valued PT_UNICODE property value */
00366 typedef struct _SWStringArray
00367 {
00368     ULONG   cValues; /* Number of Unicode strings in lppszW */
00369     LPWSTR *lppszW;  /* Pointer to Unicode string array of length cValues */
00370 } SWStringArray;
00371 
00372 /* A property value */
00373 typedef union _PV
00374 {
00375     short int          i;
00376     LONG               l;
00377     ULONG              ul;
00378     float              flt;
00379     double             dbl;
00380     unsigned short     b;
00381     CY                 cur;
00382     double             at;
00383     FILETIME           ft;
00384     LPSTR              lpszA;
00385     SBinary            bin;
00386     LPWSTR             lpszW;
00387     LPGUID             lpguid;
00388     LARGE_INTEGER      li;
00389     SShortArray        MVi;
00390     SLongArray         MVl;
00391     SRealArray         MVflt;
00392     SDoubleArray       MVdbl;
00393     SCurrencyArray     MVcur;
00394     SAppTimeArray      MVat;
00395     SDateTimeArray     MVft;
00396     SBinaryArray       MVbin;
00397     SLPSTRArray        MVszA;
00398     SWStringArray      MVszW;
00399     SGuidArray         MVguid;
00400     SLargeIntegerArray MVli;
00401     SCODE              err;
00402     LONG               x;
00403 } __UPV;
00404 
00405 /* Property value structure. This is essentially a mini-Variant */
00406 typedef struct _SPropValue
00407 {
00408     ULONG     ulPropTag;  /* The property type */
00409     ULONG     dwAlignPad; /* Alignment, treat as reserved */
00410     union _PV Value;      /* The property value */
00411 } SPropValue, *LPSPropValue;
00412 
00413 /* Structure describing a table row (a collection of property values) */
00414 typedef struct _SRow
00415 {
00416     ULONG        ulAdrEntryPad; /* Padding, treat as reserved */
00417     ULONG        cValues;       /* Count of property values in lpProbs */
00418     LPSPropValue lpProps;       /* Pointer to an array of property values of length cValues */
00419 } SRow, *LPSRow;
00420 
00421 /* Structure describing a set of table rows */
00422 typedef struct _SRowSet
00423 {
00424     ULONG cRows;          /* Count of rows in aRow */
00425     SRow  aRow[MAPI_DIM]; /* Array of rows of length cRows */
00426 } SRowSet, *LPSRowSet;
00427 
00428 #define CbNewSRowSet(c) (offsetof(SRowSet,aRow)+(c)*sizeof(SRow))
00429 #define CbSRowSet(p)    CbNewSRowSet((p)->cRows)
00430 #define SizedSRowSet(n,id) \
00431     struct _SRowSet_##id { ULONG cRows; SRow aRow[n]; } id
00432 
00433 /* Structure describing a problem with a property */
00434 typedef struct _SPropProblem
00435 {
00436     ULONG ulIndex;   /* Index of the property */
00437     ULONG ulPropTag; /* Property tag of the property */
00438     SCODE scode;     /* Error code of the problem */
00439 } SPropProblem, *LPSPropProblem;
00440 
00441 /* A collection of property problems */
00442 typedef struct _SPropProblemArray
00443 {
00444     ULONG        cProblem;           /* Number of problems in aProblem */
00445     SPropProblem aProblem[MAPI_DIM]; /* Array of problems of length cProblem */
00446 } SPropProblemArray, *LPSPropProblemArray;
00447 
00448 /* FPropContainsProp flags */
00449 #define FL_FULLSTRING     0x00000ul /* Exact string match */
00450 #define FL_SUBSTRING      0x00001ul /* Substring match */
00451 #define FL_PREFIX         0x00002ul /* Prefix match */
00452 #define FL_IGNORECASE     0x10000ul /* Case insensitive */
00453 #define FL_IGNORENONSPACE 0x20000ul /* Ignore non spacing characters */
00454 #define FL_LOOSE          0x40000ul /* Try very hard to match */
00455 
00456 
00457 /* Table types returned by IMAPITable_GetStatus() */
00458 #define TBLTYPE_SNAPSHOT 0U /* Table is fixed at creation time and contents do not change */
00459 #define TBLTYPE_KEYSET   1U /* Table has a fixed number of rows, but row values may change */
00460 #define TBLTYPE_DYNAMIC  2U /* Table values and the number of rows may change */
00461 
00462 /* Table status returned by IMAPITable_GetStatus() */
00463 #define TBLSTAT_COMPLETE       0U  /* All operations have completed (normal status) */
00464 #define TBLSTAT_QCHANGED       7U  /* Table data has changed as expected */
00465 #define TBLSTAT_SORTING        9U  /* Table is being asynchronously sorted */
00466 #define TBLSTAT_SORT_ERROR     10U /* An error occurred while sorting the table */
00467 #define TBLSTAT_SETTING_COLS   11U /* Table columns are being asynchronously changed */
00468 #define TBLSTAT_SETCOL_ERROR   13U /* An error occurred during column changing */
00469 #define TBLSTAT_RESTRICTING    14U /* Table rows are being asynchronously restricted */
00470 #define TBLSTAT_RESTRICT_ERROR 15U /* An error occurred during row restriction */
00471 
00472 /* Flags for IMAPITable operations that can be asynchronous */
00473 #define TBL_NOWAIT 1U         /* Perform the operation asynchronously */
00474 #define TBL_BATCH  2U         /* Perform the operation when the results are needed */
00475 #define TBL_ASYNC  TBL_NOWAIT /* Synonym for TBL_NOWAIT */
00476 
00477 /* Flags for IMAPITable_FindRow() */
00478 #define DIR_BACKWARD 1U /* Read rows backwards from the start bookmark */
00479 
00480 /* Table bookmarks */
00481 typedef ULONG BOOKMARK;
00482 
00483 #define BOOKMARK_BEGINNING ((BOOKMARK)0) /* The first row */
00484 #define BOOKMARK_CURRENT   ((BOOKMARK)1) /* The curent table row */
00485 #define BOOKMARK_END       ((BOOKMARK)2) /* The last row */
00486 
00487 /* Row restrictions */
00488 typedef struct _SRestriction* LPSRestriction;
00489 
00490 typedef struct _SAndRestriction
00491 {
00492     ULONG          cRes;
00493     LPSRestriction lpRes;
00494 } SAndRestriction;
00495 
00496 typedef struct _SBitMaskRestriction
00497 {
00498     ULONG relBMR;
00499     ULONG ulPropTag;
00500     ULONG ulMask;
00501 } SBitMaskRestriction;
00502 
00503 typedef struct _SCommentRestriction
00504 {
00505     ULONG          cValues;
00506     LPSRestriction lpRes;
00507     LPSPropValue   lpProp;
00508 } SCommentRestriction;
00509 
00510 #define RELOP_LT 0U
00511 #define RELOP_LE 1U
00512 #define RELOP_GT 2U
00513 #define RELOP_GE 3U
00514 #define RELOP_EQ 4U
00515 #define RELOP_NE 5U
00516 #define RELOP_RE 6U
00517 
00518 typedef struct _SComparePropsRestriction
00519 {
00520     ULONG relop;
00521     ULONG ulPropTag1;
00522     ULONG ulPropTag2;
00523 } SComparePropsRestriction;
00524 
00525 typedef struct _SContentRestriction
00526 {
00527     ULONG        ulFuzzyLevel;
00528     ULONG        ulPropTag;
00529     LPSPropValue lpProp;
00530 } SContentRestriction;
00531 
00532 typedef struct _SExistRestriction
00533 {
00534     ULONG ulReserved1;
00535     ULONG ulPropTag;
00536     ULONG ulReserved2;
00537 } SExistRestriction;
00538 
00539 typedef struct _SNotRestriction
00540 {
00541     ULONG          ulReserved;
00542     LPSRestriction lpRes;
00543 } SNotRestriction;
00544 
00545 typedef struct _SOrRestriction
00546 {
00547     ULONG          cRes;
00548     LPSRestriction lpRes;
00549 } SOrRestriction;
00550 
00551 typedef struct _SPropertyRestriction
00552 {
00553     ULONG        relop;
00554     ULONG        ulPropTag;
00555     LPSPropValue lpProp;
00556 } SPropertyRestriction;
00557 
00558 typedef struct _SSizeRestriction
00559 {
00560     ULONG relop;
00561     ULONG ulPropTag;
00562     ULONG cb;
00563 } SSizeRestriction;
00564 
00565 typedef struct _SSubRestriction
00566 {
00567     ULONG          ulSubObject;
00568     LPSRestriction lpRes;
00569 } SSubRestriction;
00570 
00571 /* Restriction types */
00572 #define RES_AND            0U
00573 #define RES_OR             1U
00574 #define RES_NOT            2U
00575 #define RES_CONTENT        3U
00576 #define RES_PROPERTY       4U
00577 #define RES_COMPAREPROPS   5U
00578 #define RES_BITMASK        6U
00579 #define RES_SIZE           7U
00580 #define RES_EXIST          8U
00581 #define RES_SUBRESTRICTION 9U
00582 #define RES_COMMENT        10U
00583 
00584 typedef struct _SRestriction
00585 {
00586     ULONG rt;
00587     union
00588     {
00589         SAndRestriction          resAnd;
00590         SBitMaskRestriction      resBitMask;
00591         SCommentRestriction      resComment;
00592         SComparePropsRestriction resCompareProps;
00593         SContentRestriction      resContent;
00594         SExistRestriction        resExist;
00595         SNotRestriction          resNot;
00596         SOrRestriction           resOr;
00597         SPropertyRestriction     resProperty;
00598         SSizeRestriction         resSize;
00599         SSubRestriction          resSub;
00600     } res;
00601 } SRestriction;
00602 
00603 /* Errors */
00604 typedef struct _MAPIERROR
00605 {
00606     ULONG  ulVersion;       /* Mapi version */
00607 #if defined (UNICODE) || defined (__WINESRC__)
00608     LPWSTR lpszError;       /* Error and component strings. These are Ascii */
00609     LPWSTR lpszComponent;   /* unless the MAPI_UNICODE flag is passed in */
00610 #else
00611     LPSTR  lpszError;
00612     LPSTR  lpszComponent;
00613 #endif
00614     ULONG  ulLowLevelError;
00615     ULONG  ulContext;
00616 } MAPIERROR, *LPMAPIERROR;
00617 
00618 /* Sorting */
00619 #define TABLE_SORT_ASCEND  0U
00620 #define TABLE_SORT_DESCEND 1U
00621 #define TABLE_SORT_COMBINE 2U
00622 
00623 typedef struct _SSortOrder
00624 {
00625     ULONG ulPropTag;
00626     ULONG ulOrder;
00627 } SSortOrder, *LPSSortOrder;
00628 
00629 typedef struct _SSortOrderSet
00630 {
00631     ULONG      cSorts;
00632     ULONG      cCategories;
00633     ULONG      cExpanded;
00634     SSortOrder aSort[MAPI_DIM];
00635 } SSortOrderSet, * LPSSortOrderSet;
00636 
00637 #define MNID_ID     0
00638 #define MNID_STRING 1
00639 
00640 typedef struct _MAPINAMEID
00641 {
00642     LPGUID lpguid;
00643     ULONG ulKind;
00644     union
00645     {
00646         LONG lID;
00647         LPWSTR lpwstrName;
00648     } Kind;
00649 } MAPINAMEID, *LPMAPINAMEID;
00650 
00651 /* Desired notification types (bitflags) */
00652 #define fnevCriticalError        0x00000001UL
00653 #define fnevNewMail              0x00000002UL
00654 #define fnevObjectCreated        0x00000004UL
00655 #define fnevObjectDeleted        0x00000008UL
00656 #define fnevObjectModified       0x00000010UL
00657 #define fnevObjectMoved          0x00000020UL
00658 #define fnevObjectCopied         0x00000040UL
00659 #define fnevSearchComplete       0x00000080UL
00660 #define fnevTableModified        0x00000100UL
00661 #define fnevStatusObjectModified 0x00000200UL
00662 #define fnevReservedForMapi      0x40000000UL
00663 #define fnevExtended             0x80000000UL
00664 
00665 /* Type of notification event */
00666 #define TABLE_CHANGED       1U
00667 #define TABLE_ERROR         2U
00668 #define TABLE_ROW_ADDED     3U
00669 #define TABLE_ROW_DELETED   4U
00670 #define TABLE_ROW_MODIFIED  5U
00671 #define TABLE_SORT_DONE     6U
00672 #define TABLE_RESTRICT_DONE 7U
00673 #define TABLE_SETCOL_DONE   8U
00674 #define TABLE_RELOAD        9U
00675 
00676 /* fnevCriticalError notification */
00677 typedef struct _ERROR_NOTIFICATION
00678 {
00679     ULONG       cbEntryID;
00680     LPENTRYID   lpEntryID;
00681     SCODE       scode;
00682     ULONG       ulFlags;
00683     LPMAPIERROR lpMAPIError;
00684 } ERROR_NOTIFICATION;
00685 
00686 /* fnevNewMail notification */
00687 typedef struct _NEWMAIL_NOTIFICATION
00688 {
00689     ULONG     cbEntryID;
00690     LPENTRYID lpEntryID;
00691     ULONG     cbParentID;
00692     LPENTRYID lpParentID;
00693     ULONG     ulFlags;
00694 #if defined (UNICODE) || defined (__WINESRC__)
00695     LPWSTR    lpszMessageClass;
00696 #else
00697     LPSTR     lpszMessageClass;
00698 #endif
00699     ULONG     ulMessageFlags;
00700 } NEWMAIL_NOTIFICATION;
00701 
00702 /* fnevObjectCreated/Deleted/Modified/Moved/Copied notification */
00703 typedef struct _OBJECT_NOTIFICATION
00704 {
00705     ULONG           cbEntryID;
00706     LPENTRYID       lpEntryID;
00707     ULONG           ulObjType;
00708     ULONG           cbParentID;
00709     LPENTRYID       lpParentID;
00710     ULONG           cbOldID;
00711     LPENTRYID       lpOldID;
00712     ULONG           cbOldParentID;
00713     LPENTRYID       lpOldParentID;
00714     LPSPropTagArray lpPropTagArray;
00715 } OBJECT_NOTIFICATION;
00716 
00717 /* fnevTableModified notification */
00718 typedef struct _TABLE_NOTIFICATION
00719 {
00720     ULONG      ulTableEvent;
00721     HRESULT    hResult;
00722     SPropValue propIndex;
00723     SPropValue propPrior;
00724     SRow       row;
00725     ULONG      ulPad;
00726 } TABLE_NOTIFICATION;
00727 
00728 /* fnevExtended notification */
00729 typedef struct _EXTENDED_NOTIFICATION
00730 {
00731     ULONG  ulEvent;
00732     ULONG  cb;
00733     LPBYTE pbEventParameters;
00734 } EXTENDED_NOTIFICATION;
00735 
00736 /* fnevStatusObjectModified notification */
00737 typedef struct
00738 {
00739     ULONG        cbEntryID;
00740     LPENTRYID    lpEntryID;
00741     ULONG        cValues;
00742     LPSPropValue lpPropVals;
00743 } STATUS_OBJECT_NOTIFICATION;
00744 
00745 /* The notification structure passed to advise sinks */
00746 typedef struct _NOTIFICATION
00747 {
00748     ULONG ulEventType;
00749     ULONG ulAlignPad;
00750     union
00751     {
00752         ERROR_NOTIFICATION         err;
00753         NEWMAIL_NOTIFICATION       newmail;
00754         OBJECT_NOTIFICATION        obj;
00755         TABLE_NOTIFICATION         tab;
00756         EXTENDED_NOTIFICATION      ext;
00757         STATUS_OBJECT_NOTIFICATION statobj;
00758     } info;
00759 } NOTIFICATION, *LPNOTIFICATION;
00760 
00761 typedef LONG (WINAPI NOTIFCALLBACK)(LPVOID,ULONG,LPNOTIFICATION);
00762 typedef NOTIFCALLBACK *LPNOTIFCALLBACK;
00763 
00764 /* IMAPIContainer::OpenEntry flags */
00765 #define MAPI_BEST_ACCESS    0x00000010
00766 
00767 /*****************************************************************************
00768  * IMAPITable interface
00769  *
00770  * This is the read-only 'view' over an I(MAPI)TableData object.
00771  */
00772 #define INTERFACE IMAPITable
00773 DECLARE_INTERFACE_(IMAPITable,IUnknown)
00774 {
00775     /*** IUnknown methods ***/
00776     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
00777     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
00778     STDMETHOD_(ULONG,Release)(THIS) PURE;
00779     /*** IMAPITable methods ***/
00780     STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppError) PURE;
00781     STDMETHOD(Advise)(THIS_ ULONG ulMask, LPMAPIADVISESINK lpSink, ULONG *lpCxn) PURE;
00782     STDMETHOD(Unadvise)(THIS_ ULONG ulCxn) PURE;
00783     STDMETHOD(GetStatus)(THIS_ ULONG *lpStatus, ULONG *lpType) PURE;
00784     STDMETHOD(SetColumns)(THIS_ LPSPropTagArray lpProps, ULONG ulFlags) PURE;
00785     STDMETHOD(QueryColumns)(THIS_ ULONG ulFlags, LPSPropTagArray *lpCols) PURE;
00786     STDMETHOD(GetRowCount)(THIS_ ULONG ulFlags, ULONG *lpCount) PURE;
00787     STDMETHOD(SeekRow)(THIS_ BOOKMARK lpStart, LONG lRows, LONG *lpSeeked) PURE;
00788     STDMETHOD(SeekRowApprox)(THIS_ ULONG ulNum, ULONG ulDenom) PURE;
00789     STDMETHOD(QueryPosition)(THIS_ ULONG *lpRow, ULONG *lpNum, ULONG *lpDenom) PURE;
00790     STDMETHOD(FindRow)(THIS_ LPSRestriction lpRestrict, BOOKMARK lpOrigin, ULONG ulFlags) PURE;
00791     STDMETHOD(Restrict)(THIS_ LPSRestriction lpRestrict, ULONG ulFlags) PURE;
00792     STDMETHOD(CreateBookmark)(THIS_ BOOKMARK *lppPos) PURE;
00793     STDMETHOD(FreeBookmark)(THIS_ BOOKMARK lpPos) PURE;
00794     STDMETHOD(SortTable)(THIS_ LPSSortOrderSet lpSortOpts, ULONG ulFlags) PURE;
00795     STDMETHOD(QuerySortOrder)(THIS_ LPSSortOrderSet *lppSortOpts) PURE;
00796     STDMETHOD(QueryRows)(THIS_ LONG lRows, ULONG ulFlags, LPSRowSet *lppRows) PURE;
00797     STDMETHOD(Abort) (THIS) PURE;
00798     STDMETHOD(ExpandRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulRows,
00799                          ULONG ulFlags, LPSRowSet *lppRows, ULONG *lpMore) PURE;
00800     STDMETHOD(CollapseRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulFlags, ULONG *lpRows) PURE;
00801     STDMETHOD(WaitForCompletion)(THIS_ ULONG ulFlags, ULONG ulTime, ULONG *lpState) PURE;
00802     STDMETHOD(GetCollapseState)(THIS_ ULONG ulFlags, ULONG cbKey, LPBYTE lpKey,
00803                                 ULONG *lpStateLen, LPBYTE *lpState) PURE;
00804     STDMETHOD(SetCollapseState)(THIS_ ULONG ulFlags, ULONG ulLen,
00805                                 LPBYTE lpStart, BOOKMARK *lppWhere) PURE;
00806 };
00807 #undef INTERFACE
00808 
00809 #if !defined(__cplusplus) || defined(CINTERFACE)
00810         /*** IUnknown methods ***/
00811 #define IMAPITable_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(p,a,b)
00812 #define IMAPITable_AddRef(p)                     (p)->lpVtbl->AddRef(p)
00813 #define IMAPITable_Release(p)                    (p)->lpVtbl->Release(p)
00814         /*** IMAPITable methods ***/
00815 #define IMAPITable_GetLastError(p,a,b,c)         (p)->lpVtbl->GetLastError(p,a,b,c)
00816 #define IMAPITable_Advise(p,a,b,c)               (p)->lpVtbl->Advise(p,a,b,c)
00817 #define IMAPITable_Unadvise(p,a)                 (p)->lpVtbl->Unadvise(p,a)
00818 #define IMAPITable_GetStatus(p,a,b)              (p)->lpVtbl->GetStatus(p,a,b)
00819 #define IMAPITable_SetColumns(p,a,b)             (p)->lpVtbl->SetColumns(p,a,b)
00820 #define IMAPITable_QueryColumns(p,a,b)           (p)->lpVtbl->QueryColumns(p,a,b)
00821 #define IMAPITable_GetRowCount(p,a,b)            (p)->lpVtbl->GetRowCount(p,a,b)
00822 #define IMAPITable_SeekRow(p,a,b)                (p)->lpVtbl->SeekRow(p,a,b)
00823 #define IMAPITable_SeekRowApprox(p,a,b)          (p)->lpVtbl->SeekRowApprox(p,a,b)
00824 #define IMAPITable_QueryPosition(p,a,b)          (p)->lpVtbl->QueryPosition(p,a,b)
00825 #define IMAPITable_FindRow(p,a,b,c)              (p)->lpVtbl->FindRow(p,a,b,c)
00826 #define IMAPITable_Restrict(p,a,b)               (p)->lpVtbl->Recstrict(p,a,b)
00827 #define IMAPITable_CreateBookmark(p,a)           (p)->lpVtbl->CreateBookmark(p,a)
00828 #define IMAPITable_FreeBookmark(p,a)             (p)->lpVtbl->FreeBookmark(p,a)
00829 #define IMAPITable_SortTable(p,a,b)              (p)->lpVtbl->SortTable(p,a,b)
00830 #define IMAPITable_QuerySortOrder(p,a)           (p)->lpVtbl->QuerySortOrder(p,a)
00831 #define IMAPITable_QueryRows(p,a,b,c)            (p)->lpVtbl->QueryRows(p,a,b,c)
00832 #define IMAPITable_Abort(p)                      (p)->lpVtbl->Abort(p)
00833 #define IMAPITable_ExpandRow(p,a,b,c,d,e,f)      (p)->lpVtbl->ExpandRow(p,a,b,c,d,e,f)
00834 #define IMAPITable_CollapseRow(p,a,b,c,d)        (p)->lpVtbl->CollapseRow(p,a,b,c,d)
00835 #define IMAPITable_WaitForCompletion(p,a,b,c)    (p)->lpVtbl->WaitForCompletion(p,a,b,c)
00836 #define IMAPITable_GetCollapseState(p,a,b,c,d,e) (p)->lpVtbl->GetCollapseState(p,a,b,c,d,e)
00837 #define IMAPITable_SetCollapseState(p,a,b,c,d)   (p)->lpVtbl->SetCollapseState(p,a,b,c,d)
00838 #endif
00839 
00840 typedef IMAPITable *LPMAPITABLE;
00841 
00842 /*****************************************************************************
00843  * IMAPIAdviseSink interface
00844  */
00845 #define INTERFACE IMAPIAdviseSink
00846 DECLARE_INTERFACE_(IMAPIAdviseSink,IUnknown)
00847 {
00848     /*** IUnknown methods ***/
00849     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
00850     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
00851     STDMETHOD_(ULONG,Release)(THIS) PURE;
00852     /*** IMAPIAdviseSink methods ***/
00853     STDMETHOD(OnNotify)(THIS_ ULONG NumNotif, LPNOTIFICATION lpNotif) PURE;
00854 };
00855 #undef INTERFACE
00856 
00857 #if !defined(__cplusplus) || defined(CINTERFACE)
00858         /*** IUnknown methods ***/
00859 #define IMAPIAdviseSink_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
00860 #define IMAPIAdviseSink_AddRef(p)             (p)->lpVtbl->AddRef(p)
00861 #define IMAPIAdviseSink_Release(p)            (p)->lpVtbl->Release(p)
00862         /*** IMAPIAdviseSink methods ***/
00863 #define IMAPIAdviseSink_OnNotify(p,a,b)       (p)->lpVtbl->OnNotify(p,a,b)
00864 #endif
00865 
00866 /*****************************************************************************
00867  * IMAPIProp interface
00868  */
00869 #define INTERFACE IMAPIProp
00870 DECLARE_INTERFACE_(IMAPIProp,IUnknown)
00871 {
00872     /*** IUnknown methods ***/
00873     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
00874     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
00875     STDMETHOD_(ULONG,Release)(THIS) PURE;
00876     /*** IMAPIProp methods ***/
00877     STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
00878     STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
00879     STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
00880     STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
00881     STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
00882     STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
00883     STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
00884     STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
00885                       LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
00886                       LPSPropProblemArray *lppProbs) PURE;
00887     STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
00888                          LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
00889     STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
00890                                LPMAPINAMEID **lpppNames) PURE;
00891     STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
00892 };
00893 #undef INTERFACE
00894 
00895 #if !defined(__cplusplus) || defined(CINTERFACE)
00896         /*** IUnknown methods ***/
00897 #define IMAPIProp_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
00898 #define IMAPIProp_AddRef(p)                    (p)->lpVtbl->AddRef(p)
00899 #define IMAPIProp_Release(p)                   (p)->lpVtbl->Release(p)
00900         /*** IMAPIProp methods ***/
00901 #define IMAPIProp_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
00902 #define IMAPIProp_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
00903 #define IMAPIProp_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
00904 #define IMAPIProp_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
00905 #define IMAPIProp_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
00906 #define IMAPIProp_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
00907 #define IMAPIProp_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
00908 #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)
00909 #define IMAPIProp_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
00910 #define IMAPIProp_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
00911 #define IMAPIProp_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
00912 #endif
00913 
00914 typedef IMAPIProp *LPMAPIPROP;
00915 
00916 #define KEEP_OPEN_READONLY      (0x00000001U)
00917 #define KEEP_OPEN_READWRITE     (0x00000002U)
00918 #define FORCE_SAVE              (0x00000004U)
00919 
00920 /*****************************************************************************
00921  * IMsgStore interface
00922  */
00923 #define INTERFACE IMsgStore
00924 DECLARE_INTERFACE_(IMsgStore,IMAPIProp)
00925 {
00926     /*** IUnknown methods ***/
00927     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
00928     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
00929     STDMETHOD_(ULONG,Release)(THIS) PURE;
00930     /*** IMAPIProp methods ***/
00931     STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
00932     STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
00933     STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
00934     STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
00935     STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
00936     STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
00937     STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
00938     STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
00939                       LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
00940                       LPSPropProblemArray *lppProbs) PURE;
00941     STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
00942                          LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
00943     STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
00944                                LPMAPINAMEID **lpppNames) PURE;
00945     STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
00946     /*** IMsgStore methods ***/
00947     STDMETHOD(Advise)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulEventMask, LPMAPIADVISESINK lpAdviseSink,
00948                       ULONG * lpulConnection) PURE;
00949     STDMETHOD(Unadvise)(THIS_ ULONG ulConnection) PURE;
00950     STDMETHOD(CompareEntryIDs)(THIS_ ULONG cbEntryID1, LPENTRYID lpEntryID1, ULONG cbEntryID2, LPENTRYID lpEntryID2,
00951                 ULONG ulFlags, ULONG * lpulResult) PURE;
00952     STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags, ULONG *lpulObjType,
00953                 LPUNKNOWN *lppUnk) PURE;
00954     STDMETHOD(SetReceiveFolder)(THIS_ LPSTR lpszMessageClass, ULONG ulFlags, ULONG cbEntryID, LPENTRYID lpEntryID) PURE;
00955     STDMETHOD(GetReceiveFolder)(THIS_ LPSTR lpszMessageClass, ULONG ulFlags, ULONG * lpcbEntryID, LPENTRYID *lppEntryID,
00956                 LPSTR *lppszExplicitClass) PURE;
00957     STDMETHOD(GetReceiveFolderTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
00958     STDMETHOD(StoreLogoff)(THIS_ ULONG * lpulFlags) PURE;
00959     STDMETHOD(AbortSubmit)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulFlags) PURE;
00960     STDMETHOD(GetOutgoingQueue)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
00961     STDMETHOD(SetLockState)(THIS_ LPMESSAGE lpMessage, ULONG ulLockState) PURE;
00962     STDMETHOD(FinishedMsg)(THIS_ ULONG ulFlags, ULONG cbEntryID, LPENTRYID lpEntryID) PURE;
00963     STDMETHOD(NotifyNewMail)(THIS_ LPNOTIFICATION lpNotification) PURE;
00964 };
00965 #undef INTERFACE
00966 
00967 #if !defined(__cplusplus) || defined(CINTERFACE)
00968         /*** IUnknown methods ***/
00969 #define IMsgStore_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
00970 #define IMsgStore_AddRef(p)                    (p)->lpVtbl->AddRef(p)
00971 #define IMsgStore_Release(p)                   (p)->lpVtbl->Release(p)
00972         /*** IMAPIProp methods ***/
00973 #define IMsgStore_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
00974 #define IMsgStore_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
00975 #define IMsgStore_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
00976 #define IMsgStore_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
00977 #define IMsgStore_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
00978 #define IMsgStore_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
00979 #define IMsgStore_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
00980 #define IMsgStore_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
00981 #define IMsgStore_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
00982 #define IMsgStore_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
00983 #define IMsgStore_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
00984         /*** IMsgStore methods ***/
00985 #define IMsgStore_Advise(p,a,b,c,d,e)            (p)->lpVtbl->Advise(p,a,b,c,d,e)
00986 #define IMsgStore_Unadvise(p,a)                  (p)->lpVtbl->Unadvise(p,a)
00987 #define IMsgStore_CompareEntryIDs(p,a,b,c,d,e,f) (p)->lpVtbl->CompareEntryIDs(p,a,b,c,d,e,f)
00988 #define IMsgStore_OpenEntry(p,a,b,c,d,e,f)       (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
00989 #define IMsgStore_SetReceiveFolder(p,a,b,c,d)    (p)->lpVtbl->SetReceiveFolder(p,a,b,c,d)
00990 #define IMsgStore_GetReceiveFolder(p,a,b,c,d,e)  (p)->lpVtbl->GetReceiveFolder(p,a,b,c,d,e)
00991 #define IMsgStore_GetReceiveFolderTable(p,a,b)   (p)->lpVtbl->GetReceiveFolderTable(p,a,b)
00992 #define IMsgStore_StoreLogoff(p,a)               (p)->lpVtbl->StoreLogoff(p,a)
00993 #define IMsgStore_AbortSubmit(p,a,b,c)           (p)->lpVtbl->AbortSubmit(p,a,b,c)
00994 #define IMsgStore_GetOutgoingQueue(p,a,b)        (p)->lpVtbl->GetOutgoingQueue(p,a,b)
00995 #define IMsgStore_SetLockState(p,a,b)            (p)->lpVtbl->SetLockState(p,a,b)
00996 #define IMsgStore_FinishedMsg(p,a,b,c)           (p)->lpVtbl->FinishedMsg(p,a,b,c)
00997 #define IMsgStore_NotifyNewMail(p,a)             (p)->lpVtbl->NotifyNewMail(p,a)
00998 
00999 #endif
01000 
01001 typedef IMsgStore *LPMDB;
01002 
01003 /*****************************************************************************
01004  * IMAPIContainer interface
01005  */
01006 #define INTERFACE IMAPIContainer
01007 DECLARE_INTERFACE_(IMAPIContainer,IMAPIProp)
01008 {
01009     /*** IUnknown methods ***/
01010     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
01011     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
01012     STDMETHOD_(ULONG,Release)(THIS) PURE;
01013     /*** IMAPIProp methods ***/
01014     STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
01015     STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
01016     STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
01017     STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
01018     STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
01019     STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
01020     STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
01021     STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
01022                       LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
01023                       LPSPropProblemArray *lppProbs) PURE;
01024     STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
01025                          LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
01026     STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
01027                                LPMAPINAMEID **lpppNames) PURE;
01028     STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
01029     /*** IMAPIContainer methods ***/
01030     STDMETHOD(GetContentsTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
01031     STDMETHOD(GetHierarchyTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
01032     STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags,
01033                          ULONG * lpulObjType, LPUNKNOWN * lppUnk) PURE;
01034     STDMETHOD(SetSearchCriteria)(THIS_ LPSRestriction lpRestriction, LPENTRYLIST lpContainerList, ULONG ulSearchFlags) PURE;
01035     STDMETHOD(GetSearchCriteria)(THIS_ ULONG ulFlags, LPSRestriction * lppRestriction, LPENTRYLIST * lppContainerList,
01036                                  ULONG * lpulSearchState) PURE;
01037 };
01038 #undef INTERFACE
01039 
01040 #if !defined(__cplusplus) || defined(CINTERFACE)
01041         /*** IUnknown methods ***/
01042 #define IMAPIContainer_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
01043 #define IMAPIContainer_AddRef(p)                    (p)->lpVtbl->AddRef(p)
01044 #define IMAPIContainer_Release(p)                   (p)->lpVtbl->Release(p)
01045         /*** IMAPIProp methods ***/
01046 #define IMAPIContainer_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
01047 #define IMAPIContainer_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
01048 #define IMAPIContainer_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
01049 #define IMAPIContainer_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
01050 #define IMAPIContainer_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
01051 #define IMAPIContainer_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
01052 #define IMAPIContainer_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
01053 #define IMAPIContainer_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
01054 #define IMAPIContainer_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
01055 #define IMAPIContainer_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
01056 #define IMAPIContainer_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
01057         /*** IMAPIContainer methods ***/
01058 #define IMAPIContainer_GetContentsTable(p,a,b)      (p)->lpVtbl->GetContentsTable(p,a,b)
01059 #define IMAPIContainer_GetHierarchyTable(p,a,b)     (p)->lpVtbl->GetHierarchyTable(p,a,b)
01060 #define IMAPIContainer_OpenEntry(p,a,b,c,d,e,f)     (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
01061 #define IMAPIContainer_SetSearchCriteria(p,a,b,c)   (p)->lpVtbl->SetSearchCriteria(p,a,b,c)
01062 #define IMAPIContainer_GetSearchCriteria(p,a,b,c,d) (p)->lpVtbl->GetSearchCriteria(p,a,b,c,d)
01063 
01064 #endif
01065 
01066 /*****************************************************************************
01067  * IMAPIFolder interface
01068  */
01069 #define INTERFACE IMAPIFolder
01070 DECLARE_INTERFACE_(IMAPIFolder,IMAPIContainer)
01071 {
01072     /*** IUnknown methods ***/
01073     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
01074     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
01075     STDMETHOD_(ULONG,Release)(THIS) PURE;
01076     /*** IMAPIProp methods ***/
01077     STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
01078     STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
01079     STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
01080     STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
01081     STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
01082     STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
01083     STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
01084     STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
01085                       LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
01086                       LPSPropProblemArray *lppProbs) PURE;
01087     STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
01088                          LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
01089     STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
01090                                LPMAPINAMEID **lpppNames) PURE;
01091     STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
01092     /*** IMAPIContainer methods ***/
01093     STDMETHOD(GetContentsTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
01094     STDMETHOD(GetHierarchyTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
01095     STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags,
01096                          ULONG * lpulObjType, LPUNKNOWN * lppUnk) PURE;
01097     STDMETHOD(SetSearchCriteria)(THIS_ LPSRestriction lpRestriction, LPENTRYLIST lpContainerList, ULONG ulSearchFlags) PURE;
01098     STDMETHOD(GetSearchCriteria)(THIS_ ULONG ulFlags, LPSRestriction * lppRestriction, LPENTRYLIST * lppContainerList,
01099                                  ULONG * lpulSearchState) PURE;
01100     /*** IMAPIFolder methods ***/
01101     STDMETHOD(CreateMessage)(THIS_ LPCIID lpInterface, ULONG ulFlags, LPMESSAGE *lppMessage) PURE;
01102     STDMETHOD(CopyMessages)(THIS_ LPENTRYLIST lpMsgList, LPCIID lpInterface, LPVOID lpDestFolder, ULONG ulUIParam,
01103                             LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
01104     STDMETHOD(DeleteMessages)(THIS_ LPENTRYLIST lpMsgList, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
01105     STDMETHOD(CreateFolder)(THIS_ ULONG ulFolderType, LPSTR lpszFolderName, LPSTR lpszFolderComment, LPCIID lpInterface,
01106                             ULONG ulFlags, LPMAPIFOLDER lppFolder) PURE;
01107     STDMETHOD(CopyFolder)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, LPVOID lpDestFolder,
01108                           LPSTR lpszNewFolderName, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
01109     STDMETHOD(DeleteFolder)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulUIParam, LPMAPIPROGRESS lpProgress,
01110                             ULONG ulFlags) PURE;
01111     STDMETHOD(SetReadFlags)(THIS_ LPENTRYLIST lpMsgList, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
01112     STDMETHOD(GetMessageStatus)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulFlags, ULONG * lpulMessageStatus) PURE;
01113     STDMETHOD(SetMessageStatus)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulNewStatus,
01114                                 ULONG ulNewStatusMask, ULONG * lpulOldStatus) PURE;
01115     STDMETHOD(SaveContentsSort)(THIS_ LPSSortOrderSet lpSortCriteria, ULONG ulFlags) PURE;
01116     STDMETHOD(EmptyFolder) (THIS_ ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
01117 };
01118 #undef INTERFACE
01119 
01120 #if !defined(__cplusplus) || defined(CINTERFACE)
01121         /*** IUnknown methods ***/
01122 #define IMAPIFolder_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
01123 #define IMAPIFolder_AddRef(p)                    (p)->lpVtbl->AddRef(p)
01124 #define IMAPIFolder_Release(p)                   (p)->lpVtbl->Release(p)
01125         /*** IMAPIProp methods ***/
01126 #define IMAPIFolder_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
01127 #define IMAPIFolder_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
01128 #define IMAPIFolder_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
01129 #define IMAPIFolder_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
01130 #define IMAPIFolder_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
01131 #define IMAPIFolder_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
01132 #define IMAPIFolder_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
01133 #define IMAPIFolder_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
01134 #define IMAPIFolder_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
01135 #define IMAPIFolder_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
01136 #define IMAPIFolder_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
01137         /*** IMAPIContainer methods ***/
01138 #define IMAPIFolder_GetContentsTable(p,a,b)      (p)->lpVtbl->GetContentsTable(p,a,b)
01139 #define IMAPIFolder_GetHierarchyTable(p,a,b)     (p)->lpVtbl->GetHierarchyTable(p,a,b)
01140 #define IMAPIFolder_OpenEntry(p,a,b,c,d,e,f)     (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
01141 #define IMAPIFolder_SetSearchCriteria(p,a,b,c)   (p)->lpVtbl->SetSearchCriteria(p,a,b,c)
01142 #define IMAPIFolder_GetSearchCriteria(p,a,b,c,d) (p)->lpVtbl->GetSearchCriteria(p,a,b,c,d)
01143         /*** IMAPIFolder methods ***/
01144 #define IMAPIFolder_CreateMessage(p,a,b,c)        (p)->lpVtbl->CreateMessage(p,a,b,c)
01145 #define IMAPIFolder_CopyMessages(p,a,b,c,d,e,f)   (p)->lpVtbl->CopyMessages(p,a,b,c,d,e,f)
01146 #define IMAPIFolder_DeleteMessages(p,a,b,c,d)     (p)->lpVtbl->DeleteMessages(p,a,b,c,d)
01147 #define IMAPIFolder_CreateFolder(p,a,b,c,d,e,f)   (p)->lpVtbl->CreateFolder(p,a,b,c,d,e,f)
01148 #define IMAPIFolder_CopyFolder(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CopyFolder(p,a,b,c,d,e,f,g,h)
01149 #define IMAPIFolder_DeleteFolder(p,a,b,c,d,e)     (p)->lpVtbl->CreateFolder(p,a,b,c,d,e)
01150 #define IMAPIFolder_SetReadFlags(p,a,b,c,d)       (p)->lpVtbl->SetReadFlags(p,a,b,c,d)
01151 #define IMAPIFolder_GetMessageStatus(p,a,b,c,d)   (p)->lpVtbl->GetMessageStatus(p,a,b,c,d)
01152 #define IMAPIFolder_SetMessageStatus(p,a,b,c,d,e) (p)->lpVtbl->SetMessageStatus(p,a,b,c,d,e)
01153 #define IMAPIFolder_SaveContentsSort(p,a,b)       (p)->lpVtbl->SaveContentsSort(p,a,b)
01154 #define IMAPIFolder_EmptyFolder(p,a,b,c)          (p)->lpVtbl->EmptyFolder(p,a,b,c)
01155 
01156 #endif
01157 
01158 typedef struct
01159 {
01160     ULONG cb;
01161     BYTE  abEntry[MAPI_DIM];
01162 } FLATENTRY, *LPFLATENTRY;
01163 
01164 typedef struct
01165 {
01166     ULONG cEntries;
01167     ULONG cbEntries;
01168     BYTE  abEntries[MAPI_DIM];
01169 } FLATENTRYLIST, *LPFLATENTRYLIST;
01170 
01171 typedef struct
01172 {
01173     ULONG cb;
01174     BYTE  ab[MAPI_DIM];
01175 } MTSID, *LPMTSID;
01176 
01177 typedef struct
01178 {
01179     ULONG cMTSIDs;
01180     ULONG cbMTSIDs;
01181     BYTE  abMTSIDs[MAPI_DIM];
01182 } FLATMTSIDLIST, *LPFLATMTSIDLIST;
01183 
01184 typedef struct _ADRENTRY
01185 {
01186     ULONG        ulReserved1;
01187     ULONG        cValues;
01188     LPSPropValue rgPropVals;
01189 } ADRENTRY, *LPADRENTRY;
01190 
01191 typedef struct _ADRLIST
01192 {
01193     ULONG    cEntries;
01194     ADRENTRY aEntries[MAPI_DIM];
01195 } ADRLIST, *LPADRLIST;
01196 
01197 /*****************************************************************************
01198  * IMessage interface
01199  */
01200 #define INTERFACE IMessage
01201 DECLARE_INTERFACE_(IMessage,IMAPIProp)
01202 {
01203     /*** IUnknown methods ***/
01204     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
01205     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
01206     STDMETHOD_(ULONG,Release)(THIS) PURE;
01207     /*** IMAPIProp methods ***/
01208     STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
01209     STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
01210     STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
01211     STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
01212     STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
01213     STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
01214     STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
01215     STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
01216                       LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
01217                       LPSPropProblemArray *lppProbs) PURE;
01218     STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
01219                          LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
01220     STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
01221                                LPMAPINAMEID **lpppNames) PURE;
01222     STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
01223     /*** IMessage methods ***/
01224     STDMETHOD(GetAttachmentTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;
01225     STDMETHOD(OpenAttach)(THIS_ ULONG ulAttachmentNum, LPCIID lpInterface, ULONG ulFlags, LPATTACH *lppAttach) PURE;
01226     STDMETHOD(CreateAttach)(THIS_ LPCIID lpInterface, ULONG ulFlags, ULONG *lpulAttachmentNum, LPATTACH *lppAttach) PURE;
01227     STDMETHOD(DeleteAttach)(THIS_ ULONG ulAttachmentNum, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
01228     STDMETHOD(GetRecipientTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;
01229     STDMETHOD(ModifyRecipients)(THIS_ ULONG ulFlags, LPADRLIST lpMods) PURE;
01230     STDMETHOD(SubmitMessage)(THIS_ ULONG ulFlags) PURE;
01231     STDMETHOD(SetReadFlag)(THIS_ ULONG ulFlags) PURE;
01232 };
01233 #undef INTERFACE
01234 
01235 #if !defined(__cplusplus) || defined(CINTERFACE)
01236         /*** IUnknown methods ***/
01237 #define IMessage_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
01238 #define IMessage_AddRef(p)                    (p)->lpVtbl->AddRef(p)
01239 #define IMessage_Release(p)                   (p)->lpVtbl->Release(p)
01240         /*** IMAPIProp methods ***/
01241 #define IMessage_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
01242 #define IMessage_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
01243 #define IMessage_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
01244 #define IMessage_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
01245 #define IMessage_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
01246 #define IMessage_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
01247 #define IMessage_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
01248 #define IMessage_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
01249 #define IMessage_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
01250 #define IMessage_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
01251 #define IMessage_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
01252         /*** IMessage methods ***/
01253 #define IMessage_GetAttachmentTable(p,a,b)    (p)->lpVtbl->GetAttachmentTable(p,a,b)
01254 #define IMessage_OpenAttach(p,a,b,c,d)        (p)->lpVtbl->OpenAttach(p,a,b,c,d)
01255 #define IMessage_CreateAttach(p,a,b,c,d)      (p)->lpVtbl->CreateAttach(p,a,b,c,d)
01256 #define IMessage_DeleteAttach(p,a,b,c,d)      (p)->lpVtbl->DeleteAttach(p,a,b,c,d)
01257 #define IMessage_GetRecipientTable(p,a,b)     (p)->lpVtbl->GetRecipientTable(p,a,b)
01258 #define IMessage_ModifyRecipients(p,a,b)      (p)->lpVtbl->ModifyRecipients(p,a,b)
01259 #define IMessage_SubmitMessage(p,a)           (p)->lpVtbl->SubmitMessage(p,a)
01260 #define IMessage_SetReadFlag(p,a)             (p)->lpVtbl->SetReadFlag(p,a)
01261 
01262 #endif
01263 
01264 /* Message flags (PR_MESSAGE_FLAGS) */
01265 
01266 #define MSGFLAG_READ         0x00000001U
01267 #define MSGFLAG_UNMODIFIED   0x00000002U
01268 #define MSGFLAG_SUBMIT       0x00000004U
01269 #define MSGFLAG_UNSENT       0x00000008U
01270 #define MSGFLAG_HASATTACH    0x00000010U
01271 #define MSGFLAG_FROMME       0x00000020U
01272 
01273 /*****************************************************************************
01274  * IAttach interface
01275  */
01276 #define INTERFACE IAttach
01277 DECLARE_INTERFACE_(IAttach,IMAPIProp)
01278 {
01279     /*** IUnknown methods ***/
01280     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
01281     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
01282     STDMETHOD_(ULONG,Release)(THIS) PURE;
01283     /*** IMAPIProp methods ***/
01284     STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
01285     STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
01286     STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
01287     STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
01288     STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
01289     STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
01290     STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
01291     STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
01292                       LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
01293                       LPSPropProblemArray *lppProbs) PURE;
01294     STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
01295                          LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
01296     STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
01297                                LPMAPINAMEID **lpppNames) PURE;
01298     STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
01299 };
01300 #undef INTERFACE
01301 
01302 #if !defined(__cplusplus) || defined(CINTERFACE)
01303         /*** IUnknown methods ***/
01304 #define IAttach_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
01305 #define IAttach_AddRef(p)                    (p)->lpVtbl->AddRef(p)
01306 #define IAttach_Release(p)                   (p)->lpVtbl->Release(p)
01307         /*** IMAPIProp methods ***/
01308 #define IAttach_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
01309 #define IAttach_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
01310 #define IAttach_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
01311 #define IAttach_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
01312 #define IAttach_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
01313 #define IAttach_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
01314 #define IAttach_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
01315 #define IAttach_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
01316 #define IAttach_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
01317 #define IAttach_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
01318 #define IAttach_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
01319 #endif
01320 
01321 /* Attachment flags */
01322 
01323 #define NO_ATTACHMENT        0x00000000U
01324 #define ATTACH_BY_VALUE      0x00000001U
01325 
01326 #endif /*MAPIDEFS_H*/

Generated on Sun May 27 2012 04:31:38 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.