summaryrefslogtreecommitdiff
path: root/mailnews/mapi/include/mapispi.h
diff options
context:
space:
mode:
Diffstat (limited to 'mailnews/mapi/include/mapispi.h')
-rw-r--r--mailnews/mapi/include/mapispi.h929
1 files changed, 929 insertions, 0 deletions
diff --git a/mailnews/mapi/include/mapispi.h b/mailnews/mapi/include/mapispi.h
new file mode 100644
index 000000000..cc326b840
--- /dev/null
+++ b/mailnews/mapi/include/mapispi.h
@@ -0,0 +1,929 @@
+/*
+ * M A P I S P I . H
+ *
+ * Defines the calls and structures exchanged between MAPI or the spooler
+ * and the MAPI service providers
+ *
+ * Copyright (c) 2009 Microsoft Corporation. All Rights Reserved.
+ */
+
+#ifndef MAPISPI_H
+#define MAPISPI_H
+#if _MSC_VER > 1000
+#pragma once
+#endif
+
+/* Include common MAPI header files if they haven't been already. */
+#ifndef MAPIDEFS_H
+#include <mapidefs.h>
+#endif
+#ifndef MAPICODE_H
+#include <mapicode.h>
+#endif
+#ifndef MAPIGUID_H
+#include <mapiguid.h>
+#endif
+#ifndef MAPITAGS_H
+#include <mapitags.h>
+#endif
+
+
+#ifndef BEGIN_INTERFACE
+#define BEGIN_INTERFACE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* The MAPI SPI has a version number. MAPIX.DLL knows and supports
+ * one or more versions of the SPI. Each provider supports one or
+ * more versions of the SPI. Checks are performed in both MAPIX.DLL
+ * and in the provider to ensure that they agree to use exactly one
+ * version of the MAPI SPI.
+ *
+ * The SPI version number is composed of a major (8-bit) version,
+ * minor (8-bit) version, and micro (16-bit) version. The first
+ * retail ship of MAPI 1.0 is expected to be version 1.0.0.
+ * The major version number changes rarely.
+ * The minor version number changes opon each retail ship of
+ * MAPI if the SPI has been modified.
+ * The micro version number changes internally at Microsoft
+ * during development of MAPI.
+ *
+ * The version of the SPI documented by this set of header files
+ * is ALWAYS known as "CURRENT_SPI_VERSION". If you write a
+ * service provider, and get a new set of header files, and update
+ * your code to the new interface, you'll be at the "current" version.
+ */
+#define CURRENT_SPI_VERSION 0x00010010L
+
+/* Here are some well-known SPI version numbers:
+ * (These will eventually be useful for provider-writers who
+ * might choose to make provider DLLs that support more than
+ * one version of the MAPI SPI.
+ */
+#define PDK1_SPI_VERSION 0x00010000L /* 0.1.0 MAPI PDK1 Spring 1993 */
+
+#define PDK2_SPI_VERSION 0x00010008L /* 0.1.8 MAPI PDK2 Spring 1994 */
+
+#define PDK3_SPI_VERSION 0x00010010L /* 0.1.16 MAPI PDK3 Fall 1994 */
+
+/*
+ * Forward declaration of interface pointers specific to the service
+ * provider interface.
+ */
+DECLARE_MAPI_INTERFACE_PTR(IMAPISupport, LPMAPISUP);
+
+/* IMAPISupport Interface -------------------------------------------------- */
+
+/* Notification key structure for the MAPI notification engine */
+
+typedef struct
+{
+ ULONG cb; /* How big the key is */
+ BYTE ab[MAPI_DIM]; /* Key contents */
+} NOTIFKEY, FAR * LPNOTIFKEY;
+
+#define CbNewNOTIFKEY(_cb) (offsetof(NOTIFKEY,ab) + (_cb))
+#define CbNOTIFKEY(_lpkey) (offsetof(NOTIFKEY,ab) + (_lpkey)->cb)
+#define SizedNOTIFKEY(_cb, _name) \
+ struct _NOTIFKEY_ ## _name \
+{ \
+ ULONG cb; \
+ BYTE ab[_cb]; \
+} _name
+
+
+/* For Subscribe() */
+
+#define NOTIFY_SYNC ((ULONG) 0x40000000)
+
+/* For Notify() */
+
+#define NOTIFY_CANCELED ((ULONG) 0x80000000)
+
+
+/* From the Notification Callback function (well, this is really a ulResult) */
+
+#define CALLBACK_DISCONTINUE ((ULONG) 0x80000000)
+
+/* For Transport's SpoolerNotify() */
+
+#define NOTIFY_NEWMAIL ((ULONG) 0x00000001)
+#define NOTIFY_READYTOSEND ((ULONG) 0x00000002)
+#define NOTIFY_SENTDEFERRED ((ULONG) 0x00000004)
+#define NOTIFY_CRITSEC ((ULONG) 0x00001000)
+#define NOTIFY_NONCRIT ((ULONG) 0x00002000)
+#define NOTIFY_CONFIG_CHANGE ((ULONG) 0x00004000)
+#define NOTIFY_CRITICAL_ERROR ((ULONG) 0x10000000)
+
+/* For Message Store's SpoolerNotify() */
+
+#define NOTIFY_NEWMAIL_RECEIVED ((ULONG) 0x20000000)
+
+/* For ModifyStatusRow() */
+
+#define STATUSROW_UPDATE ((ULONG) 0x10000000)
+
+/* For IStorageFromStream() */
+
+#define STGSTRM_RESET ((ULONG) 0x00000000)
+#define STGSTRM_CURRENT ((ULONG) 0x10000000)
+#define STGSTRM_MODIFY ((ULONG) 0x00000002)
+#define STGSTRM_CREATE ((ULONG) 0x00001000)
+
+/* For GetOneOffTable() */
+/****** MAPI_UNICODE ((ULONG) 0x80000000) */
+
+/* For CreateOneOff() */
+/****** MAPI_UNICODE ((ULONG) 0x80000000) */
+/****** MAPI_SEND_NO_RICH_INFO ((ULONG) 0x00010000) */
+
+/* For ReadReceipt() */
+#define MAPI_NON_READ ((ULONG) 0x00000001)
+
+/* For DoConfigPropSheet() */
+/****** MAPI_UNICODE ((ULONG) 0x80000000) */
+
+/* Preprocessor calls: */
+
+/* PreprocessMessage, first ordinal in RegisterPreprocessor(). */
+
+typedef HRESULT (STDMETHODCALLTYPE PREPROCESSMESSAGE)(
+ LPVOID lpvSession,
+ LPMESSAGE lpMessage,
+ LPADRBOOK lpAdrBook,
+ LPMAPIFOLDER lpFolder,
+ LPALLOCATEBUFFER AllocateBuffer,
+ LPALLOCATEMORE AllocateMore,
+ LPFREEBUFFER FreeBuffer,
+ ULONG FAR *lpcOutbound,
+ LPMESSAGE FAR * FAR *lpppMessage,
+ LPADRLIST FAR *lppRecipList);
+
+/* RemovePreprocessInfo, second ordinal in RegisterPreprocessor(). */
+
+typedef HRESULT (STDMETHODCALLTYPE REMOVEPREPROCESSINFO)(LPMESSAGE lpMessage);
+
+/* Function pointer for GetReleaseInfo */
+
+#define MAPI_IMAPISUPPORT_METHODS1(IPURE) \
+ MAPIMETHOD(GetLastError) \
+ (THIS_ HRESULT hResult, \
+ ULONG ulFlags, \
+ LPMAPIERROR FAR * lppMAPIError) IPURE; \
+ MAPIMETHOD(GetMemAllocRoutines) \
+ (THIS_ LPALLOCATEBUFFER FAR * lpAllocateBuffer, \
+ LPALLOCATEMORE FAR * lpAllocateMore, \
+ LPFREEBUFFER FAR * lpFreeBuffer) IPURE; \
+ MAPIMETHOD(Subscribe) \
+ (THIS_ LPNOTIFKEY lpKey, \
+ ULONG ulEventMask, \
+ ULONG ulFlags, \
+ LPMAPIADVISESINK lpAdviseSink, \
+ ULONG_PTR FAR * lpulConnection) IPURE; \
+ MAPIMETHOD(Unsubscribe) \
+ (THIS_ ULONG_PTR ulConnection) IPURE; \
+ MAPIMETHOD(Notify) \
+ (THIS_ LPNOTIFKEY lpKey, \
+ ULONG cNotification, \
+ LPNOTIFICATION lpNotifications, \
+ ULONG FAR * lpulFlags) IPURE; \
+ MAPIMETHOD(ModifyStatusRow) \
+ (THIS_ ULONG cValues, \
+ LPSPropValue lpColumnVals, \
+ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(OpenProfileSection) \
+ (THIS_ LPMAPIUID lpUid, \
+ ULONG ulFlags, \
+ LPPROFSECT FAR * lppProfileObj) IPURE; \
+ MAPIMETHOD(RegisterPreprocessor) \
+ (THIS_ LPMAPIUID lpMuid, \
+ LPTSTR lpszAdrType, \
+ LPTSTR lpszDLLName, \
+ LPSTR /* String8! */ lpszPreprocess, \
+ LPSTR /* String8! */ lpszRemovePreprocessInfo, \
+ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(NewUID) \
+ (THIS_ LPMAPIUID lpMuid) IPURE; \
+ MAPIMETHOD(MakeInvalid) \
+ (THIS_ ULONG ulFlags, \
+ LPVOID lpObject, \
+ ULONG ulRefCount, \
+ ULONG cMethods) IPURE; \
+
+#define MAPI_IMAPISUPPORT_METHODS2(IPURE) \
+ MAPIMETHOD(SpoolerYield) \
+ (THIS_ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(SpoolerNotify) \
+ (THIS_ ULONG ulFlags, \
+ LPVOID lpvData) IPURE; \
+ MAPIMETHOD(CreateOneOff) \
+ (THIS_ LPTSTR lpszName, \
+ LPTSTR lpszAdrType, \
+ LPTSTR lpszAddress, \
+ ULONG ulFlags, \
+ ULONG FAR * lpcbEntryID, \
+ LPENTRYID FAR * lppEntryID) IPURE; \
+ MAPIMETHOD(SetProviderUID) \
+ (THIS_ LPMAPIUID lpProviderID, \
+ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(CompareEntryIDs) \
+ (THIS_ ULONG cbEntry1, \
+ LPENTRYID lpEntry1, \
+ ULONG cbEntry2, \
+ LPENTRYID lpEntry2, \
+ ULONG ulCompareFlags, \
+ ULONG FAR * lpulResult) IPURE; \
+ MAPIMETHOD(OpenTemplateID) \
+ (THIS_ ULONG cbTemplateID, \
+ LPENTRYID lpTemplateID, \
+ ULONG ulTemplateFlags, \
+ LPMAPIPROP lpMAPIPropData, \
+ LPCIID lpInterface, \
+ LPMAPIPROP FAR * lppMAPIPropNew, \
+ LPMAPIPROP lpMAPIPropSibling) IPURE; \
+ MAPIMETHOD(OpenEntry) \
+ (THIS_ ULONG cbEntryID, \
+ LPENTRYID lpEntryID, \
+ LPCIID lpInterface, \
+ ULONG ulOpenFlags, \
+ ULONG FAR * lpulObjType, \
+ LPUNKNOWN FAR * lppUnk) IPURE; \
+ MAPIMETHOD(GetOneOffTable) \
+ (THIS_ ULONG ulFlags, \
+ LPMAPITABLE FAR * lppTable) IPURE; \
+ MAPIMETHOD(Address) \
+ (THIS_ ULONG_PTR FAR * lpulUIParam, \
+ LPADRPARM lpAdrParms, \
+ LPADRLIST FAR * lppAdrList) IPURE; \
+ MAPIMETHOD(Details) \
+ (THIS_ ULONG_PTR FAR * lpulUIParam, \
+ LPFNDISMISS lpfnDismiss, \
+ LPVOID lpvDismissContext, \
+ ULONG cbEntryID, \
+ LPENTRYID lpEntryID, \
+ LPFNBUTTON lpfButtonCallback, \
+ LPVOID lpvButtonContext, \
+ LPTSTR lpszButtonText, \
+ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(NewEntry) \
+ (THIS_ ULONG_PTR ulUIParam, \
+ ULONG ulFlags, \
+ ULONG cbEIDContainer, \
+ LPENTRYID lpEIDContainer, \
+ ULONG cbEIDNewEntryTpl, \
+ LPENTRYID lpEIDNewEntryTpl, \
+ ULONG FAR * lpcbEIDNewEntry, \
+ LPENTRYID FAR * lppEIDNewEntry) IPURE; \
+ MAPIMETHOD(DoConfigPropsheet) \
+ (THIS_ ULONG_PTR ulUIParam, \
+ ULONG ulFlags, \
+ LPTSTR lpszTitle, \
+ LPMAPITABLE lpDisplayTable, \
+ LPMAPIPROP lpCOnfigData, \
+ ULONG ulTopPage) IPURE; \
+ MAPIMETHOD(CopyMessages) \
+ (THIS_ LPCIID lpSrcInterface, \
+ LPVOID lpSrcFolder, \
+ LPENTRYLIST lpMsgList, \
+ LPCIID lpDestInterface, \
+ LPVOID lpDestFolder, \
+ ULONG_PTR ulUIParam, \
+ LPMAPIPROGRESS lpProgress, \
+ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(CopyFolder) \
+ (THIS_ LPCIID lpSrcInterface, \
+ LPVOID lpSrcFolder, \
+ ULONG cbEntryID, \
+ LPENTRYID lpEntryID, \
+ LPCIID lpDestInterface, \
+ LPVOID lpDestFolder, \
+ LPTSTR lszNewFolderName, \
+ ULONG_PTR ulUIParam, \
+ LPMAPIPROGRESS lpProgress, \
+ ULONG ulFlags) IPURE; \
+
+#define MAPI_IMAPISUPPORT_METHODS3(IPURE) \
+ MAPIMETHOD(DoCopyTo) \
+ (THIS_ LPCIID lpSrcInterface, \
+ LPVOID lpSrcObj, \
+ ULONG ciidExclude, \
+ LPCIID rgiidExclude, \
+ LPSPropTagArray lpExcludeProps, \
+ ULONG_PTR ulUIParam, \
+ LPMAPIPROGRESS lpProgress, \
+ LPCIID lpDestInterface, \
+ LPVOID lpDestObj, \
+ ULONG ulFlags, \
+ LPSPropProblemArray FAR * lppProblems) IPURE; \
+ MAPIMETHOD(DoCopyProps) \
+ (THIS_ LPCIID lpSrcInterface, \
+ LPVOID lpSrcObj, \
+ LPSPropTagArray lpIncludeProps, \
+ ULONG_PTR ulUIParam, \
+ LPMAPIPROGRESS lpProgress, \
+ LPCIID lpDestInterface, \
+ LPVOID lpDestObj, \
+ ULONG ulFlags, \
+ LPSPropProblemArray FAR * lppProblems) IPURE; \
+ MAPIMETHOD(DoProgressDialog) \
+ (THIS_ ULONG_PTR ulUIParam, \
+ ULONG ulFlags, \
+ LPMAPIPROGRESS FAR * lppProgress) IPURE; \
+ MAPIMETHOD(ReadReceipt) \
+ (THIS_ ULONG ulFlags, \
+ LPMESSAGE lpReadMessage, \
+ LPMESSAGE FAR * lppEmptyMessage) IPURE; \
+ MAPIMETHOD(PrepareSubmit) \
+ (THIS_ LPMESSAGE lpMessage, \
+ ULONG FAR * lpulFlags) IPURE; \
+ MAPIMETHOD(ExpandRecips) \
+ (THIS_ LPMESSAGE lpMessage, \
+ ULONG FAR * lpulFlags) IPURE; \
+ MAPIMETHOD(UpdatePAB) \
+ (THIS_ ULONG ulFlags, \
+ LPMESSAGE lpMessage) IPURE; \
+ MAPIMETHOD(DoSentMail) \
+ (THIS_ ULONG ulFlags, \
+ LPMESSAGE lpMessage) IPURE; \
+ MAPIMETHOD(OpenAddressBook) \
+ (THIS_ LPCIID lpInterface, \
+ ULONG ulFlags, \
+ LPADRBOOK FAR * lppAdrBook) IPURE; \
+ MAPIMETHOD(Preprocess) \
+ (THIS_ ULONG ulFlags, \
+ ULONG cbEntryID, \
+ LPENTRYID lpEntryID) IPURE; \
+ MAPIMETHOD(CompleteMsg) \
+ (THIS_ ULONG ulFlags, \
+ ULONG cbEntryID, \
+ LPENTRYID lpEntryID) IPURE; \
+ MAPIMETHOD(StoreLogoffTransports) \
+ (THIS_ ULONG FAR * lpulFlags) IPURE; \
+ MAPIMETHOD(StatusRecips) \
+ (THIS_ LPMESSAGE lpMessage, \
+ LPADRLIST lpRecipList) IPURE; \
+ MAPIMETHOD(WrapStoreEntryID) \
+ (THIS_ ULONG cbOrigEntry, \
+ LPENTRYID lpOrigEntry, \
+ ULONG FAR * lpcbWrappedEntry, \
+ LPENTRYID FAR * lppWrappedEntry) IPURE; \
+ MAPIMETHOD(ModifyProfile) \
+ (THIS_ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(IStorageFromStream) \
+ (THIS_ LPUNKNOWN lpUnkIn, \
+ LPCIID lpInterface, \
+ ULONG ulFlags, \
+ LPSTORAGE FAR * lppStorageOut) IPURE; \
+ MAPIMETHOD(GetSvcConfigSupportObj) \
+ (THIS_ ULONG ulFlags, \
+ LPMAPISUP FAR * lppSvcSupport) IPURE; \
+
+#undef INTERFACE
+#define INTERFACE IMAPISupport
+DECLARE_MAPI_INTERFACE_(IMAPISupport, IUnknown)
+{
+ BEGIN_INTERFACE
+ MAPI_IUNKNOWN_METHODS(PURE)
+ MAPI_IMAPISUPPORT_METHODS1(PURE)
+ MAPI_IMAPISUPPORT_METHODS2(PURE)
+ MAPI_IMAPISUPPORT_METHODS3(PURE)
+};
+
+
+/********************************************************************/
+/* */
+/* ADDRESS BOOK SPI */
+/* */
+/********************************************************************/
+
+/* Address Book Provider ------------------------------------------------- */
+
+/* OpenTemplateID() */
+#define FILL_ENTRY ((ULONG) 0x00000001)
+
+/* For Logon() */
+
+/*#define AB_NO_DIALOG ((ULONG) 0x00000001) in mapidefs.h */
+/*#define MAPI_UNICODE ((ULONG) 0x80000000) in mapidefs.h */
+
+
+
+DECLARE_MAPI_INTERFACE_PTR(IABProvider, LPABPROVIDER);
+DECLARE_MAPI_INTERFACE_PTR(IABLogon, LPABLOGON);
+
+#define MAPI_IABPROVIDER_METHODS(IPURE) \
+ MAPIMETHOD(Shutdown) \
+ (THIS_ ULONG FAR * lpulFlags) IPURE; \
+ MAPIMETHOD(Logon) \
+ (THIS_ LPMAPISUP lpMAPISup, \
+ ULONG_PTR ulUIParam, \
+ LPTSTR lpszProfileName, \
+ ULONG ulFlags, \
+ ULONG FAR * lpulpcbSecurity, \
+ LPBYTE FAR * lppbSecurity, \
+ LPMAPIERROR FAR * lppMAPIError, \
+ LPABLOGON FAR * lppABLogon) IPURE; \
+
+#undef INTERFACE
+#define INTERFACE IABProvider
+DECLARE_MAPI_INTERFACE_(IABProvider, IUnknown)
+{
+ BEGIN_INTERFACE
+ MAPI_IUNKNOWN_METHODS(PURE)
+ MAPI_IABPROVIDER_METHODS(PURE)
+};
+
+/* For GetOneOffTable() */
+/****** MAPI_UNICODE ((ULONG) 0x80000000) */
+
+#define MAPI_IABLOGON_METHODS(IPURE) \
+ MAPIMETHOD(GetLastError) \
+ (THIS_ HRESULT hResult, \
+ ULONG ulFlags, \
+ LPMAPIERROR FAR * lppMAPIError) IPURE; \
+ MAPIMETHOD(Logoff) \
+ (THIS_ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(OpenEntry) \
+ (THIS_ ULONG cbEntryID, \
+ LPENTRYID lpEntryID, \
+ LPCIID lpInterface, \
+ ULONG ulFlags, \
+ ULONG FAR * lpulObjType, \
+ LPUNKNOWN FAR * lppUnk) IPURE; \
+ MAPIMETHOD(CompareEntryIDs) \
+ (THIS_ ULONG cbEntryID1, \
+ LPENTRYID lpEntryID1, \
+ ULONG cbEntryID2, \
+ LPENTRYID lpEntryID2, \
+ ULONG ulFlags, \
+ ULONG FAR * lpulResult) IPURE; \
+ MAPIMETHOD(Advise) \
+ (THIS_ ULONG cbEntryID, \
+ LPENTRYID lpEntryID, \
+ ULONG ulEventMask, \
+ LPMAPIADVISESINK lpAdviseSink, \
+ ULONG_PTR FAR * lpulConnection) IPURE; \
+ MAPIMETHOD(Unadvise) \
+ (THIS_ ULONG_PTR ulConnection) IPURE; \
+ MAPIMETHOD(OpenStatusEntry) \
+ (THIS_ LPCIID lpInterface, \
+ ULONG ulFlags, \
+ ULONG FAR * lpulObjType, \
+ LPMAPISTATUS FAR * lppEntry) IPURE; \
+ MAPIMETHOD(OpenTemplateID) \
+ (THIS_ ULONG cbTemplateID, \
+ LPENTRYID lpTemplateID, \
+ ULONG ulTemplateFlags, \
+ LPMAPIPROP lpMAPIPropData, \
+ LPCIID lpInterface, \
+ LPMAPIPROP FAR * lppMAPIPropNew, \
+ LPMAPIPROP lpMAPIPropSibling) IPURE; \
+ MAPIMETHOD(GetOneOffTable) \
+ (THIS_ ULONG ulFlags, \
+ LPMAPITABLE FAR * lppTable) IPURE; \
+ MAPIMETHOD(PrepareRecips) \
+ (THIS_ ULONG ulFlags, \
+ LPSPropTagArray lpPropTagArray, \
+ LPADRLIST lpRecipList) IPURE; \
+
+#undef INTERFACE
+#define INTERFACE IABLogon
+DECLARE_MAPI_INTERFACE_(IABLogon, IUnknown)
+{
+ BEGIN_INTERFACE
+ MAPI_IUNKNOWN_METHODS(PURE)
+ MAPI_IABLOGON_METHODS(PURE)
+};
+
+typedef HRESULT (STDMAPIINITCALLTYPE ABPROVIDERINIT)(
+ HINSTANCE hInstance,
+ LPMALLOC lpMalloc,
+ LPALLOCATEBUFFER lpAllocateBuffer,
+ LPALLOCATEMORE lpAllocateMore,
+ LPFREEBUFFER lpFreeBuffer,
+ ULONG ulFlags,
+ ULONG ulMAPIVer,
+ ULONG FAR * lpulProviderVer,
+ LPABPROVIDER FAR * lppABProvider
+);
+
+ABPROVIDERINIT ABProviderInit;
+
+
+
+/********************************************************************/
+/* */
+/* TRANSPORT SPI */
+/* */
+/********************************************************************/
+
+/* For DeinitTransport */
+
+#define DEINIT_NORMAL ((ULONG) 0x00000001)
+#define DEINIT_HURRY ((ULONG) 0x80000000)
+
+/* For TransportLogon */
+
+/* Flags that the Spooler may pass to the transport: */
+
+#define LOGON_NO_DIALOG ((ULONG) 0x00000001)
+#define LOGON_NO_CONNECT ((ULONG) 0x00000004)
+#define LOGON_NO_INBOUND ((ULONG) 0x00000008)
+#define LOGON_NO_OUTBOUND ((ULONG) 0x00000010)
+/*#define MAPI_UNICODE ((ULONG) 0x80000000) in mapidefs.h */
+
+/* Flags that the transport may pass to the Spooler: */
+
+#define LOGON_SP_IDLE ((ULONG) 0x00010000)
+#define LOGON_SP_POLL ((ULONG) 0x00020000)
+#define LOGON_SP_RESOLVE ((ULONG) 0x00040000)
+
+
+DECLARE_MAPI_INTERFACE_PTR(IXPProvider, LPXPPROVIDER);
+DECLARE_MAPI_INTERFACE_PTR(IXPLogon, LPXPLOGON);
+
+#define MAPI_IXPPROVIDER_METHODS(IPURE) \
+ MAPIMETHOD(Shutdown) \
+ (THIS_ ULONG FAR * lpulFlags) IPURE; \
+ MAPIMETHOD(TransportLogon) \
+ (THIS_ LPMAPISUP lpMAPISup, \
+ ULONG_PTR ulUIParam, \
+ __in LPTSTR lpszProfileName, \
+ ULONG FAR * lpulFlags, \
+ LPMAPIERROR FAR * lppMAPIError, \
+ LPXPLOGON FAR * lppXPLogon) IPURE; \
+
+#undef INTERFACE
+#define INTERFACE IXPProvider
+DECLARE_MAPI_INTERFACE_(IXPProvider, IUnknown)
+{
+ BEGIN_INTERFACE
+ MAPI_IUNKNOWN_METHODS(PURE)
+ MAPI_IXPPROVIDER_METHODS(PURE)
+};
+
+/* OptionData returned from call to RegisterOptions */
+
+#define OPTION_TYPE_RECIPIENT ((ULONG) 0x00000001)
+#define OPTION_TYPE_MESSAGE ((ULONG) 0x00000002)
+
+typedef struct _OPTIONDATA
+{
+ ULONG ulFlags; /* MAPI_RECIPIENT, MAPI_MESSAGE */
+ LPGUID lpRecipGUID; /* Same as returned by AddressTypes() */
+ LPTSTR lpszAdrType; /* Same as returned by AddressTypes() */
+ LPTSTR lpszDLLName; /* Options DLL */
+ ULONG ulOrdinal; /* Ordinal in that DLL */
+ ULONG cbOptionsData; /* Count of bytes in lpbOptionsData */
+ LPBYTE lpbOptionsData; /* Providers per [recip|message] option data */
+ ULONG cOptionsProps; /* Count of Options default prop values */
+ LPSPropValue lpOptionsProps; /* Default Options property values */
+} OPTIONDATA, FAR *LPOPTIONDATA;
+
+typedef SCODE (STDMAPIINITCALLTYPE OPTIONCALLBACK)(
+ HINSTANCE hInst,
+ LPMALLOC lpMalloc,
+ ULONG ulFlags,
+ ULONG cbOptionData,
+ LPBYTE lpbOptionData,
+ LPMAPISUP lpMAPISup,
+ LPMAPIPROP lpDataSource,
+ LPMAPIPROP FAR * lppWrappedSource,
+ LPMAPIERROR FAR * lppMAPIError);
+
+/* For XP_AddressTypes */
+
+/*#define MAPI_UNICODE ((ULONG) 0x80000000) in mapidefs.h */
+
+/* For XP_RegisterRecipOptions */
+
+/*#define MAPI_UNICODE ((ULONG) 0x80000000) in mapidefs.h */
+
+/* For XP_RegisterMessageOptions */
+
+/*#define MAPI_UNICODE ((ULONG) 0x80000000) in mapidefs.h */
+
+/* For TransportNotify */
+
+#define NOTIFY_ABORT_DEFERRED ((ULONG) 0x40000000)
+#define NOTIFY_CANCEL_MESSAGE ((ULONG) 0x80000000)
+#define NOTIFY_BEGIN_INBOUND ((ULONG) 0x00000001)
+#define NOTIFY_END_INBOUND ((ULONG) 0x00010000)
+#define NOTIFY_BEGIN_OUTBOUND ((ULONG) 0x00000002)
+#define NOTIFY_END_OUTBOUND ((ULONG) 0x00020000)
+#define NOTIFY_BEGIN_INBOUND_FLUSH ((ULONG) 0x00000004)
+#define NOTIFY_END_INBOUND_FLUSH ((ULONG) 0x00040000)
+#define NOTIFY_BEGIN_OUTBOUND_FLUSH ((ULONG) 0x00000008)
+#define NOTIFY_END_OUTBOUND_FLUSH ((ULONG) 0x00080000)
+
+/* For TransportLogoff */
+
+#define LOGOFF_NORMAL ((ULONG) 0x00000001)
+#define LOGOFF_HURRY ((ULONG) 0x80000000)
+
+/* For SubmitMessage */
+
+#define BEGIN_DEFERRED ((ULONG) 0x00000001)
+
+/* For EndMessage */
+
+/* Flags that the Spooler may pass to the Transport: */
+
+/* Flags that the transport may pass to the Spooler: */
+
+#define END_RESEND_NOW ((ULONG) 0x00010000)
+#define END_RESEND_LATER ((ULONG) 0x00020000)
+#define END_DONT_RESEND ((ULONG) 0x00040000)
+
+#define MAPI_IXPLOGON_METHODS(IPURE) \
+ MAPIMETHOD(AddressTypes) \
+ (THIS_ ULONG FAR * lpulFlags, \
+ ULONG FAR * lpcAdrType, \
+ __deref_out_ecount_full(*lpcAdrType) LPTSTR FAR * FAR * lpppAdrTypeArray, \
+ ULONG FAR * lpcMAPIUID, \
+ LPMAPIUID FAR * FAR * lpppUIDArray) IPURE; \
+ MAPIMETHOD(RegisterOptions) \
+ (THIS_ ULONG FAR * lpulFlags, \
+ ULONG FAR * lpcOptions, \
+ LPOPTIONDATA FAR * lppOptions) IPURE; \
+ MAPIMETHOD(TransportNotify) \
+ (THIS_ ULONG FAR * lpulFlags, \
+ LPVOID FAR * lppvData) IPURE; \
+ MAPIMETHOD(Idle) \
+ (THIS_ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(TransportLogoff) \
+ (THIS_ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(SubmitMessage) \
+ (THIS_ ULONG ulFlags, \
+ LPMESSAGE lpMessage, \
+ ULONG_PTR FAR * lpulMsgRef, \
+ ULONG_PTR FAR * lpulReturnParm) IPURE; \
+ MAPIMETHOD(EndMessage) \
+ (THIS_ ULONG_PTR ulMsgRef, \
+ ULONG FAR * lpulFlags) IPURE; \
+ MAPIMETHOD(Poll) \
+ (THIS_ ULONG FAR * lpulIncoming) IPURE; \
+ MAPIMETHOD(StartMessage) \
+ (THIS_ ULONG ulFlags, \
+ LPMESSAGE lpMessage, \
+ ULONG_PTR FAR * lpulMsgRef) IPURE; \
+ MAPIMETHOD(OpenStatusEntry) \
+ (THIS_ LPCIID lpInterface, \
+ ULONG ulFlags, \
+ ULONG FAR * lpulObjType, \
+ LPMAPISTATUS FAR * lppEntry) IPURE; \
+ MAPIMETHOD(ValidateState) \
+ (THIS_ ULONG_PTR ulUIParam, \
+ ULONG ulFlags) IPURE; \
+ MAPIMETHOD(FlushQueues) \
+ (THIS_ ULONG_PTR ulUIParam, \
+ ULONG cbTargetTransport, \
+ LPENTRYID lpTargetTransport, \
+ ULONG ulFlags) IPURE; \
+
+#undef INTERFACE
+#define INTERFACE IXPLogon
+DECLARE_MAPI_INTERFACE_(IXPLogon, IUnknown)
+{
+ BEGIN_INTERFACE
+ MAPI_IUNKNOWN_METHODS(PURE)
+ MAPI_IXPLOGON_METHODS(PURE)
+};
+
+
+/* Transport Provider Entry Point */
+
+typedef HRESULT (STDMAPIINITCALLTYPE XPPROVIDERINIT)(
+ HINSTANCE hInstance,
+ LPMALLOC lpMalloc,
+ LPALLOCATEBUFFER lpAllocateBuffer,
+ LPALLOCATEMORE lpAllocateMore,
+ LPFREEBUFFER lpFreeBuffer,
+ ULONG ulFlags,
+ ULONG ulMAPIVer,
+ ULONG FAR * lpulProviderVer,
+ LPXPPROVIDER FAR * lppXPProvider);
+
+XPPROVIDERINIT XPProviderInit;
+
+/********************************************************************/
+/* */
+/* MESSAGE STORE SPI */
+/* */
+/********************************************************************/
+
+/* Flags and enums */
+
+/* For Logon() */
+
+/*#define MAPI_UNICODE ((ULONG) 0x80000000) in mapidefs.h */
+/*#define MDB_NO_DIALOG ((ULONG) 0x00000001) in mapidefs.h */
+/*#define MDB_WRITE ((ULONG) 0x00000004) in mapidefs.h */
+/*#define MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) in mapidefs.h */
+/*#define MDB_TEMPORARY ((ULONG) 0x00000020) in mapidefs.h */
+/*#define MDB_NO_MAIL ((ULONG) 0x00000080) in mapidefs.h */
+
+/* For SpoolerLogon() */
+
+/*#define MAPI_UNICODE ((ULONG) 0x80000000) in mapidefs.h */
+/*#define MDB_NO_DIALOG ((ULONG) 0x00000001) in mapidefs.h */
+/*#define MDB_WRITE ((ULONG) 0x00000004) in mapidefs.h */
+/*#define MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) in mapidefs.h */
+
+/* GetCredentials, SetCredentials */
+
+#define LOGON_SP_TRANSPORT ((ULONG) 0x00000001)
+#define LOGON_SP_PROMPT ((ULONG) 0x00000002)
+#define LOGON_SP_NEWPW ((ULONG) 0x00000004)
+#define LOGON_CHANGED ((ULONG) 0x00000008)
+
+/* DoMCDialog */
+
+#define DIALOG_FOLDER ((ULONG) 0x00000001)
+#define DIALOG_MESSAGE ((ULONG) 0x00000002)
+#define DIALOG_PROP ((ULONG) 0x00000004)
+#define DIALOG_ATTACH ((ULONG) 0x00000008)
+
+#define DIALOG_MOVE ((ULONG) 0x00000010)
+#define DIALOG_COPY ((ULONG) 0x00000020)
+#define DIALOG_DELETE ((ULONG) 0x00000040)
+
+#define DIALOG_ALLOW_CANCEL ((ULONG) 0x00000080)
+#define DIALOG_CONFIRM_CANCEL ((ULONG) 0x00000100)
+
+/* ExpandRecips */
+
+#define NEEDS_PREPROCESSING ((ULONG) 0x00000001)
+#define NEEDS_SPOOLER ((ULONG) 0x00000002)
+
+/* PrepareSubmit */
+
+#define CHECK_SENDER ((ULONG) 0x00000001)
+#define NON_STANDARD ((ULONG) 0x00010000)
+
+
+DECLARE_MAPI_INTERFACE_PTR(IMSLogon, LPMSLOGON);
+DECLARE_MAPI_INTERFACE_PTR(IMSProvider, LPMSPROVIDER);
+
+/* Message Store Provider Interface (IMSPROVIDER) */
+
+#define MAPI_IMSPROVIDER_METHODS(IPURE) \
+ MAPIMETHOD(Shutdown) \
+ (THIS_ ULONG FAR * lpulFlags) IPURE; \
+ MAPIMETHOD(Logon) \
+ (THIS_ LPMAPISUP lpMAPISup, \
+ ULONG_PTR ulUIParam, \
+ LPTSTR lpszProfileName, \
+ ULONG cbEntryID, \
+ LPENTRYID lpEntryID, \
+ ULONG ulFlags, \
+ LPCIID lpInterface, \
+ ULONG FAR * lpcbSpoolSecurity, \
+ LPBYTE FAR * lppbSpoolSecurity, \
+ LPMAPIERROR FAR * lppMAPIError, \
+ LPMSLOGON FAR * lppMSLogon, \
+ LPMDB FAR * lppMDB) IPURE; \
+ MAPIMETHOD(SpoolerLogon) \
+ (THIS_ LPMAPISUP lpMAPISup, \
+ ULONG_PTR ulUIParam, \
+ LPTSTR lpszProfileName, \
+ ULONG cbEntryID, \
+ LPENTRYID lpEntryID, \
+ ULONG ulFlags, \
+ LPCIID lpInterface, \
+ ULONG cbSpoolSecurity, \
+ LPBYTE lpbSpoolSecurity, \
+ LPMAPIERROR FAR * lppMAPIError, \
+ LPMSLOGON FAR * lppMSLogon, \
+ LPMDB FAR * lppMDB) IPURE; \
+ MAPIMETHOD(CompareStoreIDs) \
+ (THIS_ ULONG cbEntryID1, \
+ LPENTRYID lpEntryID1, \
+ ULONG cbEntryID2, \
+ LPENTRYID lpEntryID2, \
+ ULONG ulFlags, \
+ ULONG FAR * lpulResult) IPURE; \
+
+#undef INTERFACE
+#define INTERFACE IMSProvider
+DECLARE_MAPI_INTERFACE_(IMSProvider, IUnknown)
+{
+ BEGIN_INTERFACE
+ MAPI_IUNKNOWN_METHODS(PURE)
+ MAPI_IMSPROVIDER_METHODS(PURE)
+};
+
+/* The MSLOGON object is returned by the Logon() method of the
+ * MSPROVIDER interface. This object is for use by MAPIX.DLL.
+ */
+#define MAPI_IMSLOGON_METHODS(IPURE) \
+ MAPIMETHOD(GetLastError) \
+ (THIS_ HRESULT hResult, \
+ ULONG ulFlags, \
+ LPMAPIERROR FAR * lppMAPIError) IPURE; \
+ MAPIMETHOD(Logoff) \
+ (THIS_ ULONG FAR * lpulFlags) IPURE; \
+ MAPIMETHOD(OpenEntry) \
+ (THIS_ ULONG cbEntryID, \
+ LPENTRYID lpEntryID, \
+ LPCIID lpInterface, \
+ ULONG ulFlags, \
+ ULONG FAR * lpulObjType, \
+ LPUNKNOWN FAR * lppUnk) IPURE; \
+ MAPIMETHOD(CompareEntryIDs) \
+ (THIS_ ULONG cbEntryID1, \
+ LPENTRYID lpEntryID1, \
+ ULONG cbEntryID2, \
+ LPENTRYID lpEntryID2, \
+ ULONG ulFlags, \
+ ULONG FAR * lpulResult) IPURE; \
+ MAPIMETHOD(Advise) \
+ (THIS_ ULONG cbEntryID, \
+ LPENTRYID lpEntryID, \
+ ULONG ulEventMask, \
+ LPMAPIADVISESINK lpAdviseSink, \
+ ULONG_PTR FAR * lpulConnection) IPURE; \
+ MAPIMETHOD(Unadvise) \
+ (THIS_ ULONG_PTR ulConnection) IPURE; \
+ MAPIMETHOD(OpenStatusEntry) \
+ (THIS_ LPCIID lpInterface, \
+ ULONG ulFlags, \
+ ULONG FAR * lpulObjType, \
+ LPVOID FAR * lppEntry) IPURE; \
+
+#undef INTERFACE
+#define INTERFACE IMSLogon
+DECLARE_MAPI_INTERFACE_(IMSLogon, IUnknown)
+{
+ BEGIN_INTERFACE
+ MAPI_IUNKNOWN_METHODS(PURE)
+ MAPI_IMSLOGON_METHODS(PURE)
+};
+
+/* Message Store Provider Entry Point */
+
+typedef HRESULT (STDMAPIINITCALLTYPE MSPROVIDERINIT)(
+ HINSTANCE hInstance,
+ LPMALLOC lpMalloc, /* AddRef() if you keep it */
+ LPALLOCATEBUFFER lpAllocateBuffer, /* -> AllocateBuffer */
+ LPALLOCATEMORE lpAllocateMore, /* -> AllocateMore */
+ LPFREEBUFFER lpFreeBuffer, /* -> FreeBuffer */
+ ULONG ulFlags,
+ ULONG ulMAPIVer,
+ ULONG FAR * lpulProviderVer,
+ LPMSPROVIDER FAR * lppMSProvider
+);
+
+MSPROVIDERINIT MSProviderInit;
+
+
+/********************************************************************/
+/* */
+/* MESSAGE SERVICE CONFIGURATION */
+/* */
+/********************************************************************/
+
+/* Flags for service configuration entry point */
+
+/* #define MAPI_UNICODE 0x80000000 */
+/* #define SERVICE_UI_ALWAYS 0x00000002 */
+/* #define SERVICE_UI_ALLOWED 0x00000010 */
+#define MSG_SERVICE_UI_READ_ONLY 0x00000008 /* display parameters only */
+#define SERVICE_LOGON_FAILED 0x00000020 /* reconfigure provider */
+
+/* Contexts for service configuration entry point */
+
+#define MSG_SERVICE_INSTALL 0x00000001
+#define MSG_SERVICE_CREATE 0x00000002
+#define MSG_SERVICE_CONFIGURE 0x00000003
+#define MSG_SERVICE_DELETE 0x00000004
+#define MSG_SERVICE_UNINSTALL 0x00000005
+#define MSG_SERVICE_PROVIDER_CREATE 0x00000006
+#define MSG_SERVICE_PROVIDER_DELETE 0x00000007
+
+/* Prototype for service configuration entry point */
+
+typedef HRESULT (STDAPICALLTYPE MSGSERVICEENTRY)(
+ HINSTANCE hInstance,
+ LPMALLOC lpMalloc,
+ LPMAPISUP lpMAPISup,
+ ULONG_PTR ulUIParam,
+ ULONG ulFlags,
+ ULONG ulContext,
+ ULONG cValues,
+ LPSPropValue lpProps,
+ LPPROVIDERADMIN lpProviderAdmin,
+ LPMAPIERROR FAR *lppMapiError
+);
+typedef MSGSERVICEENTRY FAR *LPMSGSERVICEENTRY;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPISPI_H */
+