// --edkcfg.h------------------------------------------------------------------- // // EDK Gateway Configuration Routines // // Copyright 1986 - 1998 Microsoft Corporation. All Rights Reserved. // // ----------------------------------------------------------------------------- #ifndef _EDKCFG_H_ #define _EDKCFG_H_ #ifdef __cplusplus extern "C" { #endif // __cplusplus // // Type Definitions // //$--ADVISECALLBACK------------------------------------------------------------- // Function type for routine to be called when a binary blob changes. // ----------------------------------------------------------------------------- typedef HRESULT (ADVISECALLBACK) ( LPVOID lpvUserContext, LPWSTR lpwszOwnerTag, ULONG cProps, LPSPropValue lpProps); typedef ADVISECALLBACK *LPADVISECALLBACK; //$--ADVISENOTIFY--------------------------------------------------------------- // Object attached to an ADVISEOBJ, which represents a single blob and the // callback routine to call when it is modified. // ----------------------------------------------------------------------------- typedef struct _AdviseNotify { struct _AdviseNotify * lpNext; LPSTR lpszOwnerTag; LPWSTR lpwszOwnerTag; LPBYTE lpbBlob; ULONG cbBlob; LPADVISECALLBACK lpfnCallback; LPVOID lpvUserContext; BOOL fFirstTime; } ADVISENOTIFY, *LPADVISENOTIFY; //$--ADVISEOBJ------------------------------------------------------------------ // Object representing a MAPI session whose extension data is being monitored. // ----------------------------------------------------------------------------- typedef struct { LPMAPISESSION lpSession; LPMAPIPROP lpCurrentObject; ULONG nPollInterval; ULONG ulUSNChangedPropTag; ULONG ulExtensionDataPropTag; CRITICAL_SECTION csCriticalSection; HANDLE hPollThreadStop; HANDLE hPollThread; ULONG ulPollThreadID; ULONG ulUSNChanged; LPSPropValue lpExtensionData; LPADVISENOTIFY lpNotifyList; } ADVISEOBJ, *LPADVISEOBJ; // // Function Prototypes // //$--HrCfgCreateAdviseObj------------------------------------------------------- // Begin monitoring of a MAPI session for changes to extension data. // This routine should be called once to create an advise object for a MAPI // session that is being monitored. Then, HrCfgAdvise() should be called // once for each extension data section that is being monitored. // If nPollInterval == 0 then no monitoring thread is created, and the user // must do polling manually by calling HrCfgPollAdviseObj(). // ----------------------------------------------------------------------------- HRESULT HrCfgCreateAdviseObj( // RETURNS: HRESULT IN LPMAPISESSION lpSession, // MAPI session to monitor IN ULONG nPollInterval, // milliseconds between polling OUT LPADVISEOBJ * lppAdviseObj); // created advise object //$--HrCfgPollAdviseObj--------------------------------------------------------- // Checks an advise object against what is stored in the DSA. Calls the // notification routines if there are any changes. // ----------------------------------------------------------------------------- HRESULT HrCfgPollAdviseObj( // RETURNS: HRESULT IN LPADVISEOBJ lpAdviseObj); // advise object to poll //$--HrCfgDestroyAdviseObj------------------------------------------------------ // End monitoring of a MAPI session. This routine calls HrCfgUnadvise() for // any extension data sections that are actively being monitored. // ----------------------------------------------------------------------------- HRESULT HrCfgDestroyAdviseObj( // RETURNS: HRESULT IN LPADVISEOBJ lpAdviseObj); // advise object to destroy //$--HrCfgAdvise---------------------------------------------------------------- // Begin monitoring of an extension data section. When the extension data // changes, the specified callback routine is called. Note: The callback // routine will be called once from hrCfgAdvise() to set the initial extension // data values. // ----------------------------------------------------------------------------- HRESULT HrCfgAdvise( // RETURNS: HRESULT IN LPADVISEOBJ lpAdviseObj, // advise object IN LPSTR lpszSection, // name of extension data section IN LPADVISECALLBACK lpfnCallback, // function to call on changes IN LPVOID lpvUserContext); // user-defined context //$--HrCfgUnadvise-------------------------------------------------------------- // End monitoring of an extension data section. // ----------------------------------------------------------------------------- HRESULT HrCfgUnadvise( // RETURNS: HRESULT IN LPADVISEOBJ lpAdviseObj, // advise object IN LPSTR lpszSection); // name of extension data section //$--HrCfgPackData-------------------------------------------------------------- // Take a configuration name and a set of MAPI properties and pack them into // a binary buffer suitable to be saved in the directory information tree for // the gateway or other object. // ----------------------------------------------------------------------------- HRESULT HrCfgPackDataA( // RETURN: HRESULT IN LPSTR lpszOwnerTag, // name of configuration (or NULL) IN ULONG cProps, // number of MAPI properties IN LPSPropValue lpProps, // MAPI properties for this config. OUT ULONG * lpcbConfigData, // size of resulting binary struct. OUT LPBYTE * lppbConfigData); // resulting binary structure HRESULT HrCfgPackDataW( // RETURN: HRESULT IN LPWSTR lpwszOwnerTag, // name of configuration (or NULL) IN ULONG cProps, // number of MAPI properties IN LPSPropValue lpProps, // MAPI properties for this config. OUT ULONG * lpcbConfigData, // size of resulting binary struct. OUT LPBYTE * lppbConfigData); // resulting binary structure #ifdef UNICODE #define HrCfgPackData HrCfgPackDataW #else #define HrCfgPackData HrCfgPackDataA #endif //$--HrCfgUnpackData------------------------------------------------------------ // Take a packed binary buffer and unpack it to yield a configuration name, // number of properties, and an array of MAPI properties. If the number of // properties is zero then NULL is returned for the array of properties. // ----------------------------------------------------------------------------- HRESULT HrCfgUnpackDataA( // RETURNS: HRESULT IN ULONG cbConfigData, // size of of binary structure IN LPBYTE lpbConfigData, // pointer to binary structure OUT LPSTR * lppszOwnerTag, // name of configuration (or NULL) OUT ULONG * lpcProps, // number of MAPI properties OUT LPSPropValue * lppProps); // MAPI properties for this config. HRESULT HrCfgUnpackDataW( // RETURNS: HRESULT IN ULONG cbConfigData, // size of of binary structure IN LPBYTE lpbConfigData, // pointer to binary structure OUT LPWSTR * lppwszOwnerTag, // name of configuration (or NULL) OUT ULONG * lpcProps, // number of MAPI properties OUT LPSPropValue * lppProps); // MAPI properties for this config. #ifdef UNICODE #define HrCfgUnpackData HrCfgUnpackDataW #else #define HrCfgUnpackData HrCfgUnpackDataA #endif //$--HrOpenSiteContainer----------------------------------------------------------------- // Takes a pointer to a MAPI session and returns an IMAPIProp interface for // the current site object. // ----------------------------------------------------------------------------- HRESULT HrOpenSiteContainer( // RETURNS: HRESULT IN LPMAPISESSION lpSession, // MAPI session OUT LPMAPIPROP * lppSite); // current site //$--HrOpenSiteContainerAddressing------------------------------------------------------- // Takes a pointer to a MAPI session and returns an IMAPIProp interface for // the current site addressing object. // ----------------------------------------------------------------------------- HRESULT HrOpenSiteContainerAddressing( // RETURNS: HRESULT IN LPMAPISESSION lpSession, // MAPI session OUT LPMAPIPROP * lppSiteAddressing); // current site addressing //$--HrOpenSessionObject-------------------------------------------------------- // Takes a pointer to a MAPI session and returns an IMAPIProp interface for // the current object that the session is logged in as. // ----------------------------------------------------------------------------- HRESULT HrOpenSessionObject( // RETURNS: HRESULT IN LPMAPISESSION lpSession, // MAPI session OUT LPMAPIPROP * lppCurrentObject); // current object //$--HrCfgPropertyTagFromNameId---------------------------------------------------- // Takes a pointer to an IMAPIProp interface and a name ID, and returns the // MAPI property tag that represents the given name ID for that interface. // ----------------------------------------------------------------------------- HRESULT HrCfgPropertyTagFromNameId( // RETURNS: HRESULT IN LPMAPIPROP lpMAPIProp, // IMAPIProp interface IN LONG lNameID, // Name ID OUT ULONG * lpulPropTag); // MAPI property tag of name ID #ifdef __cplusplus } #endif #endif