diff options
Diffstat (limited to 'mailnews/mapi/include/mapispi.h')
-rw-r--r-- | mailnews/mapi/include/mapispi.h | 929 |
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 */ + |