You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
303 lines
11 KiB
303 lines
11 KiB
/***********************************************************************
|
|
*
|
|
* _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);
|