home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / dbmsg / mapi / remote.srv / windsgbl.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-11  |  11.4 KB  |  358 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  File Name 
  4. //      WINDSGBL.H
  5. //
  6. //  Description
  7. //      Global declarations for providers communicating with the WINDS Sample
  8. //      Server Messaging Host.
  9. //
  10. //  Author
  11. //      Irving De la Cruz
  12. //
  13. //  Revision: 1.7
  14. //
  15. // Written for Microsoft Windows Developer Support
  16. // Copyright (c) 1995-1996 Microsoft Corporation. All rights reserved.
  17. //
  18. #ifndef _WINDSGBL_H
  19. #define _WINDSGBL_H
  20.  
  21. ///////////////////////////////////////////////////////////////////////////////
  22. // General constants
  23. #ifdef UNICODE
  24. #define WINDS_RPC_STRING        unsigned short *
  25. #else
  26. #define WINDS_RPC_STRING        unsigned char *
  27. #endif
  28.  
  29. // WinDS string for the RPC manual binding functions
  30. // The WinDS service uses RPC over the NAMED PIPES protocols and the
  31. // especific end-points for the protocol are listed below: One for the remote
  32. // administrator and one for the MAPI providers
  33. #define WINDS_RPC_PROTOCOL              TEXT("ncacn_np")
  34. #define WINDS_ADMIN_RPC_ENDPOINT        TEXT("\\pipe\\WINDS-ADMIN")
  35. #define WINDS_PROVIDERS_RPC_ENDPOINT    TEXT("\\pipe\\WINDS")
  36.  
  37. // WinDS registry key for store permanent information
  38. #define WINDS_ADMIN_REGISTRY_KEY        TEXT("Software\\Microsoft\\PSS MAPI Samples\\WinDS Remote Administrator")
  39. #define WINDS_SERVICE_REGISTRY_KEY      TEXT("System\\CurrentControlSet\\Services\\WindsMessagingHost")
  40.  
  41. // WinDS administrator subkeys
  42. #define SERVER_SUB_KEY                  TEXT("Default Server")
  43.  
  44. // WinDS service subkeys
  45. #define DATA_FILE_SUB_KEY               TEXT("Data File")
  46.  
  47.  
  48. // Name of the address type of the user in the system and for the transports to register for.
  49. #define WINDS_ADDRESS_TYPE                      TEXT("WINDS")
  50.  
  51. // Name of the Mailslot we use to send notifications to in the client machine
  52. #define AB_WINDS_NOTIFICATION_MAILSLOT          TEXT("WINDS_AB_NOTIFICATIONS")
  53. #define XP_WINDS_NOTIFICATION_MAILSLOT          TEXT("WINDS_XP_NOTIFICATIONS")
  54. #define MS_WINDS_NOTIFICATION_MAILSLOT          TEXT("WINDS_MS_NOTIFICATIONS")
  55. #define ADMIN_WINDS_NOTIFICATION_MAILSLOT       TEXT("WINDS_ADMIN_NOTIFICATIONS")
  56. #define CLIENT_MAILSLOT_SINK_NAME_FORMAT        TEXT("\\\\.\\mailslot\\%s\\%x")
  57. #define SERVER_MAILSLOT_SINK_NAME_FORMAT        TEXT("\\\\%s\\mailslot\\%s\\%x")
  58.  
  59. // Bulk download/upload pipe name
  60. #define PIPE_NAME_FORMAT                        TEXT("%s\\pipe\\%d")
  61.  
  62. // Handy buffer size
  63. #define IO_BUFFERSIZE                   1024
  64.  
  65. #define WINDS_UNICODE                   0x80000000
  66. #define WINDS_ADMINISTRATOR             0x40000000
  67.  
  68. #define HIDE_IN_DIR                     0x0001
  69. #define OBJECT_DISABLED                 0x0002
  70.  
  71. #define ADMIN_RIGHTS                    0x0010
  72. #define DL_OWNED                        0x0010
  73.  
  74.  
  75. // Field sizes in the object properties structures
  76. #define MAX_ALIAS_SIZE      16
  77. #define MAX_STRING_SIZE     32
  78. #define MAX_PHONE_SIZE      12
  79. #define MAX_COMMENT_SIZE    79
  80. #define MAX_PASSWORD_SIZE   MAX_ALIAS_SIZE
  81.  
  82. // Constants for the transports
  83. #define TRANSPORT_MESSAGE_EID_SIZE              MAX_ALIAS_SIZE
  84. #define ENTRYID_DATA_FIELD_SIZE                 MAX_ALIAS_SIZE
  85.  
  86. enum
  87. {
  88.     ROOT_CONTAINER_ID       = 0xFFFFFFFF,
  89.     GATEWAY_CONTAINERS_ID   = 0xFFFFFFFE,
  90.     FAX_CONTAINER_ID        = 0xFFFFFFFD,   // Don't change the order of this (see STORAGE.CPP (ReadABContainerInfo) in the WINDS project)
  91.     SMTP_CONTAINER_ID       = 0xFFFFFFFC,
  92.     EXCHANGE_CONTAINER_ID   = 0xFFFFFFFB,
  93.     GAL_CONTAINER_ID        = 0xFFFFFFFA
  94. };
  95.  
  96. typedef enum _WINDS_AB_OBJTYPE
  97. {
  98.     UNDEFINED_OBJECT_TYPE       = 0,
  99.     SERVER_USER_MAILBOX         = 1,    // Don't change the order or the values
  100.     SERVER_DISTRIBUTION_LIST    = 2,
  101.     GATEWAY_RECIPIENT           = 3,
  102.     PUBLIC_FOLDER               = 4
  103. } WINDS_AB_OBJTYPE;
  104.  
  105. typedef struct _PUBLIC_FOLDER_INFO_A
  106. {
  107.     char        szFolderName[MAX_STRING_SIZE+4];
  108.     char        szComments[MAX_COMMENT_SIZE+4];
  109.     DWORD       dwObjID;
  110.     FILETIME    ftCreationTime;
  111.     FILETIME    ftLastModTime;
  112.     DWORD       dwMessageStorageSize;
  113.     DWORD       dwMessageCount;
  114.     DWORD       pdwMessagesIDs;
  115. } PUBLIC_FOLDER_INFO_A, *PPUBLIC_FOLDER_INFO_A;
  116.  
  117. typedef struct _PUBLIC_FOLDER_INFO_W
  118. {
  119.     WCHAR       szFolderName[MAX_STRING_SIZE+4];
  120.     WCHAR       szComments[MAX_COMMENT_SIZE+4];
  121.     DWORD       dwObjID;
  122.     FILETIME    ftCreationTime;
  123.     FILETIME    ftLastModTime;
  124.     DWORD       dwMessageStorageSize;
  125.     DWORD       dwMessageCount;
  126.     DWORD       pdwMessagesIDs;
  127. } PUBLIC_FOLDER_INFO_W, *PPUBLIC_FOLDER_INFO_W;
  128.  
  129. typedef struct _PF_MESSAGE_PROPERTIES_A
  130. {
  131.     char    szAuthor[MAX_ALIAS_SIZE+4];
  132.     DWORD   dwObjID;
  133. } PF_MESSAGE_PROPERTIES_A, *PPF_MESSAGE_PROPERTIES_A;
  134.  
  135. typedef struct _PF_MESSAGE_PROPERTIES_W
  136. {
  137.     WCHAR   szAuthor[MAX_ALIAS_SIZE+4];
  138.     DWORD   dwObjID;
  139. } PF_MESSAGE_PROPERTIES_W, *PPF_MESSAGE_PROPERTIES_W;
  140.  
  141.  
  142. typedef struct _MAILBOX_INFO_A
  143. {
  144.     char    szMailboxName[MAX_ALIAS_SIZE+1];
  145.     char    szFullName[MAX_STRING_SIZE+1];
  146.     char    szJobTitle[MAX_STRING_SIZE+1];
  147.     char    szOffice[MAX_STRING_SIZE+1];
  148.     char    szPhone[MAX_PHONE_SIZE+1];
  149.     char    szAltPhone[MAX_PHONE_SIZE+1];
  150.     char    szFax[MAX_PHONE_SIZE+1];
  151.     char    szPassword[MAX_ALIAS_SIZE+1];
  152.     char    szCompany[MAX_STRING_SIZE+1];
  153.     char    szDepartment[MAX_STRING_SIZE+1];
  154.     char    szComments[MAX_COMMENT_SIZE+1];
  155.     char    szManagerName[MAX_STRING_SIZE+1];
  156.     char    szManagerAlias[MAX_STRING_SIZE+1];
  157.     DWORD   dwManagerID;
  158.     DWORD   dwObjID;
  159.     DWORD   dwFlags;
  160. } MAILBOX_INFO_A, *PMAILBOX_INFO_A;
  161.  
  162. typedef struct _MAILBOX_INFO_W
  163. {
  164.     WCHAR   szMailboxName[MAX_ALIAS_SIZE+1];
  165.     WCHAR   szFullName[MAX_STRING_SIZE+1];
  166.     WCHAR   szJobTitle[MAX_STRING_SIZE+1];
  167.     WCHAR   szOffice[MAX_STRING_SIZE+1];
  168.     WCHAR   szPhone[MAX_PHONE_SIZE+1];
  169.     WCHAR   szAltPhone[MAX_PHONE_SIZE+1];
  170.     WCHAR   szFax[MAX_PHONE_SIZE+1];
  171.     WCHAR   szPassword[MAX_ALIAS_SIZE+1];
  172.     WCHAR   szCompany[MAX_STRING_SIZE+1];
  173.     WCHAR   szDepartment[MAX_STRING_SIZE+1];
  174.     WCHAR   szComments[MAX_COMMENT_SIZE+1];
  175.     WCHAR   szManagerName[MAX_STRING_SIZE+1];
  176.     WCHAR   szManagerAlias[MAX_STRING_SIZE+1];
  177.     DWORD   dwManagerID;
  178.     DWORD   dwObjID;
  179.     DWORD   dwFlags;
  180. } MAILBOX_INFO_W, *PMAILBOX_INFO_W;
  181.  
  182. typedef struct _DIST_LIST_INFO_A
  183. {
  184.     char                szDLAlias[MAX_ALIAS_SIZE+1];
  185.     char                szDLFullName[MAX_STRING_SIZE+1];
  186.     DWORD               dwObjID;
  187.     DWORD               dwFlags;
  188.     char                szOwnerAlias[MAX_ALIAS_SIZE+1];
  189.     char                szOwnerName[MAX_STRING_SIZE+1];
  190.     DWORD               dwOwnerID;
  191.     char                szComments[MAX_COMMENT_SIZE+1];
  192.     DWORD               dwMemberCount;
  193.     LPVOID              pMembers;
  194. } DIST_LIST_INFO_A, *PDIST_LIST_INFO_A;
  195.  
  196. typedef struct _DIST_LIST_INFO_W
  197. {
  198.     WCHAR               szDLAlias[MAX_ALIAS_SIZE+1];
  199.     WCHAR               szDLFullName[MAX_STRING_SIZE+1];
  200.     DWORD               dwObjID;
  201.     DWORD               dwFlags;
  202.     WCHAR               szOwnerAlias[MAX_ALIAS_SIZE+1];
  203.     WCHAR               szOwnerName[MAX_STRING_SIZE+1];
  204.     DWORD               dwOwnerID;
  205.     WCHAR               szComments[MAX_COMMENT_SIZE+1];
  206.     DWORD               dwMemberCount;
  207.     LPVOID              pMembers;
  208. } DIST_LIST_INFO_W, *PDIST_LIST_INFO_W;
  209.  
  210. // UNICODE/ANSI macro for the structures
  211. #ifdef UNICODE
  212. #error WINDS: UNICODE has not been implemented yet. IrvingD 9/11/95
  213. #define MAILBOX_INFO                MAILBOX_INFO_W
  214. #define PMAILBOX_INFO               PMAILBOX_INFO_W
  215. #define DIST_LIST_INFO              DIST_LIST_INFO_W
  216. #define PDIST_LIST_INFO             PDIST_LIST_INFO_W
  217. #define PUBLIC_FOLDER_INFO          PUBLIC_FOLDER_INFO_W
  218. #define PPUBLIC_FOLDER_INFO         PPUBLIC_FOLDER_INFO_W
  219. #define PF_MESSAGE_PROPERTIES       PF_MESSAGE_PROPERTIES_W
  220. #define PPF_MESSAGE_PROPERTIES      PPF_MESSAGE_PROPERTIES_W
  221. #else
  222. #define MAILBOX_INFO                MAILBOX_INFO_A
  223. #define PMAILBOX_INFO               PMAILBOX_INFO_A
  224. #define DIST_LIST_INFO              DIST_LIST_INFO_A
  225. #define PDIST_LIST_INFO             PDIST_LIST_INFO_A
  226. #define PUBLIC_FOLDER_INFO          PUBLIC_FOLDER_INFO_A
  227. #define PPUBLIC_FOLDER_INFO         PPUBLIC_FOLDER_INFO_A
  228. #define PF_MESSAGE_PROPERTIES       PF_MESSAGE_PROPERTIES_A
  229. #define PPF_MESSAGE_PROPERTIES      PPF_MESSAGE_PROPERTIES_A
  230. #endif
  231.  
  232. typedef union _WINDS_OBJS_INFO
  233. {
  234.     DWORD               dwFlags;
  235.     MAILBOX_INFO        MB;
  236.     DIST_LIST_INFO      DL;
  237.     PUBLIC_FOLDER_INFO  PF;
  238. } WINDS_OBJS_INFO;
  239.  
  240. typedef struct _AB_ENTRY_INFO
  241. {
  242.     WINDS_OBJS_INFO     Info;
  243.     WINDS_AB_OBJTYPE    Type;
  244. } AB_ENTRY_INFO, *PAB_ENTRY_INFO;
  245.  
  246.  
  247. ///////////////////////////////////////////////////////////////////////////////
  248. // Message Transport Support
  249.  
  250. // Command numbers for telling the remote server what to do (from a transport)
  251. typedef enum tagMID
  252. {
  253.     MSG_DOWNLOAD, 
  254.     MSG_DELETE,
  255.     MSG_MOVE,
  256.     OP_STARTED,
  257.     OP_COMPLETE,
  258.     OP_FAILED,
  259.     GOODBYE,
  260.     UNMARKED
  261. } MID;
  262.  
  263. // Command message header
  264.  
  265. typedef union _MSG_HDR_INFO
  266. {
  267.     BYTE    EID[TRANSPORT_MESSAGE_EID_SIZE];
  268.     ULONG   ulMsgLen;
  269. } MSG_HDR_INFO;
  270.  
  271. typedef struct _MSG_HDR
  272. {
  273.     MID             ulMID;
  274.     MSG_HDR_INFO    Info;
  275. } MSG_HDR;
  276.  
  277. ///////////////////////////////////////////////////////////////////////////////
  278. // Client/Server notification support 
  279.  
  280. enum
  281. {
  282.     WINDS_NOTIF_ON_USER         = 0x0001,
  283.     WINDS_NOTIF_ON_XP           = 0x0002,
  284.     WINDS_NOTIF_ON_AB           = 0x0004,
  285.     WINDS_NOTIF_ON_MS           = 0x0008
  286. };
  287.  
  288. typedef enum _WINDS_NOTIF_EVENT
  289. {
  290.     GENERAL_NOTIF_MIN           = 0x0000,
  291.     LOGGED_USER_PROPS_CHANGED   = 0x0000,
  292.     SERVER_IS_SHUTTING_DOWN     = 0x0001,
  293.     SERVER_HAS_RESTARTED        = 0x0002,
  294.     RESET_LINKS_WITH_SERVER     = 0x0003,
  295.     GENERAL_NOTIF_MAX           = 0x000F,
  296.  
  297.     XP_NOTIF_MIN                = 0x0010,
  298.     XP_NEW_MAIL_ARRIVED         = 0x0010,
  299.     XP_NOTIF_MAX                = 0x00F0,
  300.  
  301.     AB_NOTIF_MIN                = 0x0100,
  302.     AB_USER_ADDED               = 0x0100,
  303.     AB_USER_MODIFIED            = 0x0200,
  304.     AB_USER_DELETED             = 0x0300,
  305.     AB_DL_ADDED                 = 0x0400,
  306.     AB_DL_MODIFIED              = 0x0500,
  307.     AB_DL_DELETED               = 0x0600,
  308.     AB_GET_LOCAL_ABDATA_NOW     = 0x0700,
  309.     AB_NOTIF_MAX                = 0x0F00,
  310.  
  311.     MS_NOTIF_MIN                = 0x1000,
  312.     MS_MESSAGE_ADDED            = 0x1000,
  313.     MS_MESSAGE_MODIFIED         = 0x2000,
  314.     MS_MESSAGE_DELETED          = 0x3000,
  315.     MS_FOLDER_ADDED             = 0x4000,
  316.     MS_FOLDER_MODIFIED          = 0x5000,
  317.     MS_FOLDER_DELETED           = 0x6000,
  318.     MS_NOTIF_MAX                = 0xF000
  319.  
  320. } WINDS_NOTIF_EVENT;
  321.  
  322. typedef struct _WINDS_NOTIFICATION
  323. {
  324.     WINDS_NOTIF_EVENT   Event;
  325.     FILETIME            ftEventTime;
  326.     WINDS_OBJS_INFO     Info;
  327. } WINDS_NOTIFICATION, *PWINDS_NOTIFICATION;
  328.  
  329. ///////////////////////////////////////////////////////////////////////////////
  330. // Generic exception class for C++'s throw and catch
  331.  
  332. class CException
  333. {
  334. public:
  335.     CException()
  336.     {
  337.         m_hResult = E_FAIL;
  338.     }
  339.     CException (HRESULT hResult)
  340.     {
  341.         if (0 == hResult)
  342.         {
  343.             hResult = E_FAIL;
  344.         }
  345.         m_hResult = hResult;
  346.     }
  347.     inline HRESULT WINAPI GetError()
  348.     {
  349.         return m_hResult;
  350.     }
  351. private:
  352.     HRESULT m_hResult;
  353. };
  354.  
  355. #endif // _WINDSGBL_H
  356.  
  357. // End of file for WINDSGBL.H
  358.