|
|
/***********************************************************************
* * _IAB.H * * Header file for code in IADRBOOK.C: Address Book object * * Copyright 1992 - 1996 Microsoft Corporation. All Rights Reserved. * ***********************************************************************/
//
// structure used to contain information about the open hierarchy tables
//
typedef struct { ULONG ulConnection; LPMAPITABLE lpTable; LPMAPITABLE lpmtRestricted; LPIAB lpIAB; LPMAPIADVISESINK lpABAdviseSink; LPMAPICONTAINER lpContainer; } TABLEINFO, *LPTABLEINFO;
#define SafeRelease(x) \
if (x) \ { \ ULONG uRef = (x)->lpVtbl->Release((x)); \ DebugTrace(TEXT("**** SafeRelease: %s: Release refCount: %d\n"), TEXT(#x), uRef); \ if(uRef==0) (x) = NULL; \ }
// This following struct contains info about extensible actions in the UI
// Declared here because these actions are read from the registry and cached
// on the IAddrBook object once per session
//
typedef struct _WABACTIONITEM { GUID guidContextMenu; // GUID identifying the menu extension
LPCONTEXTMENU lpContextMenu; // ICOntextMenu object provided by the extension
LPWABEXTINIT lpWABExtInit; // IWABExtInit object provided by the extension
int nCmdIdFirst; // First Menu Command ID for this extension
int nCmdIdLast; // Last Menu Command ID for this extension
struct _WABACTIONITEM * lpNext; } WABACTIONITEM, FAR * LPWABACTIONITEM;
// Folders within the WAB are just special mailuser entries
// We cache information about all the WAB fodlers on the IAB Object
// so that we have handy access to the folders from the lpAdrBook object
//
// There are 2 types of folders:
// User Folders
// Regular folders
//
// User folders correspond to the various identities... Each identity gets
// one user folder which is non-shareable and appears at the top level of the
// treeview in the WAB Main view. This folder is distinguished in that it has a
// corresponding GUID identifying the identity it corresponds to.
// User folders are not shareable.
// Regular folders don't correspond to a particular Identity and are shareable.
//
// Folowing structure holds information about a particular folder
//
typedef struct _WABFOLDER { LPTSTR lpFolderName; // String containing folder name
LPTSTR lpProfileID; // <GUID> profile ID for the Identity that created the folder (if it's a User folder)
BOOL bShared; // Whether the folder is shared or not
BOOL bOwned; // Set to true if this folder "belongs" to an existing user folder
SBinary sbEID; // Entryif of this item
LPTSTR lpFolderOwner; // String identifying the "owner" of this folder - used for reverting a folder to it's original creator if it is shared or unshared
int nMenuCmdID; // when we load a list of folders, we will assign a menu id to them to make it easier to manipulate them in the Share Folders menu
struct _WABFOLDERLIST * lpFolderList; struct _WABFOLDER * lpNext; } WABFOLDER, FAR * LPWABFOLDER;
typedef struct _WABFOLDERLIST { LPWABFOLDER lpFolder; struct _WABFOLDERLIST * lpNext; } WABFOLDERLIST, FAR * LPWABFOLDERLIST;
#define WABUSERFOLDER WABFOLDER
#define LPWABUSERFOLDER LPWABFOLDER
// This structure is used for doing prop sheet extensions
// Information about property sheet extensions is loaded up the first time
// user wants to see properties on a WAB contact. The info is then cached on the
// IAB object
//
typedef struct _ExtDisplayDLLInfo { GUID guidPropExt; // GUID identifying the Property Sheet extension
BOOL bMailUser; // Whether this is property sheet extension for a MailUser or a DistList
LPSHELLPROPSHEETEXT lpPropSheetExt; // IShellPropSheetExt object returned by extension
LPWABEXTINIT lpWABExtInit; // IWABExtInit object returned by extension
struct _ExtDisplayDLLInfo * lpNext; } EXTDLLINFO, * LPEXTDLLINFO;
/* IDentityChangeNotification
- Identity Change Notification object for the Identity manager - This is cached on the IAB Object so that the IAB always has the - knowledge of the latest current identity*/ typedef struct _WAB_IDENTITYCHANGENOTIFY * LPWABIDENTITYCHANGENOTIFY;
//
// IAB Object
//
typedef struct _IAB { MAPIX_BASE_MEMBERS(IAB)
LPPROPDATA lpPropData;
LONG lRowID; // Status Row #
LPIWOINT lpWABObject; // Our parent WABObject
//
// Stores a handle to the open property store
//
LPPROPERTY_STORE lpPropertyStore;
// Default directory info
LPENTRYID lpEntryIDDD; ULONG cbEntryIDDD;
// PAB directory info
LPENTRYID lpEntryIDPAB; ULONG cbEntryIDPAB;
BOOL fReloadSearchPath;
// Cached Search Path containers
LPSPropValue lpspvSearchPathCache;
// Merged hierarchy table
LPTABLEDATA lpTableData; LPMAPITABLE lpmtHierarchy;
// Merged One Off Table
LPTABLEDATA lpOOData; LPMAPITABLE lpmtOOT;
// List of open hierarchy tables
ULONG ulcTableInfo; LPTABLEINFO pargTableInfo;
// List of open oneoff tables
ULONG ulcOOTableInfo; LPTABLEINFO pargOOTableInfo;
// List of IAB handled Advise "ulConnections"
LPADVISELIST padviselistIAB;
// WAB Version of notifications for this pointer
LPADVISE_LIST pWABAdviseList;
// Set TRUE if creation of IAB loaded LDAP client
BOOL fLoadedLDAP;
HWND hWndNotify; // hidden window that runs a notification spooler
UINT_PTR ulNotifyTimer; // notification spooler timer
LPWSTR lpwszWABFilePath;// FCN file path
HANDLE hThreadNotify; HANDLE hEventKillNotifyThread;
FILETIME ftLast;
// Stuff used with Context Extensions
// This is a list of extensions cached on the IAB object
LPWABACTIONITEM lpActionList; // All the registered rt-click actions for this wab
LPMAILUSER lpCntxtMailUser;
// Browse window .. assuming there's only one per IAddrBook object ..
HWND hWndBrowse;
// Identity manager information cached on the IAB object
LPWABIDENTITYCHANGENOTIFY lpWABIDCN; DWORD dwWABIDCN; IUserIdentityManager * lpUserIdentityManager; BOOL fCoInitUserIdentityManager; ULONG cIdentInit;
// Information about the current identity
TCHAR szProfileName[CCH_IDENTITY_NAME_MAX_LENGTH];// Current identities name
TCHAR szProfileID[CCH_IDENTITY_NAME_MAX_LENGTH]; // Current identities GUID in string form
LPWABUSERFOLDER lpWABUserFolders; // Linked list of all user folders
LPWABUSERFOLDER lpWABCurrentUserFolder; // The current Identities user folder
LPWABFOLDER lpWABFolders; // Linked list of ALL WAB folders
GUID guidCurrentUser; // GUID for the current Identity
HKEY hKeyCurrentUser; // Special HKEY for the identity
// Stuff for caching prop sheet extensions
LPEXTDLLINFO lpPropExtDllList; int nPropExtDLLs; //# of extension DLLs
// Caling processes can pass in a GUID through WABOpen WAB_PARAM structure
// that identifies the calling process. This GUID can later be used for
// several app-specific things - e.g.
// We use this guid to identify which property sheet and context menu
// extensions belong to the calling app and then decide to only show those
// extensions in that case. Could also use this guid to load the apps
// specific printer extension.
GUID guidPSExt; // Outlook folder information
struct _OlkContInfo *rgwabci; ULONG cwabci;
// Flags that tell us the state of the WAB
BOOL bProfilesEnabled; // means the caller didn't pass in WAB_ENABLE_PROFILES
// in WABOpen so we should treat the API as olde flavor
// but the UI should show folders etc
BOOL bProfilesIdent; // means the caller passed in WAB_ENABLE_PROFILES
// both UI and API should be identity aware,
// but probably Identities are disabled
BOOL bProfilesAPIEnabled; // means the caller passed in WAB_ENABLE_PROFILES
// so both UI and API should be identity aware
BOOL bUseOEForSendMail; // set to true when client passes WAB_USE_OE_SENDMAIL
// into WABOpen - when this flag is passed in we try to
// exclusively use OE for send-mail
BOOL bSetOLKAllocators; // Boolean set if this object created inside and Outlook session, i.e.,
// the WAB is set to use the Outlook MAPI allocators.
HANDLE hMutexOlk; // used for keeping track of outlook notifications
DWORD dwOlkRefreshCount; DWORD dwOlkFolderRefreshCount;
} IAB, *LPIAB;
//
// Private Prototypes
//
//
// Entry point to create a new IAB object
//
HRESULT HrNewIAB(LPPROPERTY_STORE lpPropertyStore, LPWABOBJECT lpWABObject, LPVOID * lppIAB);
HRESULT MergeOOTables(LPIAB lpIAB, ULONG ulFlags);
HRESULT HrMergeTableRows(LPTABLEDATA lptadDst, LPMAPITABLE lpmtSrc, ULONG ulProviderNum);
#define MIN_CCH_LAST_ERROR 256
#define MAX_CCH_LAST_ERROR 2048
// The Number of MAPI internal ONE-OFF entries in the AB OOTable.
#define IAB_INTERNAL_OOCNT 1
// Max Hierarchy Entries per Provider
#define IAB_PROVIDER_HIERARCHY_MAX 0x0000ffff
// used with ptagaABSearchPath declared in abint.c
enum { iPATH = 0, iUPDATE };
enum ivtANRCols { ivtACPR_ENTRYID = 0, ivtACPR_DISPLAY_NAME_A, ivtACPR_ADDRTYPE_A, ivtACPR_OBJECT_TYPE, ivtACPR_DISPLAY_TYPE, ivtACPR_EMAIL_ADDRESS_A, ivtACPR_SEARCH_KEY, ivtACPR_SEND_RICH_INFO, ivtACPR_TRANSMITABLE_DISPLAY_NAME_A, ivtACPR_7BIT_DISPLAY_NAME, cvtACMax };
// Loads the WABs internally used name properties
HRESULT HrLoadPrivateWABProps(LPIAB lpIAB);
// Reads the custom column props from the registry
void ReadWABCustomColumnProps(LPIAB lpIAB);
// Functions defined in Notify.c
HRESULT HrAdvise(LPIAB lpIAB, ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulEventMask, LPMAPIADVISESINK lpAdvise, ULONG FAR * lpulConnection);
HRESULT HrUnadvise(LPIAB lpIAB, ULONG ulConnection); // fires the nontifications
HRESULT HrWABNotify(LPIAB lpIAB);
|