ABP.H
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:21k
源码类别:
Windows编程
开发平台:
Visual C++
- /***********************************************************************
- *
- * ABP.H
- *
- * Definitions for Sample Address Book Provider
- *
- * Copyright 1992-1995 Microsoft Corporation. All Rights Reserved.
- *
- ***********************************************************************/
- #ifdef _WIN32
- #define INC_OLE2 /* Get the OLE2 stuff */
- #define INC_RPC /* harmless on Windows NT; Windows 95 needs it */
- #endif
- #include <windows.h>
- #include <windowsx.h>
- #include <limits.h>
- #include <mapiwin.h>
- #include <mapidbg.h>
- #include <mapidefs.h>
- #include <mapicode.h>
- #include <mapitags.h>
- #include <mapiguid.h>
- #include <mapispi.h>
- #include <mapiutil.h>
- #include <mapival.h>
- #include <memory.h>
- #include <commdlg.h>
- /*
- * IUnknown base members
- */
- #define SAB_IUnknown
- LONG lcInit;
- HRESULT hResult;
- UINT idsLastError;
- HINSTANCE hLibrary;
- LPALLOCATEBUFFER lpAllocBuff;
- LPALLOCATEMORE lpAllocMore;
- LPFREEBUFFER lpFreeBuff;
- LPMALLOC lpMalloc;
- CRITICAL_SECTION cs
- #define SAB_IUnkWithLogon
- SAB_IUnknown;
- LPABLOGON lpABLogon
- #define SAB_Wrapped
- SAB_IUnkWithLogon;
- LPMAPIPROP lpPropData
- /*
- * Definition of all the objects referred to in the various source modules
- * of this provider.
- */
- /*
- * Declaration of IABProvider object implementation
- * Code for this is in ABP.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ABP
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ABP_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABPROVIDER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ABP_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABPROVIDER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
- DECLARE_MAPI_INTERFACE(ABP_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABPROVIDER_METHODS(IMPL)
- };
- /*
- * Declaration of IABLogon object implementation
- * Code for this is in ABP.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ABPLOGON
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ABPLOGON_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABLOGON_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ABPLOGON_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABLOGON_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
- DECLARE_MAPI_INTERFACE(ABPLOGON_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABLOGON_METHODS(IMPL)
- };
- /*
- * Declaration of IABContainer object implementation
- * Code for this is in ROOT.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ROOT
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ROOT_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ROOT_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
- DECLARE_MAPI_INTERFACE(ROOT_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- };
- #define ROOT_ValidateObject(Method, pThis)
- {
- HRESULT hResult;
- if (IsBadReadPtr(pThis, sizeof(ROOT)))
- {
- hResult = ResultFromScode(E_INVALIDARG);
- DebugTraceResult(ROOT##_##Method, hResult);
- return hResult;
- }
- if (pThis->lpVtbl != &vtblROOT)
- {
- hResult = ResultFromScode(E_INVALIDARG);
- DebugTraceResult(ROOT##_##Method, hResult);
- return hResult;
- }
- }
- /*
- * Declaration of IABContainer object implementation
- * Code for this is in ABCONT.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ABCNT
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ABC_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ABC_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
- DECLARE_MAPI_INTERFACE(ABC_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- };
- #define ABC_ValidateObject(Method, pThis)
- {
- HRESULT hResult;
- if (IsBadReadPtr(pThis, sizeof(ABC)))
- {
- hResult = ResultFromScode(E_INVALIDARG);
- DebugTraceResult(ABC##_##Method, hResult);
- return hResult;
- }
- if (pThis->lpVtbl != &vtblABC)
- {
- hResult = ResultFromScode(E_INVALIDARG);
- DebugTraceResult(ABC##_##Method, hResult);
- return hResult;
- }
- }
- /*
- * Declaration of IMAPIContainer object implementation
- * Code for this is in ABSEARCH.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ABSRCH
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ABSRCH_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ABSRCH_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
- DECLARE_MAPI_INTERFACE(ABSRCH_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- };
- #define ABSRCH_ValidateObject(Method, pThis)
- {
- HRESULT hResult;
- if (IsBadReadPtr(pThis, sizeof(ABSRCH)))
- {
- hResult = ResultFromScode(E_INVALIDARG);
- DebugTraceResult(ABSRCH##_##Method, hResult);
- return hResult;
- }
- if (pThis->lpVtbl != &vtblABSRCH)
- {
- hResult = ResultFromScode(E_INVALIDARG);
- DebugTraceResult(ABSRCH##_##Method, hResult);
- return hResult;
- }
- }
- /*
- * Declaration of IMailUser object implementation
- * Code for this is in ABUSER.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ABUSER
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ABU_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAILUSER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ABU_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAILUSER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
- DECLARE_MAPI_INTERFACE(ABU_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAILUSER_METHODS(IMPL)
- };
- #define ABU_ValidateObject(Method, pThis)
- {
- HRESULT hResult;
- if (IsBadReadPtr(pThis, sizeof(ABUSER)))
- {
- hResult = ResultFromScode(E_INVALIDARG);
- DebugTraceResult(ABU##_##Method, hResult);
- return hResult;
- }
- if (pThis->lpVtbl != &vtblABU)
- {
- hResult = ResultFromScode(E_INVALIDARG);
- DebugTraceResult(ABU##_##Method, hResult);
- return hResult;
- }
- }
- /*
- * Declaration of IMAPIProp object implementation
- * Code for this is in WRAP.C
- */
- #undef INTERFACE
- #define INTERFACE struct _WRAP
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, WRAP_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, WRAP_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
- DECLARE_MAPI_INTERFACE(WRAP_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- };
- #undef INTERFACE
- #define INTERFACE struct _IVTABC
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IVTABC_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPITABLE_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IVTABC_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPITABLE_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
- DECLARE_MAPI_INTERFACE(IVTABC_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPITABLE_METHODS(IMPL)
- };
- /*
- * Internal utility functions that allow access to data stored in the Init object
- */
- void
- RemoveLogonObject(LPABPROVIDER lpABProvider, LPVOID lpvABLogon, LPFREEBUFFER lpFreeBuff);
- void
- FindLogonObject(LPABPROVIDER lpABProvider, LPMAPIUID lpMuidToFind, LPABLOGON * lppABLogon);
- /*
- * Internal utility functions that allow access to data stored in the logon object
- */
- LPMAPIUID
- LpMuidFromLogon(LPABLOGON lpABLogon);
- HRESULT
- HrLpszGetCurrentFileName(LPABLOGON lpABLogon, LPSTR * lppszFileName);
- HRESULT
- HrReplaceCurrentFileName(LPABLOGON lpABLogon, LPSTR lpstrT);
- void
- GenerateContainerDN(LPABLOGON lpABLogon, LPSTR lpszName);
- BOOL
- FEqualSABFiles( LPABLOGON lpABLogon,
- LPSTR lpszFileName);
- /*
- *
- * Functions that return new objects
- *
- */
- /*
- * Creates a new ABPLogon object (see ABLOGON.C)
- */
- HRESULT
- HrNewABLogon( LPABLOGON * lppABLogon,
- LPABPROVIDER lpABP,
- LPMAPISUP lpMAPISup,
- LPSTR lpszSABFile,
- LPMAPIUID lpmuid,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
- /*
- * Creates a new ROOT container object (see ROOT.C)
- */
- HRESULT
- HrNewROOT(LPABCONT * lppROOT,
- ULONG * lpulObjType,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
- /*
- * Creates a new directory container object (see ABCONT.C)
- */
- HRESULT
- HrNewSampDirectory( LPABCONT * lppABC,
- ULONG * lpulObjType,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
- /*
- * Creates the search object associated with the SampDirectory (see ABSEARCH.C)
- */
- HRESULT
- HrNewSearch(LPMAPICONTAINER * lppABSearch,
- LPABLOGON lpABLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
- /*
- * Creates a new Mail User object (see ABUSER.C)
- */
- HRESULT
- HrNewSampUser( LPMAILUSER * lppMAPIPropEntry,
- ULONG * lpulObjectType,
- ULONG cbEntryID,
- LPENTRYID lpEntryID,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
- /*
- * Creates a new one-off templateID object (see TID.C)
- */
- HRESULT
- HrNewOOTID( LPMAPIPROP * lppMAPIPropNew,
- ULONG cbTemplateId,
- LPENTRYID lpTemplateId,
- ULONG ulTemplateFlags,
- LPMAPIPROP lpMAPIPropData,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
- /*
- * Creates a new one-off mail user object (see OOUSER.C)
- */
- HRESULT
- HrNewSampOOUser(LPMAILUSER * lppMAPIPropEntry,
- ULONG * lpulObjectType,
- ULONG cbEntryID,
- LPENTRYID lpEntryID,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
- /*
- * Creates a new status object for this provider (see STATUS.C)
- */
- HRESULT
- HrNewStatusObject(LPMAPISTATUS * lppABS,
- ULONG * lpulObjType,
- ULONG ulFlags,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
- /*
- * Creates a new templateID object that's associated with
- * a SAB mailuser object.
- */
- HRESULT
- HrNewTID ( LPMAPIPROP * lppMAPIPropNew,
- ULONG cbTemplateId,
- LPENTRYID lpTemplateId,
- ULONG ulTemplateFlags,
- LPMAPIPROP lpMAPIPropData,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
- /*
- * Creates a new contents table object
- */
- HRESULT
- HrNewIVTAbc (LPMAPITABLE * lppIVTAbc,
- LPABLOGON lpABLogon,
- LPABCONT lpABC,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
- /*
- * Creates/Updates the SAB's root hierarchy
- */
- HRESULT
- HrBuildRootHier(LPABLOGON lpABLogon, LPMAPITABLE * lppMAPITable);
- /*
- * Sets an error string associated with a particular hResult on an object.
- * It's used in conjunction with the method GetLastError.
- */
- VOID SetErrorIDS (LPVOID lpObject, HRESULT hResult, UINT ids);
- /*
- * Loads a string from a resource. Optionally allocates room for the string
- * if lpAllocBuff is not NULL. See ABP.C.
- */
- SCODE ScLoadString( UINT ids,
- ULONG ulcch,
- LPALLOCATEBUFFER lpAllocBuff,
- HINSTANCE hLibrary,
- LPSTR * lppsz);
- /*
- * The sample ABPs MAPIUID
- *
- * This MAPIUID must be unique (see the Service Provider Writer's Guide on
- * Constructing Entry IDs)
- */
- #define MUIDABSAMPLE {0x81,0x2b,0x1f,0x40,0xbe,0xa3,0x10,0x19,0x9d,0x6e,0x00,0xdd,0x01,0x0f,0x54,0x02}
- #define SZEMAILTYPE "MSPEER"
- #define MAX_DISPLAY_NAME 45
- /*
- * Browse record
- *
- * The .SAB files are made up of the following records.
- */
- #define MAX_NAME_SIZE 30
- #define MAX_EMA_SIZE 50
- #pragma pack(4)
- typedef struct _ABCREC
- {
- char rgchDisplayName[MAX_NAME_SIZE + 1];
- char rgchEmailAddress[MAX_EMA_SIZE + 1];
- } ABCREC, *LPABCREC;
- #pragma pack()
- /*
- * Defines of various entryid types
- */
- #define SAMP_DIRECTORY 0x00000000
- #define SAMP_USER 0x00000001
- #define SAMP_UNKNOWN 0x00000002
- #define SAMP_OOUSER 0x00000003
- /*
- * The version of this ABPs entryids
- */
- #define SAMP_VERSION 0x000000002
- /*
- * Directory entry id structure
- *
- * This entryid is permanent.
- */
- typedef struct _dir_entryid
- {
- BYTE abFlags[4];
- MAPIUID muid;
- ULONG ulVersion;
- ULONG ulType;
- MAPIUID muidID;
- } DIR_ENTRYID, *LPDIR_ENTRYID;
- /*
- * Mail user entry id structure
- *
- * This entryid is permanent.
- */
- #pragma pack(4)
- typedef struct _usr_entryid
- {
- BYTE abFlags[4];
- MAPIUID muid;
- ULONG ulVersion;
- ULONG ulType;
- ABCREC abcrec;
- } USR_ENTRYID, *LPUSR_ENTRYID;
- #pragma pack()
- /*
- * One off user entry id structure
- *
- * This entryid is permanent.
- */
- typedef struct _oousr_entryid
- {
- BYTE abFlags[4];
- MAPIUID muid;
- ULONG ulVersion;
- ULONG ulType;
- } OOUSR_ENTRYID, *LPOOUSR_ENTRYID;
- /*
- * Externs used throughout various modules within this provider.
- * They actually get defined in abp.c
- */
- extern LCID lcidUser;
- extern MAPIUID muidABSample;
- extern MAPIUID muidSABProviderID;
- extern DTBLLABEL dtbllabel;
- extern DTBLPAGE dtblpage;
- extern DTBLGROUPBOX dtblgroupbox;
- extern CHAR szNoFilter[];
- extern LPSTR lpszEMT;
- extern CHAR szAddrTypeFilter[];
- extern CHAR szFileNameFilter[];
- #define PR_LISTBOX_TABLE PROP_TAG(PT_OBJECT,0x6605)
- #define PR_COMBOBOX_TABLE PROP_TAG(PT_OBJECT,0x6607)
- #define PR_DDLISTBOX_TABLE PROP_TAG(PT_OBJECT,0x6609)
- /*
- * Properties defined for our one-off entry
- */
- #define PR_SERVER_NAME PROP_TAG(PT_TSTRING,0x660b)
- #define PR_SHARE_NAME PROP_TAG(PT_TSTRING,0x660c)
- #define PR_PATH_NAME PROP_TAG(PT_TSTRING,0x660d)
- #define MAX_SERVER_NAME 15
- #define MAX_SHARE_NAME 12
- /*
- * MACROs for Win16
- */
- #ifdef WIN16
- #define lstrcatA lstrcat
- #define wsprintfA wsprintf
- #define CharUpperBuffA CharUpperBuff
- #endif /*WIN16*/