home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / msinc.pak / MAPISPI.H < prev    next >
C/C++ Source or Header  |  1997-07-23  |  47KB  |  936 lines

  1. /*
  2.  *  M A P I S P I . H
  3.  *
  4.  *  Defines the calls and structures exchanged between MAPI or the spooler
  5.  *  and the MAPI service providers
  6.  *
  7.  *  Copyright 1993-1995 Microsoft Corporation. All Rights Reserved.
  8.  */
  9.  
  10. #ifndef MAPISPI_H
  11. #define MAPISPI_H
  12. /* Include common MAPI header files if they haven't been already. */
  13. #ifndef MAPIDEFS_H
  14. #include <mapidefs.h>
  15. #endif
  16. #ifndef MAPICODE_H
  17. #include <mapicode.h>
  18. #endif
  19. #ifndef MAPIGUID_H
  20. #include <mapiguid.h>
  21. #endif
  22. #ifndef MAPITAGS_H
  23. #include <mapitags.h>
  24. #endif
  25.  
  26. #if defined (WIN16) || defined (DOS) || defined (DOS16)
  27. #include <storage.h>
  28. #endif
  29.  
  30. #ifdef __BORLANDC__
  31.   #include <pshpack8.h>
  32. #endif
  33.  
  34. #ifndef BEGIN_INTERFACE
  35. #define BEGIN_INTERFACE
  36. #endif
  37.  
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41.  
  42. /*  The MAPI SPI has a version number.  MAPIX.DLL knows and supports
  43.  *  one or more versions of the SPI.  Each provider supports one or
  44.  *  more versions of the SPI.  Checks are performed in both MAPIX.DLL
  45.  *  and in the provider to ensure that they agree to use exactly one
  46.  *  version of the MAPI SPI.
  47.  *
  48.  *  The SPI version number is composed of a major (8-bit) version,
  49.  *  minor (8-bit) version, and micro (16-bit) version.  The first
  50.  *  retail ship of MAPI 1.0 is expected to be version 1.0.0.
  51.  *  The major version number changes rarely.
  52.  *  The minor version number changes opon each retail ship of
  53.  *  MAPI if the SPI has been modified.
  54.  *  The micro version number changes internally at Microsoft
  55.  *  during development of MAPI.
  56.  *
  57.  *  The version of the SPI documented by this set of header files
  58.  *  is ALWAYS known as "CURRENT_SPI_VERSION".  If you write a
  59.  *  service provider, and get a new set of header files, and update
  60.  *  your code to the new interface, you'll be at the "current" version.
  61.  */
  62. #define CURRENT_SPI_VERSION 0x00010010L
  63.  
  64. /*  Here are some well-known SPI version numbers:
  65.  *  (These will eventually be useful for provider-writers who
  66.  *  might choose to make provider DLLs that support more than
  67.  *  one version of the MAPI SPI.
  68.  */
  69. #define PDK1_SPI_VERSION    0x00010000L /* 0.1.0  MAPI PDK1 Spring 1993 */
  70.  
  71. #define PDK2_SPI_VERSION    0x00010008L /* 0.1.8  MAPI PDK2 Spring 1994 */
  72.  
  73. #define PDK3_SPI_VERSION    0x00010010L /* 0.1.16 MAPI PDK3 Fall 1994   */
  74.  
  75. /*
  76.  * Forward declaration of interface pointers specific to the service
  77.  * provider interface.
  78.  */
  79. DECLARE_MAPI_INTERFACE_PTR(IMAPISupport, LPMAPISUP);
  80.  
  81. /* IMAPISupport Interface -------------------------------------------------- */
  82.  
  83. /* Notification key structure for the MAPI notification engine */
  84.  
  85. typedef struct
  86. {
  87.     ULONG       cb;             /* How big the key is */
  88.     BYTE        ab[MAPI_DIM];   /* Key contents */
  89. } NOTIFKEY, FAR * LPNOTIFKEY;
  90.  
  91. #define CbNewNOTIFKEY(_cb)      (offsetof(NOTIFKEY,ab) + (_cb))
  92. #define CbNOTIFKEY(_lpkey)      (offsetof(NOTIFKEY,ab) + (_lpkey)->cb)
  93. #define SizedNOTIFKEY(_cb, _name) \
  94.     struct _NOTIFKEY_ ## _name \
  95. { \
  96.     ULONG       cb; \
  97.     BYTE        ab[_cb]; \
  98. } _name
  99.  
  100.  
  101. /* For Subscribe() */
  102.  
  103. #define NOTIFY_SYNC             ((ULONG) 0x40000000)
  104.  
  105. /* For Notify() */
  106.  
  107. #define NOTIFY_CANCELED         ((ULONG) 0x80000000)
  108.  
  109.  
  110. /* From the Notification Callback function (well, this is really a ulResult) */
  111.  
  112. #define CALLBACK_DISCONTINUE    ((ULONG) 0x80000000)
  113.  
  114. /* For Transport's SpoolerNotify() */
  115.  
  116. #define NOTIFY_NEWMAIL          ((ULONG) 0x00000001)
  117. #define NOTIFY_READYTOSEND      ((ULONG) 0x00000002)
  118. #define NOTIFY_SENTDEFERRED     ((ULONG) 0x00000004)
  119. #define NOTIFY_CRITSEC          ((ULONG) 0x00001000)
  120. #define NOTIFY_NONCRIT          ((ULONG) 0x00002000)
  121. #define NOTIFY_CONFIG_CHANGE    ((ULONG) 0x00004000)
  122. #define NOTIFY_CRITICAL_ERROR   ((ULONG) 0x10000000)
  123.  
  124. /* For Message Store's SpoolerNotify() */
  125.  
  126. #define NOTIFY_NEWMAIL_RECEIVED ((ULONG) 0x20000000)
  127.  
  128. /* For ModifyStatusRow() */
  129.  
  130. #define STATUSROW_UPDATE        ((ULONG) 0x10000000)
  131.  
  132. /* For IStorageFromStream() */
  133.  
  134. #define STGSTRM_RESET           ((ULONG) 0x00000000)
  135. #define STGSTRM_CURRENT         ((ULONG) 0x10000000)
  136. #define STGSTRM_MODIFY          ((ULONG) 0x00000002)
  137. #define STGSTRM_CREATE          ((ULONG) 0x00001000)
  138.  
  139. /* For GetOneOffTable() */
  140. /****** MAPI_UNICODE            ((ULONG) 0x80000000) */
  141.  
  142. /* For CreateOneOff() */
  143. /****** MAPI_UNICODE            ((ULONG) 0x80000000) */
  144. /****** MAPI_SEND_NO_RICH_INFO  ((ULONG) 0x00010000) */
  145.  
  146. /* For ReadReceipt() */
  147. #define MAPI_NON_READ           ((ULONG) 0x00000001)
  148.  
  149. /* For DoConfigPropSheet() */
  150. /****** MAPI_UNICODE            ((ULONG) 0x80000000) */
  151.  
  152. /* Preprocessor calls: */
  153.  
  154. /* PreprocessMessage, first ordinal in RegisterPreprocessor(). */
  155.  
  156. typedef HRESULT (STDMETHODCALLTYPE PREPROCESSMESSAGE)(
  157.                     LPVOID lpvSession,
  158.                     LPMESSAGE lpMessage,
  159.                     LPADRBOOK lpAdrBook,
  160.                     LPMAPIFOLDER lpFolder,
  161.                     LPALLOCATEBUFFER AllocateBuffer,
  162.                     LPALLOCATEMORE AllocateMore,
  163.                     LPFREEBUFFER FreeBuffer,
  164.                     ULONG FAR *lpcOutbound,
  165.                     LPMESSAGE FAR * FAR *lpppMessage,
  166.                     LPADRLIST FAR *lppRecipList);
  167.  
  168. /* RemovePreprocessInfo, second ordinal in RegisterPreprocessor(). */
  169.  
  170. typedef HRESULT (STDMETHODCALLTYPE REMOVEPREPROCESSINFO)(LPMESSAGE lpMessage);
  171.  
  172. /* Function pointer for GetReleaseInfo */
  173.  
  174. #define MAPI_IMAPISUPPORT_METHODS1(IPURE)                               \
  175.     MAPIMETHOD(GetLastError)                                            \
  176.         (THIS_  HRESULT                     hResult,                    \
  177.                 ULONG                       ulFlags,                    \
  178.                 LPMAPIERROR FAR *           lppMAPIError) IPURE;        \
  179.     MAPIMETHOD(GetMemAllocRoutines)                                     \
  180.         (THIS_  LPALLOCATEBUFFER FAR *      lpAllocateBuffer,           \
  181.                 LPALLOCATEMORE FAR *        lpAllocateMore,             \
  182.                 LPFREEBUFFER FAR *          lpFreeBuffer) IPURE;        \
  183.     MAPIMETHOD(Subscribe)                                               \
  184.         (THIS_  LPNOTIFKEY                  lpKey,                      \
  185.                 ULONG                       ulEventMask,                \
  186.                 ULONG                       ulFlags,                    \
  187.                 LPMAPIADVISESINK            lpAdviseSink,               \
  188.                 ULONG FAR *                 lpulConnection) IPURE;      \
  189.     MAPIMETHOD(Unsubscribe)                                             \
  190.         (THIS_  ULONG                       ulConnection) IPURE;        \
  191.     MAPIMETHOD(Notify)                                                  \
  192.         (THIS_  LPNOTIFKEY                  lpKey,                      \
  193.                 ULONG                       cNotification,              \
  194.                 LPNOTIFICATION              lpNotifications,            \
  195.                 ULONG FAR *                 lpulFlags) IPURE;           \
  196.     MAPIMETHOD(ModifyStatusRow)                                         \
  197.         (THIS_  ULONG                       cValues,                    \
  198.                 LPSPropValue                lpColumnVals,               \
  199.                 ULONG                       ulFlags) IPURE;             \
  200.     MAPIMETHOD(OpenProfileSection)                                      \
  201.         (THIS_  LPMAPIUID                   lpUid,                      \
  202.                 ULONG                       ulFlags,                    \
  203.                 LPPROFSECT FAR *            lppProfileObj) IPURE;       \
  204.     MAPIMETHOD(RegisterPreprocessor)                                    \
  205.         (THIS_  LPMAPIUID                   lpMuid,                     \
  206.                 LPTSTR                      lpszAdrType,                \
  207.                 LPTSTR                      lpszDLLName,                \
  208.                 LPSTR   /* String8! */      lpszPreprocess,             \
  209.                 LPSTR   /* String8! */      lpszRemovePreprocessInfo,   \
  210.                 ULONG                       ulFlags) IPURE;             \
  211.     MAPIMETHOD(NewUID)                                                  \
  212.         (THIS_  LPMAPIUID                   lpMuid) IPURE;              \
  213.     MAPIMETHOD(MakeInvalid)                                             \
  214.         (THIS_  ULONG                       ulFlags,                    \
  215.                 LPVOID                      lpObject,                   \
  216.                 ULONG                       ulRefCount,                 \
  217.                 ULONG                       cMethods) IPURE;            \
  218.  
  219. #define MAPI_IMAPISUPPORT_METHODS2(IPURE)                               \
  220.     MAPIMETHOD(SpoolerYield)                                            \
  221.         (THIS_  ULONG                       ulFlags) IPURE;             \
  222.     MAPIMETHOD(SpoolerNotify)                                           \
  223.         (THIS_  ULONG                       ulFlags,                    \
  224.                 LPVOID                      lpvData) IPURE;             \
  225.     MAPIMETHOD(CreateOneOff)                                            \
  226.         (THIS_  LPTSTR                      lpszName,                   \
  227.                 LPTSTR                      lpszAdrType,                \
  228.                 LPTSTR                      lpszAddress,                \
  229.                 ULONG                       ulFlags,                    \
  230.                 ULONG FAR *                 lpcbEntryID,                \
  231.                 LPENTRYID FAR *             lppEntryID) IPURE;          \
  232.     MAPIMETHOD(SetProviderUID)                                          \
  233.         (THIS_  LPMAPIUID                   lpProviderID,               \
  234.                 ULONG                       ulFlags) IPURE;             \
  235.     MAPIMETHOD(CompareEntryIDs)                                         \
  236.         (THIS_  ULONG                       cbEntry1,                   \
  237.                 LPENTRYID                   lpEntry1,                   \
  238.                 ULONG                       cbEntry2,                   \
  239.                 LPENTRYID                   lpEntry2,                   \
  240.                 ULONG                       ulCompareFlags,             \
  241.                 ULONG FAR *                 lpulResult) IPURE;          \
  242.     MAPIMETHOD(OpenTemplateID)                                          \
  243.         (THIS_  ULONG                       cbTemplateID,               \
  244.                 LPENTRYID                   lpTemplateID,               \
  245.                 ULONG                       ulTemplateFlags,            \
  246.                 LPMAPIPROP                  lpMAPIPropData,             \
  247.                 LPCIID                      lpInterface,                \
  248.                 LPMAPIPROP FAR *            lppMAPIPropNew,             \
  249.                 LPMAPIPROP                  lpMAPIPropSibling) IPURE;   \
  250.     MAPIMETHOD(OpenEntry)                                               \
  251.         (THIS_  ULONG                       cbEntryID,                  \
  252.                 LPENTRYID                   lpEntryID,                  \
  253.                 LPCIID                      lpInterface,                \
  254.                 ULONG                       ulOpenFlags,                \
  255.                 ULONG FAR *                 lpulObjType,                \
  256.                 LPUNKNOWN FAR *             lppUnk) IPURE;              \
  257.     MAPIMETHOD(GetOneOffTable)                                          \
  258.         (THIS_  ULONG                       ulFlags,                    \
  259.                 LPMAPITABLE FAR *           lppTable) IPURE;            \
  260.     MAPIMETHOD(Address)                                                 \
  261.         (THIS_  ULONG FAR *                 lpulUIParam,                \
  262.                 LPADRPARM                   lpAdrParms,                 \
  263.                 LPADRLIST FAR *             lppAdrList) IPURE;          \
  264.     MAPIMETHOD(Details)                                                 \
  265.         (THIS_  ULONG FAR *                 lpulUIParam,                \
  266.                 LPFNDISMISS                 lpfnDismiss,                \
  267.                 LPVOID                      lpvDismissContext,          \
  268.                 ULONG                       cbEntryID,                  \
  269.                 LPENTRYID                   lpEntryID,                  \
  270.                 LPFNBUTTON                  lpfButtonCallback,          \
  271.                 LPVOID                      lpvButtonContext,           \
  272.                 LPTSTR                      lpszButtonText,             \
  273.                 ULONG                       ulFlags) IPURE;             \
  274.     MAPIMETHOD(NewEntry)                                                \
  275.         (THIS_  ULONG                       ulUIParam,                  \
  276.                 ULONG                       ulFlags,                    \
  277.                 ULONG                       cbEIDContainer,             \
  278.                 LPENTRYID                   lpEIDContainer,             \
  279.                 ULONG                       cbEIDNewEntryTpl,           \
  280.                 LPENTRYID                   lpEIDNewEntryTpl,           \
  281.                 ULONG FAR *                 lpcbEIDNewEntry,            \
  282.                 LPENTRYID FAR *             lppEIDNewEntry) IPURE;      \
  283.     MAPIMETHOD(DoConfigPropsheet)                                       \
  284.         (THIS_  ULONG                       ulUIParam,                  \
  285.                 ULONG                       ulFlags,                    \
  286.                 LPTSTR                      lpszTitle,                  \
  287.                 LPMAPITABLE                 lpDisplayTable,             \
  288.                 LPMAPIPROP                  lpCOnfigData,               \
  289.                 ULONG                       ulTopPage) IPURE;           \
  290.     MAPIMETHOD(CopyMessages)                                            \
  291.         (THIS_  LPCIID                      lpSrcInterface,             \
  292.                 LPVOID                      lpSrcFolder,                \
  293.                 LPENTRYLIST                 lpMsgList,                  \
  294.                 LPCIID                      lpDestInterface,            \
  295.                 LPVOID                      lpDestFolder,               \
  296.                 ULONG                       ulUIParam,                  \
  297.                 LPMAPIPROGRESS              lpProgress,                 \
  298.                 ULONG                       ulFlags) IPURE;             \
  299.     MAPIMETHOD(CopyFolder)                                              \
  300.         (THIS_  LPCIID                      lpSrcInterface,             \
  301.                 LPVOID                      lpSrcFolder,                \
  302.                 ULONG                       cbEntryID,                  \
  303.                 LPENTRYID                   lpEntryID,                  \
  304.                 LPCIID                      lpDestInterface,            \
  305.                 LPVOID                      lpDestFolder,               \
  306.                 LPTSTR                      lszNewFolderName,           \
  307.                 ULONG                       ulUIParam,                  \
  308.                 LPMAPIPROGRESS              lpProgress,                 \
  309.                 ULONG                       ulFlags) IPURE;             \
  310.  
  311. #define MAPI_IMAPISUPPORT_METHODS3(IPURE)                               \
  312.     MAPIMETHOD(DoCopyTo)                                                \
  313.         (THIS_  LPCIID                      lpSrcInterface,             \
  314.                 LPVOID                      lpSrcObj,                   \
  315.                 ULONG                       ciidExclude,                \
  316.                 LPCIID                      rgiidExclude,               \
  317.                 LPSPropTagArray             lpExcludeProps,             \
  318.                 ULONG                       ulUIParam,                  \
  319.                 LPMAPIPROGRESS              lpProgress,                 \
  320.                 LPCIID                      lpDestInterface,            \
  321.                 LPVOID                      lpDestObj,                  \
  322.                 ULONG                       ulFlags,                    \
  323.                 LPSPropProblemArray FAR *   lppProblems) IPURE;         \
  324.     MAPIMETHOD(DoCopyProps)                                             \
  325.         (THIS_  LPCIID                      lpSrcInterface,             \
  326.                 LPVOID                      lpSrcObj,                   \
  327.                 LPSPropTagArray             lpIncludeProps,             \
  328.                 ULONG                       ulUIParam,                  \
  329.                 LPMAPIPROGRESS              lpProgress,                 \
  330.                 LPCIID                      lpDestInterface,            \
  331.                 LPVOID                      lpDestObj,                  \
  332.                 ULONG                       ulFlags,                    \
  333.                 LPSPropProblemArray FAR *   lppProblems) IPURE;         \
  334.     MAPIMETHOD(DoProgressDialog)                                        \
  335.         (THIS_  ULONG                       ulUIParam,                  \
  336.                 ULONG                       ulFlags,                    \
  337.                 LPMAPIPROGRESS FAR *        lppProgress) IPURE;         \
  338.     MAPIMETHOD(ReadReceipt)                                             \
  339.         (THIS_  ULONG                       ulFlags,                    \
  340.                 LPMESSAGE                   lpReadMessage,              \
  341.                 LPMESSAGE FAR *             lppEmptyMessage) IPURE;     \
  342.     MAPIMETHOD(PrepareSubmit)                                           \
  343.         (THIS_  LPMESSAGE                   lpMessage,                  \
  344.                 ULONG FAR *                 lpulFlags) IPURE;           \
  345.     MAPIMETHOD(ExpandRecips)                                            \
  346.         (THIS_  LPMESSAGE                   lpMessage,                  \
  347.                 ULONG FAR *                 lpulFlags) IPURE;           \
  348.     MAPIMETHOD(UpdatePAB)                                               \
  349.         (THIS_  ULONG                       ulFlags,                    \
  350.                 LPMESSAGE                   lpMessage) IPURE;           \
  351.     MAPIMETHOD(DoSentMail)                                              \
  352.         (THIS_  ULONG                       ulFlags,                    \
  353.                 LPMESSAGE                   lpMessage) IPURE;           \
  354.     MAPIMETHOD(OpenAddressBook)                                         \
  355.         (THIS_  LPCIID                      lpInterface,                \
  356.                 ULONG                       ulFlags,                    \
  357.                 LPADRBOOK FAR *             lppAdrBook) IPURE;          \
  358.     MAPIMETHOD(Preprocess)                                              \
  359.         (THIS_  ULONG                       ulFlags,                    \
  360.                 ULONG                       cbEntryID,                  \
  361.                 LPENTRYID                   lpEntryID) IPURE;           \
  362.     MAPIMETHOD(CompleteMsg)                                             \
  363.         (THIS_  ULONG                       ulFlags,                    \
  364.                 ULONG                       cbEntryID,                  \
  365.                 LPENTRYID                   lpEntryID) IPURE;           \
  366.     MAPIMETHOD(StoreLogoffTransports)                                   \
  367.         (THIS_  ULONG FAR *                 lpulFlags) IPURE;           \
  368.     MAPIMETHOD(StatusRecips)                                            \
  369.         (THIS_  LPMESSAGE                   lpMessage,                  \
  370.                 LPADRLIST                   lpRecipList) IPURE;         \
  371.     MAPIMETHOD(WrapStoreEntryID)                                        \
  372.         (THIS_  ULONG                       cbOrigEntry,                \
  373.                 LPENTRYID                   lpOrigEntry,                \
  374.                 ULONG FAR *                 lpcbWrappedEntry,           \
  375.                 LPENTRYID FAR *             lppWrappedEntry) IPURE;     \
  376.     MAPIMETHOD(ModifyProfile)                                           \
  377.         (THIS_  ULONG                       ulFlags) IPURE;             \
  378.     MAPIMETHOD(IStorageFromStream)                                      \
  379.         (THIS_  LPUNKNOWN                   lpUnkIn,                    \
  380.                 LPCIID                      lpInterface,                \
  381.                 ULONG                       ulFlags,                    \
  382.                 LPSTORAGE FAR *             lppStorageOut) IPURE;       \
  383.     MAPIMETHOD(GetSvcConfigSupportObj)                                  \
  384.         (THIS_  ULONG                       ulFlags,                    \
  385.                 LPMAPISUP FAR *             lppSvcSupport) IPURE;       \
  386.  
  387. #undef       INTERFACE
  388. #define      INTERFACE  IMAPISupport
  389. DECLARE_MAPI_INTERFACE_(IMAPISupport, IUnknown)
  390. {
  391.     BEGIN_INTERFACE
  392.     MAPI_IUNKNOWN_METHODS(PURE)
  393.     MAPI_IMAPISUPPORT_METHODS1(PURE)
  394.     MAPI_IMAPISUPPORT_METHODS2(PURE)
  395.     MAPI_IMAPISUPPORT_METHODS3(PURE)
  396. };
  397.  
  398.  
  399. /********************************************************************/
  400. /*                                                                  */
  401. /*                          ADDRESS BOOK SPI                        */
  402. /*                                                                  */
  403. /********************************************************************/
  404.  
  405. /* Address Book Provider ------------------------------------------------- */
  406.  
  407. /* OpenTemplateID() */
  408. #define FILL_ENTRY              ((ULONG) 0x00000001)
  409.  
  410. /* For Logon() */
  411.  
  412. /*#define AB_NO_DIALOG          ((ULONG) 0x00000001) in mapidefs.h */
  413. /*#define MAPI_UNICODE          ((ULONG) 0x80000000) in mapidefs.h */
  414.  
  415.  
  416.  
  417. DECLARE_MAPI_INTERFACE_PTR(IABProvider, LPABPROVIDER);
  418. DECLARE_MAPI_INTERFACE_PTR(IABLogon,    LPABLOGON);
  419.  
  420. #define MAPI_IABPROVIDER_METHODS(IPURE)                                 \
  421.     MAPIMETHOD(Shutdown)                                                \
  422.         (THIS_  ULONG FAR *                 lpulFlags) IPURE;           \
  423.     MAPIMETHOD(Logon)                                                   \
  424.         (THIS_  LPMAPISUP                   lpMAPISup,                  \
  425.                 ULONG                       ulUIParam,                  \
  426.                 LPTSTR                      lpszProfileName,            \
  427.                 ULONG                       ulFlags,                    \
  428.                 ULONG FAR *                 lpulpcbSecurity,            \
  429.                 LPBYTE FAR *                lppbSecurity,               \
  430.                 LPMAPIERROR FAR *           lppMAPIError,               \
  431.                 LPABLOGON FAR *             lppABLogon) IPURE;          \
  432.  
  433. #undef       INTERFACE
  434. #define      INTERFACE  IABProvider
  435. DECLARE_MAPI_INTERFACE_(IABProvider, IUnknown)
  436. {
  437.     BEGIN_INTERFACE
  438.     MAPI_IUNKNOWN_METHODS(PURE)
  439.     MAPI_IABPROVIDER_METHODS(PURE)
  440. };
  441.  
  442. /* For GetOneOffTable() */
  443. /****** MAPI_UNICODE            ((ULONG) 0x80000000) */
  444.  
  445. #define MAPI_IABLOGON_METHODS(IPURE)                                    \
  446.     MAPIMETHOD(GetLastError)                                            \
  447.         (THIS_  HRESULT                     hResult,                    \
  448.                 ULONG                       ulFlags,                    \
  449.                 LPMAPIERROR FAR *           lppMAPIError) IPURE;        \
  450.     MAPIMETHOD(Logoff)                                                  \
  451.         (THIS_  ULONG                       ulFlags) IPURE;             \
  452.     MAPIMETHOD(OpenEntry)                                               \
  453.         (THIS_  ULONG                       cbEntryID,                  \
  454.                 LPENTRYID                   lpEntryID,                  \
  455.                 LPCIID                      lpInterface,                \
  456.                 ULONG                       ulFlags,                    \
  457.                 ULONG FAR *                 lpulObjType,                \
  458.                 LPUNKNOWN FAR *             lppUnk) IPURE;              \
  459.     MAPIMETHOD(CompareEntryIDs)                                         \
  460.         (THIS_  ULONG                       cbEntryID1,                 \
  461.                 LPENTRYID                   lpEntryID1,                 \
  462.                 ULONG                       cbEntryID2,                 \
  463.                 LPENTRYID                   lpEntryID2,                 \
  464.                 ULONG                       ulFlags,                    \
  465.                 ULONG FAR *                 lpulResult) IPURE;          \
  466.     MAPIMETHOD(Advise)                                                  \
  467.         (THIS_  ULONG                       cbEntryID,                  \
  468.                 LPENTRYID                   lpEntryID,                  \
  469.                 ULONG                       ulEventMask,                \
  470.                 LPMAPIADVISESINK            lpAdviseSink,               \
  471.                 ULONG FAR *                 lpulConnection) IPURE;      \
  472.     MAPIMETHOD(Unadvise)                                                \
  473.         (THIS_  ULONG                       ulConnection) IPURE;        \
  474.     MAPIMETHOD(OpenStatusEntry)                                         \
  475.         (THIS_  LPCIID                       lpInterface,                \
  476.                 ULONG                       ulFlags,                    \
  477.                 ULONG FAR *                 lpulObjType,                \
  478.                 LPMAPISTATUS FAR *          lppEntry) IPURE;            \
  479.     MAPIMETHOD(OpenTemplateID)                                          \
  480.         (THIS_  ULONG                       cbTemplateID,               \
  481.                 LPENTRYID                   lpTemplateID,               \
  482.                 ULONG                       ulTemplateFlags,            \
  483.                 LPMAPIPROP                  lpMAPIPropData,             \
  484.                 LPCIID                       lpInterface,                \
  485.                 LPMAPIPROP FAR *            lppMAPIPropNew,             \
  486.                 LPMAPIPROP                  lpMAPIPropSibling) IPURE;   \
  487.     MAPIMETHOD(GetOneOffTable)                                          \
  488.         (THIS_  ULONG                       ulFlags,                    \
  489.                 LPMAPITABLE FAR *           lppTable) IPURE;            \
  490.     MAPIMETHOD(PrepareRecips)                                           \
  491.         (THIS_  ULONG                       ulFlags,                    \
  492.                 LPSPropTagArray             lpPropTagArray,             \
  493.                 LPADRLIST                   lpRecipList) IPURE;         \
  494.  
  495. #undef       INTERFACE
  496. #define      INTERFACE  IABLogon
  497. DECLARE_MAPI_INTERFACE_(IABLogon, IUnknown)
  498. {
  499.     BEGIN_INTERFACE
  500.     MAPI_IUNKNOWN_METHODS(PURE)
  501.     MAPI_IABLOGON_METHODS(PURE)
  502. };
  503.  
  504. typedef HRESULT (STDMAPIINITCALLTYPE ABPROVIDERINIT)(
  505.     HINSTANCE           hInstance,
  506.     LPMALLOC            lpMalloc,
  507.     LPALLOCATEBUFFER    lpAllocateBuffer,
  508.     LPALLOCATEMORE      lpAllocateMore,
  509.     LPFREEBUFFER        lpFreeBuffer,
  510.     ULONG               ulFlags,
  511.     ULONG               ulMAPIVer,
  512.     ULONG FAR *         lpulProviderVer,
  513.     LPABPROVIDER FAR *  lppABProvider
  514. );
  515.  
  516. ABPROVIDERINIT ABProviderInit;
  517.  
  518.  
  519.  
  520. /********************************************************************/
  521. /*                                                                  */
  522. /*                          TRANSPORT SPI                           */
  523. /*                                                                  */
  524. /********************************************************************/
  525.  
  526. /* For DeinitTransport */
  527.  
  528. #define DEINIT_NORMAL               ((ULONG) 0x00000001)
  529. #define DEINIT_HURRY                ((ULONG) 0x80000000)
  530.  
  531. /* For TransportLogon */
  532.  
  533. /* Flags that the Spooler may pass to the transport: */
  534.  
  535. #define LOGON_NO_DIALOG             ((ULONG) 0x00000001)
  536. #define LOGON_NO_CONNECT            ((ULONG) 0x00000004)
  537. #define LOGON_NO_INBOUND            ((ULONG) 0x00000008)
  538. #define LOGON_NO_OUTBOUND           ((ULONG) 0x00000010)
  539. /*#define MAPI_UNICODE              ((ULONG) 0x80000000) in mapidefs.h */
  540.  
  541. /* Flags that the transport may pass to the Spooler: */
  542.  
  543. #define LOGON_SP_IDLE               ((ULONG) 0x00010000)
  544. #define LOGON_SP_POLL               ((ULONG) 0x00020000)
  545. #define LOGON_SP_RESOLVE            ((ULONG) 0x00040000)
  546.  
  547.  
  548. DECLARE_MAPI_INTERFACE_PTR(IXPProvider, LPXPPROVIDER);
  549. DECLARE_MAPI_INTERFACE_PTR(IXPLogon, LPXPLOGON);
  550.  
  551. #define MAPI_IXPPROVIDER_METHODS(IPURE)                                 \
  552.     MAPIMETHOD(Shutdown)                                                \
  553.         (THIS_  ULONG FAR *                 lpulFlags) IPURE;           \
  554.     MAPIMETHOD(TransportLogon)                                          \
  555.         (THIS_  LPMAPISUP                   lpMAPISup,                  \
  556.                 ULONG                       ulUIParam,                  \
  557.                 LPTSTR                      lpszProfileName,            \
  558.                 ULONG FAR *                 lpulFlags,                  \
  559.                 LPMAPIERROR FAR *           lppMAPIError,               \
  560.                 LPXPLOGON FAR *             lppXPLogon) IPURE;          \
  561.  
  562. #undef       INTERFACE
  563. #define      INTERFACE  IXPProvider
  564. DECLARE_MAPI_INTERFACE_(IXPProvider, IUnknown)
  565. {
  566.     BEGIN_INTERFACE 
  567.     MAPI_IUNKNOWN_METHODS(PURE)
  568.     MAPI_IXPPROVIDER_METHODS(PURE)
  569. };
  570.  
  571. /* OptionData returned from call to RegisterOptions */
  572.  
  573. #define OPTION_TYPE_RECIPIENT       ((ULONG) 0x00000001)
  574. #define OPTION_TYPE_MESSAGE         ((ULONG) 0x00000002)
  575.  
  576. typedef struct _OPTIONDATA
  577. {
  578.     ULONG           ulFlags;        /* MAPI_RECIPIENT, MAPI_MESSAGE */
  579.     LPGUID          lpRecipGUID;    /* Same as returned by AddressTypes() */
  580.     LPTSTR          lpszAdrType;    /* Same as returned by AddressTypes() */
  581.     LPTSTR          lpszDLLName;    /* Options DLL */
  582.     ULONG           ulOrdinal;      /* Ordinal in that DLL */
  583.     ULONG           cbOptionsData;  /* Count of bytes in lpbOptionsData */
  584.     LPBYTE          lpbOptionsData; /* Providers per [recip|message] option data */
  585.     ULONG           cOptionsProps;  /* Count of Options default prop values */
  586.     LPSPropValue    lpOptionsProps; /* Default Options property values */
  587. } OPTIONDATA, FAR *LPOPTIONDATA;
  588.  
  589. typedef SCODE (STDMAPIINITCALLTYPE OPTIONCALLBACK)(
  590.             HINSTANCE           hInst,
  591.             LPMALLOC            lpMalloc,
  592.             ULONG               ulFlags,
  593.             ULONG               cbOptionData,
  594.             LPBYTE              lpbOptionData,
  595.             LPMAPISUP           lpMAPISup,
  596.             LPMAPIPROP          lpDataSource,
  597.             LPMAPIPROP FAR *    lppWrappedSource,
  598.             LPMAPIERROR FAR *   lppMAPIError);
  599.  
  600. /* For XP_AddressTypes */
  601.  
  602. /*#define MAPI_UNICODE              ((ULONG) 0x80000000) in mapidefs.h */
  603.  
  604. /* For XP_RegisterRecipOptions */
  605.  
  606. /*#define MAPI_UNICODE              ((ULONG) 0x80000000) in mapidefs.h */
  607.  
  608. /* For XP_RegisterMessageOptions */
  609.  
  610. /*#define MAPI_UNICODE              ((ULONG) 0x80000000) in mapidefs.h */
  611.  
  612. /* For TransportNotify */
  613.  
  614. #define NOTIFY_ABORT_DEFERRED       ((ULONG) 0x40000000)
  615. #define NOTIFY_CANCEL_MESSAGE       ((ULONG) 0x80000000)
  616. #define NOTIFY_BEGIN_INBOUND        ((ULONG) 0x00000001)
  617. #define NOTIFY_END_INBOUND          ((ULONG) 0x00010000)
  618. #define NOTIFY_BEGIN_OUTBOUND       ((ULONG) 0x00000002)
  619. #define NOTIFY_END_OUTBOUND         ((ULONG) 0x00020000)
  620. #define NOTIFY_BEGIN_INBOUND_FLUSH  ((ULONG) 0x00000004)
  621. #define NOTIFY_END_INBOUND_FLUSH    ((ULONG) 0x00040000)
  622. #define NOTIFY_BEGIN_OUTBOUND_FLUSH ((ULONG) 0x00000008)
  623. #define NOTIFY_END_OUTBOUND_FLUSH   ((ULONG) 0x00080000)
  624.  
  625. /* For TransportLogoff */
  626.  
  627. #define LOGOFF_NORMAL               ((ULONG) 0x00000001)
  628. #define LOGOFF_HURRY                ((ULONG) 0x80000000)
  629.  
  630. /* For SubmitMessage */
  631.  
  632. #define BEGIN_DEFERRED              ((ULONG) 0x00000001)
  633.  
  634. /* For EndMessage */
  635.  
  636. /* Flags that the Spooler may pass to the Transport: */
  637.  
  638. /* Flags that the transport may pass to the Spooler: */
  639.  
  640. #define END_RESEND_NOW              ((ULONG) 0x00010000)
  641. #define END_RESEND_LATER            ((ULONG) 0x00020000)
  642. #define END_DONT_RESEND             ((ULONG) 0x00040000)
  643.  
  644. #define MAPI_IXPLOGON_METHODS(IPURE)                                    \
  645.     MAPIMETHOD(AddressTypes)                                            \
  646.         (THIS_  ULONG FAR *                 lpulFlags,                  \
  647.                 ULONG FAR *                 lpcAdrType,                 \
  648.                 LPTSTR FAR * FAR *          lpppAdrTypeArray,           \
  649.                 ULONG FAR *                 lpcMAPIUID,                 \
  650.                 LPMAPIUID FAR * FAR *       lpppUIDArray) IPURE;        \
  651.     MAPIMETHOD(RegisterOptions)                                         \
  652.         (THIS_  ULONG FAR *                 lpulFlags,                  \
  653.                 ULONG FAR *                 lpcOptions,                 \
  654.                 LPOPTIONDATA FAR *          lppOptions) IPURE;          \
  655.     MAPIMETHOD(TransportNotify)                                         \
  656.         (THIS_  ULONG FAR *                 lpulFlags,                  \
  657.                 LPVOID FAR *                lppvData) IPURE;            \
  658.     MAPIMETHOD(Idle)                                                    \
  659.         (THIS_  ULONG                       ulFlags) IPURE;             \
  660.     MAPIMETHOD(TransportLogoff)                                         \
  661.         (THIS_  ULONG                       ulFlags) IPURE;             \
  662.     MAPIMETHOD(SubmitMessage)                                           \
  663.         (THIS_  ULONG                       ulFlags,                    \
  664.                 LPMESSAGE                   lpMessage,                  \
  665.                 ULONG FAR *                 lpulMsgRef,                 \
  666.                 ULONG FAR *                 lpulReturnParm) IPURE;      \
  667.     MAPIMETHOD(EndMessage)                                              \
  668.         (THIS_  ULONG                       ulMsgRef,                   \
  669.                 ULONG FAR *                 lpulFlags) IPURE;           \
  670.     MAPIMETHOD(Poll)                                                    \
  671.         (THIS_  ULONG FAR *                 lpulIncoming) IPURE;        \
  672.     MAPIMETHOD(StartMessage)                                            \
  673.         (THIS_  ULONG                       ulFlags,                    \
  674.                 LPMESSAGE                   lpMessage,                  \
  675.                 ULONG FAR *                 lpulMsgRef) IPURE;          \
  676.     MAPIMETHOD(OpenStatusEntry)                                         \
  677.         (THIS_  LPCIID                      lpInterface,                \
  678.                 ULONG                       ulFlags,                    \
  679.                 ULONG FAR *                 lpulObjType,                \
  680.                 LPMAPISTATUS FAR *          lppEntry) IPURE;            \
  681.     MAPIMETHOD(ValidateState)                                           \
  682.         (THIS_  ULONG                       ulUIParam,                  \
  683.                 ULONG                       ulFlags) IPURE;             \
  684.     MAPIMETHOD(FlushQueues)                                             \
  685.         (THIS_  ULONG                       ulUIParam,                  \
  686.                 ULONG                       cbTargetTransport,          \
  687.                 LPENTRYID                   lpTargetTransport,          \
  688.                 ULONG                       ulFlags) IPURE;             \
  689.  
  690. #undef       INTERFACE
  691. #define      INTERFACE  IXPLogon
  692. DECLARE_MAPI_INTERFACE_(IXPLogon, IUnknown)
  693. {
  694.     BEGIN_INTERFACE 
  695.     MAPI_IUNKNOWN_METHODS(PURE)
  696.     MAPI_IXPLOGON_METHODS(PURE)
  697. };
  698.  
  699.  
  700. /* Transport Provider Entry Point */
  701.  
  702. typedef HRESULT (STDMAPIINITCALLTYPE XPPROVIDERINIT)(
  703.     HINSTANCE           hInstance,
  704.     LPMALLOC            lpMalloc,
  705.     LPALLOCATEBUFFER    lpAllocateBuffer,
  706.     LPALLOCATEMORE      lpAllocateMore,
  707.     LPFREEBUFFER        lpFreeBuffer,
  708.     ULONG               ulFlags,
  709.     ULONG               ulMAPIVer,
  710.     ULONG FAR *         lpulProviderVer,
  711.     LPXPPROVIDER FAR *  lppXPProvider);
  712.  
  713. XPPROVIDERINIT XPProviderInit;
  714.  
  715. /********************************************************************/
  716. /*                                                                  */
  717. /*                          MESSAGE STORE SPI                       */
  718. /*                                                                  */
  719. /********************************************************************/
  720.  
  721. /* Flags and enums */
  722.  
  723. /* For Logon() */
  724.  
  725. /*#define MAPI_UNICODE          ((ULONG) 0x80000000) in mapidefs.h */
  726. /*#define MDB_NO_DIALOG         ((ULONG) 0x00000001) in mapidefs.h */
  727. /*#define MDB_WRITE             ((ULONG) 0x00000004) in mapidefs.h */
  728. /*#define MAPI_DEFERRED_ERRORS  ((ULONG) 0x00000008) in mapidefs.h */
  729. /*#define MDB_TEMPORARY         ((ULONG) 0x00000020) in mapidefs.h */
  730. /*#define MDB_NO_MAIL           ((ULONG) 0x00000080) in mapidefs.h */
  731.  
  732. /* For SpoolerLogon() */
  733.  
  734. /*#define MAPI_UNICODE          ((ULONG) 0x80000000) in mapidefs.h */
  735. /*#define MDB_NO_DIALOG         ((ULONG) 0x00000001) in mapidefs.h */
  736. /*#define MDB_WRITE             ((ULONG) 0x00000004) in mapidefs.h */
  737. /*#define MAPI_DEFERRED_ERRORS  ((ULONG) 0x00000008) in mapidefs.h */
  738.  
  739. /* GetCredentials, SetCredentials */
  740.  
  741. #define LOGON_SP_TRANSPORT      ((ULONG) 0x00000001)
  742. #define LOGON_SP_PROMPT         ((ULONG) 0x00000002)
  743. #define LOGON_SP_NEWPW          ((ULONG) 0x00000004)
  744. #define LOGON_CHANGED           ((ULONG) 0x00000008)
  745.  
  746. /* DoMCDialog */
  747.  
  748. #define DIALOG_FOLDER           ((ULONG) 0x00000001)
  749. #define DIALOG_MESSAGE          ((ULONG) 0x00000002)
  750. #define DIALOG_PROP             ((ULONG) 0x00000004)
  751. #define DIALOG_ATTACH           ((ULONG) 0x00000008)
  752.  
  753. #define DIALOG_MOVE             ((ULONG) 0x00000010)
  754. #define DIALOG_COPY             ((ULONG) 0x00000020)
  755. #define DIALOG_DELETE           ((ULONG) 0x00000040)
  756.  
  757. #define DIALOG_ALLOW_CANCEL     ((ULONG) 0x00000080)
  758. #define DIALOG_CONFIRM_CANCEL   ((ULONG) 0x00000100)
  759.  
  760. /* ExpandRecips */
  761.  
  762. #define NEEDS_PREPROCESSING     ((ULONG) 0x00000001)
  763. #define NEEDS_SPOOLER           ((ULONG) 0x00000002)
  764.  
  765. /* PrepareSubmit */
  766.  
  767. #define CHECK_SENDER            ((ULONG) 0x00000001)
  768. #define NON_STANDARD            ((ULONG) 0x00010000)
  769.  
  770.  
  771. DECLARE_MAPI_INTERFACE_PTR(IMSLogon, LPMSLOGON);
  772. DECLARE_MAPI_INTERFACE_PTR(IMSProvider, LPMSPROVIDER);
  773.  
  774. /* Message Store Provider Interface (IMSPROVIDER) */
  775.  
  776. #define MAPI_IMSPROVIDER_METHODS(IPURE)                                 \
  777.     MAPIMETHOD(Shutdown)                                                \
  778.         (THIS_  ULONG FAR *                 lpulFlags) IPURE;           \
  779.     MAPIMETHOD(Logon)                                                   \
  780.         (THIS_  LPMAPISUP                   lpMAPISup,                  \
  781.                 ULONG                       ulUIParam,                  \
  782.                 LPTSTR                      lpszProfileName,            \
  783.                 ULONG                       cbEntryID,                  \
  784.                 LPENTRYID                   lpEntryID,                  \
  785.                 ULONG                       ulFlags,                    \
  786.                 LPCIID                      lpInterface,                \
  787.                 ULONG FAR *                 lpcbSpoolSecurity,          \
  788.                 LPBYTE FAR *                lppbSpoolSecurity,          \
  789.                 LPMAPIERROR FAR *           lppMAPIError,               \
  790.                 LPMSLOGON FAR *             lppMSLogon,                 \
  791.                 LPMDB FAR *                 lppMDB) IPURE;              \
  792.     MAPIMETHOD(SpoolerLogon)                                            \
  793.         (THIS_  LPMAPISUP                   lpMAPISup,                  \
  794.                 ULONG                       ulUIParam,                  \
  795.                 LPTSTR                      lpszProfileName,            \
  796.                 ULONG                       cbEntryID,                  \
  797.                 LPENTRYID                   lpEntryID,                  \
  798.                 ULONG                       ulFlags,                    \
  799.                 LPCIID                      lpInterface,                \
  800.                 ULONG                       cbSpoolSecurity,            \
  801.                 LPBYTE                      lpbSpoolSecurity,           \
  802.                 LPMAPIERROR FAR *           lppMAPIError,               \
  803.                 LPMSLOGON FAR *             lppMSLogon,                 \
  804.                 LPMDB FAR *                 lppMDB) IPURE;              \
  805.     MAPIMETHOD(CompareStoreIDs)                                         \
  806.         (THIS_  ULONG                       cbEntryID1,                 \
  807.                 LPENTRYID                   lpEntryID1,                 \
  808.                 ULONG                       cbEntryID2,                 \
  809.                 LPENTRYID                   lpEntryID2,                 \
  810.                 ULONG                       ulFlags,                    \
  811.                 ULONG FAR *                 lpulResult) IPURE;          \
  812.  
  813. #undef       INTERFACE
  814. #define      INTERFACE  IMSProvider
  815. DECLARE_MAPI_INTERFACE_(IMSProvider, IUnknown)
  816. {
  817.     BEGIN_INTERFACE 
  818.     MAPI_IUNKNOWN_METHODS(PURE)
  819.     MAPI_IMSPROVIDER_METHODS(PURE)
  820. };
  821.  
  822. /* The MSLOGON object is returned by the Logon() method of the
  823.  * MSPROVIDER interface.  This object is for use by MAPIX.DLL.
  824.  */
  825. #define MAPI_IMSLOGON_METHODS(IPURE)                                    \
  826.     MAPIMETHOD(GetLastError)                                            \
  827.         (THIS_  HRESULT                     hResult,                    \
  828.                 ULONG                       ulFlags,                    \
  829.                 LPMAPIERROR FAR *           lppMAPIError) IPURE;        \
  830.     MAPIMETHOD(Logoff)                                                  \
  831.         (THIS_  ULONG FAR *                 lpulFlags) IPURE;           \
  832.     MAPIMETHOD(OpenEntry)                                               \
  833.         (THIS_  ULONG                       cbEntryID,                  \
  834.                 LPENTRYID                   lpEntryID,                  \
  835.                 LPCIID                      lpInterface,                \
  836.                 ULONG                       ulFlags,                    \
  837.                 ULONG FAR *                 lpulObjType,                \
  838.                 LPUNKNOWN FAR *             lppUnk) IPURE;              \
  839.     MAPIMETHOD(CompareEntryIDs)                                         \
  840.         (THIS_  ULONG                       cbEntryID1,                 \
  841.                 LPENTRYID                   lpEntryID1,                 \
  842.                 ULONG                       cbEntryID2,                 \
  843.                 LPENTRYID                   lpEntryID2,                 \
  844.                 ULONG                       ulFlags,                    \
  845.                 ULONG FAR *                 lpulResult) IPURE;          \
  846.     MAPIMETHOD(Advise)                                                  \
  847.         (THIS_  ULONG                       cbEntryID,                  \
  848.                 LPENTRYID                   lpEntryID,                  \
  849.                 ULONG                       ulEventMask,                \
  850.                 LPMAPIADVISESINK            lpAdviseSink,               \
  851.                 ULONG FAR *                 lpulConnection) IPURE;      \
  852.     MAPIMETHOD(Unadvise)                                                \
  853.         (THIS_  ULONG                       ulConnection) IPURE;        \
  854.     MAPIMETHOD(OpenStatusEntry)                                         \
  855.         (THIS_  LPCIID                      lpInterface,                \
  856.                 ULONG                       ulFlags,                    \
  857.                 ULONG FAR *                 lpulObjType,                \
  858.                 LPVOID FAR *                lppEntry) IPURE;            \
  859.  
  860. #undef       INTERFACE
  861. #define      INTERFACE  IMSLogon
  862. DECLARE_MAPI_INTERFACE_(IMSLogon, IUnknown)
  863. {
  864.     BEGIN_INTERFACE 
  865.     MAPI_IUNKNOWN_METHODS(PURE)
  866.     MAPI_IMSLOGON_METHODS(PURE)
  867. };
  868.  
  869. /* Message Store Provider Entry Point */
  870.  
  871. typedef HRESULT (STDMAPIINITCALLTYPE MSPROVIDERINIT)(
  872.     HINSTANCE               hInstance,
  873.     LPMALLOC                lpMalloc,           /* AddRef() if you keep it */
  874.     LPALLOCATEBUFFER        lpAllocateBuffer,   /* -> AllocateBuffer */
  875.     LPALLOCATEMORE          lpAllocateMore,     /* -> AllocateMore   */
  876.     LPFREEBUFFER            lpFreeBuffer,       /* -> FreeBuffer     */
  877.     ULONG                   ulFlags,
  878.     ULONG                   ulMAPIVer,
  879.     ULONG FAR *             lpulProviderVer,
  880.     LPMSPROVIDER FAR *      lppMSProvider
  881. );
  882.  
  883. MSPROVIDERINIT MSProviderInit;
  884.  
  885.  
  886. /********************************************************************/
  887. /*                                                                  */
  888. /*                    MESSAGE SERVICE CONFIGURATION                 */
  889. /*                                                                  */
  890. /********************************************************************/
  891.  
  892. /* Flags for service configuration entry point */
  893.  
  894. /* #define MAPI_UNICODE              0x80000000 */
  895. /* #define SERVICE_UI_ALWAYS         0x00000002 */
  896. /* #define SERVICE_UI_ALLOWED        0x00000010 */
  897. #define MSG_SERVICE_UI_READ_ONLY     0x00000008 /* display parameters only */
  898. #define SERVICE_LOGON_FAILED         0x00000020 /* reconfigure provider */
  899.  
  900. /* Contexts for service configuration entry point */
  901.  
  902. #define MSG_SERVICE_INSTALL         0x00000001
  903. #define MSG_SERVICE_CREATE          0x00000002
  904. #define MSG_SERVICE_CONFIGURE       0x00000003
  905. #define MSG_SERVICE_DELETE          0x00000004
  906. #define MSG_SERVICE_UNINSTALL       0x00000005
  907. #define MSG_SERVICE_PROVIDER_CREATE 0x00000006
  908. #define MSG_SERVICE_PROVIDER_DELETE 0x00000007
  909.  
  910. /* Prototype for service configuration entry point */
  911.  
  912. typedef HRESULT (STDAPICALLTYPE MSGSERVICEENTRY)(
  913.     HINSTANCE       hInstance,
  914.     LPMALLOC        lpMalloc,
  915.     LPMAPISUP       lpMAPISup,
  916.     ULONG           ulUIParam,
  917.     ULONG           ulFlags,
  918.     ULONG           ulContext,
  919.     ULONG           cValues,
  920.     LPSPropValue    lpProps,
  921.     LPPROVIDERADMIN lpProviderAdmin,
  922.     LPMAPIERROR FAR *lppMapiError
  923. );
  924. typedef MSGSERVICEENTRY FAR *LPMSGSERVICEENTRY;
  925.  
  926.  
  927. #ifdef __cplusplus
  928. }
  929. #endif
  930.  
  931. #ifdef __BORLANDC__
  932.   #include <poppack.h>
  933. #endif
  934.  
  935. #endif /* MAPISPI_H */
  936.