Import mapi32 from Wine Modified: trunk/reactos/baseaddress.xml Modified: trunk/reactos/bootdata/packages/reactos.dff Modified: trunk/reactos/include/wine/shlwapi.h Modified: trunk/reactos/lib/directory.xml Added: trunk/reactos/lib/mapi32/ Deleted: trunk/reactos/lib/mapi32/Makefile.in Added: trunk/reactos/lib/mapi32/mapi32.xml Modified: trunk/reactos/lib/mapi32/prop.c Modified: trunk/reactos/lib/uuid/uuid.c Modified: trunk/reactos/media/doc/README.WINE Added: trunk/reactos/w32api/include/mapicode.h Added: trunk/reactos/w32api/include/mapidefs.h Added: trunk/reactos/w32api/include/mapiguid.h Added: trunk/reactos/w32api/include/mapitags.h Added: trunk/reactos/w32api/include/mapiutil.h Added: trunk/reactos/w32api/include/mapival.h Added: trunk/reactos/w32api/include/mapix.h Modified: trunk/reactos/w32api/include/wtypes.h Added: trunk/reactos/w32api/include/xcmc.h _____
Modified: trunk/reactos/baseaddress.xml --- trunk/reactos/baseaddress.xml 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/baseaddress.xml 2006-01-14 19:36:04 UTC (rev 20861) @@ -10,6 +10,7 @@
<property name="BASEADDRESS_OBJSEL" value="0x5B400000" /> <property name="BASEADDRESS_SLAYER" value="0x5C7E0000" /> <property name="BASEADDRESS_DINPUT" value="0x5F580000" /> +<property name="BASEADDRESS_MAPI32" value="0x62250000" /> <property name="BASEADDRESS_HDWWIZ" value="0x64D40000" /> <property name="BASEADDRESS_TIMEDATE" value="0x64DA0000" /> <property name="BASEADDRESS_SYSDM" value="0x64DD0000" /> _____
Modified: trunk/reactos/bootdata/packages/reactos.dff --- trunk/reactos/bootdata/packages/reactos.dff 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/bootdata/packages/reactos.dff 2006-01-14 19:36:04 UTC (rev 20861) @@ -120,6 +120,7 @@
lib\kernel32\kernel32.dll 1 lib\lsasrv\lsasrv.dll 1 lib\lzexpand\lz32.dll 1 +lib\mapi32\mapi32.dll 1 lib\mesa32\mesa32.dll 1 lib\winmm\midimap\midimap.dll 1 lib\mmdrv\mmdrv.dll 1 _____
Modified: trunk/reactos/include/wine/shlwapi.h --- trunk/reactos/include/wine/shlwapi.h 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/include/wine/shlwapi.h 2006-01-14 19:36:04 UTC (rev 20861) @@ -14,6 +14,8 @@
#define URL_FILE_USE_PATHURL 0x00010000
+HRESULT WINAPI SHCreateStreamOnFileEx(LPCWSTR,DWORD,DWORD,BOOL,struct IStream*,struct IStream**); + #define INTERFACE IQueryAssociations DECLARE_INTERFACE_(IQueryAssociations,IUnknown) { _____
Modified: trunk/reactos/lib/directory.xml --- trunk/reactos/lib/directory.xml 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/lib/directory.xml 2006-01-14 19:36:04 UTC (rev 20861) @@ -152,6 +152,9 @@
<directory name="lzexpand"> <xi:include href="lzexpand/lz32.xml" /> </directory> +<directory name="mapi32"> + <xi:include href="mapi32/mapi32.xml" /> +</directory> <directory name="mesa32"> <xi:include href="mesa32/mesa32.xml" /> </directory> _____
Copied: trunk/reactos/lib/mapi32 (from rev 20860, vendor/wine/dlls/mapi32/current) Property changes on: trunk/reactos/lib/mapi32 ___________________________________________________________________ Name: svn:ignore + GNUmakefile _____
Deleted: trunk/reactos/lib/mapi32/Makefile.in --- vendor/wine/dlls/mapi32/current/Makefile.in 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/lib/mapi32/Makefile.in 2006-01-14 19:36:04 UTC (rev 20861) @@ -1,20 +0,0 @@
-TOPSRCDIR = @top_srcdir@ -TOPOBJDIR = ../.. -SRCDIR = @srcdir@ -VPATH = @srcdir@ -MODULE = mapi32.dll -IMPORTLIB = libmapi32.$(IMPLIBEXT) -IMPORTS = shlwapi ole32 user32 kernel32 ntdll -EXTRALIBS = -luuid $(LIBUNICODE) - -C_SRCS = \ - imalloc.c \ - mapi32_main.c \ - prop.c \ - util.c - -SUBDIRS = tests - -@MAKE_DLL_RULES@ - -### Dependencies: _____
Added: trunk/reactos/lib/mapi32/mapi32.xml --- vendor/wine/dlls/mapi32/current/mapi32.xml 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/lib/mapi32/mapi32.xml 2006-01-14 19:36:04 UTC (rev 20861) @@ -0,0 +1,19 @@
+<module name="mapi32" type="win32dll" baseaddress="${BASEADDRESS_MAPI32}" installbase="system32" installname="mapi32.dll"> + <importlibrary definition="mapi32.spec.def" /> + <include base="mapi32">.</include> + <include base="ReactOS">include/wine</include> + <define name="__USE_W32API" /> + <define name="_WIN32_WINNT">0x501</define> + <define name="__WINESRC__" /> + <library>ntdll</library> + <library>kernel32</library> + <library>shlwapi</library> + <library>wine</library> + <library>uuid</library> + <library>advapi32</library> + <file>mapi32_main.c</file> + <file>imalloc.c</file> + <file>prop.c</file> + <file>util.c</file> + <file>mapi32.spec</file> +</module> Property changes on: trunk/reactos/lib/mapi32/mapi32.xml ___________________________________________________________________ Name: svn:eol-style + native _____
Modified: trunk/reactos/lib/mapi32/prop.c --- vendor/wine/dlls/mapi32/current/prop.c 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/lib/mapi32/prop.c 2006-01-14 19:36:04 UTC (rev 20861) @@ -1404,7 +1404,7 @@
ULONG ulObjAccess; /* Object access level */ ULONG ulNumValues; /* Number of items in values list */ struct list values; /* List of property values */ - CRITICAL_SECTION cs; /* Lock for thread safety */ + RTL_CRITICAL_SECTION cs; /* Lock for thread safety */ } IPropDataImpl;
/* Internal - Get a property value, assumes lock is held */ _____
Modified: trunk/reactos/lib/uuid/uuid.c --- trunk/reactos/lib/uuid/uuid.c 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/lib/uuid/uuid.c 2006-01-14 19:36:04 UTC (rev 20861) @@ -60,6 +60,7 @@
/* other GUIDs */
#include "vfw.h" +#include "mapiguid.h"
#if 0 /* FIXME */ #include "uuids.h" _____
Modified: trunk/reactos/media/doc/README.WINE --- trunk/reactos/media/doc/README.WINE 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/media/doc/README.WINE 2006-01-14 19:36:04 UTC (rev 20861) @@ -51,6 +51,7 @@
reactos/lib/imm32 # Synced to Wine-0_9_5 reactos/lib/iphlpapi # Out of sync reactos/lib/imagehlp # Patches for BindImage need review and submission to winehq. +reactos/lib/mapi32 # Synced to Wine-0_9_5 reactos/lib/msvcrt20 # Out of sync reactos/lib/mpr # Synced to Wine-0_9_5 reactos/lib/msacm # Out of sync _____
Added: trunk/reactos/w32api/include/mapicode.h --- trunk/reactos/w32api/include/mapicode.h 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/w32api/include/mapicode.h 2006-01-14 19:36:04 UTC (rev 20861) @@ -0,0 +1,110 @@
+/* + * Status codes returned by MAPI + * + * Copyright (C) 2002 Aric Stewart + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef MAPICODE_H +#define MAPICODE_H + +#include <winerror.h> + +#define MAKE_MAPI_SCODE(sev,fac,code) \ + ((SCODE)(((ULONG)(sev)<<31)|((ULONG)(fac)<<16)|((ULONG)(code)))) + +#define MAKE_MAPI_E(e) (MAKE_MAPI_SCODE(1,FACILITY_ITF,(e))) +#define MAKE_MAPI_S(e) (MAKE_MAPI_SCODE(0,FACILITY_ITF,(e))) + +/* Errors */ +#define MAPI_E_ACCOUNT_DISABLED ((SCODE)0x80040124) +#define MAPI_E_AMBIGUOUS_RECIP ((SCODE)0x80040700) +#define MAPI_E_BAD_CHARWIDTH ((SCODE)0x80040103) +#define MAPI_E_BAD_COLUMN ((SCODE)0x80040118) +#define MAPI_E_BAD_VALUE ((SCODE)0x80040301) +#define MAPI_E_BUSY ((SCODE)0x8004010B) +#define MAPI_E_CALL_FAILED E_FAIL +#define MAPI_E_CANCEL ((SCODE)0x80040501) +#define MAPI_E_COLLISION ((SCODE)0x80040604) +#define MAPI_E_COMPUTED ((SCODE)0x8004011A) +#define MAPI_E_CORRUPT_DATA ((SCODE)0x8004011B) +#define MAPI_E_CORRUPT_STORE ((SCODE)0x80040600) +#define MAPI_E_DECLINE_COPY ((SCODE)0x80040306) +#define MAPI_E_DISK_ERROR ((SCODE)0x80040116) +#define MAPI_E_END_OF_SESSION ((SCODE)0x80040200) +#define MAPI_E_EXTENDED_ERROR ((SCODE)0x80040119) +#define MAPI_E_FAILONEPROVIDER ((SCODE)0x8004011D) +#define MAPI_E_FOLDER_CYCLE ((SCODE)0x8004060B) +#define MAPI_E_HAS_FOLDERS ((SCODE)0x80040609) +#define MAPI_E_HAS_MESSAGES ((SCODE)0x8004060A) +#define MAPI_E_INTERFACE_NOT_SUPPORTED E_NOINTERFACE +#define MAPI_E_INVALID_ACCESS_TIME ((SCODE)0x80040123) +#define MAPI_E_INVALID_BOOKMARK ((SCODE)0x80040405) +#define MAPI_E_INVALID_ENTRYID ((SCODE)0x80040107) +#define MAPI_E_INVALID_OBJECT ((SCODE)0x80040108) +#define MAPI_E_INVALID_PARAMETER E_INVALIDARG +#define MAPI_E_INVALID_TYPE ((SCODE)0x80040302) +#define MAPI_E_INVALID_WORKSTATION_ACCOUNT ((SCODE)0x80040122) +#define MAPI_E_LOGON_FAILED ((SCODE)0x80040111) +#define MAPI_E_MISSING_REQUIRED_COLUMN ((SCODE)0x80040202) +#define MAPI_E_NETWORK_ERROR ((SCODE)0x80040115) +#define MAPI_E_NO_ACCESS E_ACCESSDENIED +#define MAPI_E_NON_STANDARD ((SCODE)0x80040606) +#define MAPI_E_NO_RECIPIENTS ((SCODE)0x80040607) +#define MAPI_E_NO_SUPPORT ((SCODE)0x80040102) +#define MAPI_E_NO_SUPPRESS ((SCODE)0x80040602) +#define MAPI_E_NOT_ENOUGH_DISK ((SCODE)0x8004010D) +#define MAPI_E_NOT_ENOUGH_MEMORY E_OUTOFMEMORY +#define MAPI_E_NOT_ENOUGH_RESOURCES ((SCODE)0x8004010E) +#define MAPI_E_NOT_FOUND ((SCODE)0x8004010F) +#define MAPI_E_NOT_INITIALIZED ((SCODE)0x80040605) +#define MAPI_E_NOT_IN_QUEUE ((SCODE)0x80040601) +#define MAPI_E_NOT_ME ((SCODE)0x80040502) +#define MAPI_E_OBJECT_CHANGED ((SCODE)0x80040109) +#define MAPI_E_OBJECT_DELETED ((SCODE)0x8004010A) +#define MAPI_E_PASSWORD_CHANGE_REQUIRED ((SCODE)0x80040120) +#define MAPI_E_PASSWORD_EXPIRED ((SCODE)0x80040121) +#define MAPI_E_SESSION_LIMIT ((SCODE)0x80040112) +#define MAPI_E_STRING_TOO_LONG ((SCODE)0x80040105) +#define MAPI_E_SUBMITTED ((SCODE)0x80040608) +#define MAPI_E_TABLE_EMPTY ((SCODE)0x80040402) +#define MAPI_E_TABLE_TOO_BIG ((SCODE)0x80040403) +#define MAPI_E_TIMEOUT ((SCODE)0x80040401) +#define MAPI_E_TOO_BIG ((SCODE)0x80040305) +#define MAPI_E_TOO_COMPLEX ((SCODE)0x80040117) +#define MAPI_E_TYPE_NO_SUPPORT ((SCODE)0x80040303) +#define MAPI_E_UNABLE_TO_ABORT ((SCODE)0x80040114) +#define MAPI_E_UNABLE_TO_COMPLETE ((SCODE)0x80040400) +#define MAPI_E_UNCONFIGURED ((SCODE)0x8004011C) +#define MAPI_E_UNEXPECTED_ID ((SCODE)0x80040307) +#define MAPI_E_UNEXPECTED_TYPE ((SCODE)0x80040304) +#define MAPI_E_UNKNOWN_CPID ((SCODE)0x8004011E) +#define MAPI_E_UNKNOWN_ENTRYID ((SCODE)0x80040201) +#define MAPI_E_UNKNOWN_FLAGS ((SCODE)0x80040106) +#define MAPI_E_UNKNOWN_LCID ((SCODE)0x8004011F) +#define MAPI_E_USER_CANCEL ((SCODE)0x80040113) +#define MAPI_E_VERSION ((SCODE)0x80040110) +#define MAPI_E_WAIT ((SCODE)0x80040500) + +/* Warnings */ +#define MAPI_W_APPROX_COUNT ((SCODE)0x00040482) +#define MAPI_W_CANCEL_MESSAGE ((SCODE)0x00040580) +#define MAPI_W_ERRORS_RETURNED ((SCODE)0x00040380) +#define MAPI_W_NO_SERVICE ((SCODE)0x00040203) +#define MAPI_W_PARTIAL_COMPLETION ((SCODE)0x00040680) +#define MAPI_W_POSITION_CHANGED ((SCODE)0x00040481) + +#endif /* MAPICODE_H */ Property changes on: trunk/reactos/w32api/include/mapicode.h ___________________________________________________________________ Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native _____
Added: trunk/reactos/w32api/include/mapidefs.h --- trunk/reactos/w32api/include/mapidefs.h 2006-01-14 19:31:10 UTC (rev 20860) +++ trunk/reactos/w32api/include/mapidefs.h 2006-01-14 19:36:04 UTC (rev 20861) @@ -0,0 +1,953 @@
+/* + * Copyright (C) 1998 Justin Bradford + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef MAPIDEFS_H +#define MAPIDEFS_H + +#ifndef __WINESRC__ +# include <windows.h> +#endif + +#include <winerror.h> +#ifndef _OBJBASE_H_ +#include <objbase.h> +#endif + +/* Some types from other headers */ +#ifndef __LHANDLE +#define __LHANDLE +typedef ULONG_PTR LHANDLE, *LPLHANDLE; +#endif + +#ifndef _tagCY_DEFINED +#define _tagCY_DEFINED +typedef union tagCY +{ + struct + { +#ifdef WORDS_BIGENDIAN + LONG Hi; + ULONG Lo; +#else + ULONG Lo; + LONG Hi; +#endif + } DUMMYSTRUCTNAME; + LONGLONG int64; +} CY; +typedef CY CURRENCY; +#endif /* _tagCY_DEFINED */ + + +#ifndef _FILETIME_ +#define _FILETIME_ +typedef struct _FILETIME +{ +#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; + [truncated at 1000 lines; 2133 more skipped]