windows-nt/Source/XPSP1/NT/printscan/fax/exchange/ab/abctbl.h
2020-09-26 16:20:57 +08:00

198 lines
4.3 KiB
C

/***********************************************************************
*
* _ABCTBL.H
*
* Header file for code in ABCTBL.C
*
* Copyright 1992, 1993 Microsoft Corporation. All Rights Reserved.
*
***********************************************************************/
/*
* BookMark structure
*/
#define MAX_BOOKMARKS 10
#define BK_PEGGEDTOEND ((ULONG)0x00000001)
typedef struct _ABCBK
{
ULONG ulFlags; /* Flags */
FILETIME filetime; /* Time of file when bookmark created */
ULONG ulPosition; /* Position of record in file */
ABCREC abcrec; /* Record associated with this bookmark */
} ABCBK, *LPABCBK;
#define CBABCBK sizeof(ABCBK)
/*
* Function Prototypes
*/
/*
* Reuses methods:
* ROOT_QueryInterface
* ROOT_AddRef
* ROOT_GetLastError
* IVTROOT_RegisterNotification
*/
#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)
};
/*
* _IVTABC is the structure returned to the client when
* the contents table is retrieved from the ab container
* object (ABCONT.C).
*
* The first thing in the structure must be a jump table
* with all the IMAPITable methods in it.
*
*/
typedef struct _IVTABC
{
const IVTABC_Vtbl FAR * lpVtbl;
/*
* Need to be the same as other objects
* since this object reuses methods from
* other objects.
*/
FAB_IUnkWithLogon;
/*
* Private data
*/
/* The list of active columns */
LPSPropTagArray lpPTAColSet;
/* HANDLE of file that I'm browsing... */
HANDLE hFile;
/* FILETIME time the file was last changed */
FILETIME filetime;
/* Size of file */
ULONG ulMaxPos;
/* Current position in file */
ULONG ulPosition;
/* BookMark array... */
LPABCBK rglpABCBK[MAX_BOOKMARKS];
/*
* Restriction stuff
*/
ULONG ulRstrDenom;
/* Partial Name to match */
LPTSTR lpszPartialName;
/* 2 bit arrays of what's been checked, and what (of them) matches */
BYTE *rgChecked;
BYTE *rgMatched;
ULONG ulConnectMic;
UINT cAdvise; /* Count of registered notifications */
LPMAPIADVISESINK * parglpAdvise; /* Registered notifications */
FTG ftg; /* Idle function tag */
LPTSTR lpszFileName;
} IVTABC, *LPIVTABC;
#define CBIVTABC sizeof(IVTABC)
/*
* Record for PR_INSTANCE_KEY. Need enough information to find the record quickly as
* well as determine if the record is still valid.
*/
typedef struct _abcrecinstance
{
ULONG ulRecordPosition;
FILETIME filetime;
TCHAR rgchzFileName[1]; /* Get's sized accordingly */
} ABCRecInstance, FAR * LPABCRecInstance;
/*
* Private macros
*/
/* Counts the number of bits in a byte */
#define CBitsB(b, cbits) { \
\
cbits = 0; \
\
cbits = ((b) & 0x55) + ((b>>1) & 0x55); \
cbits = (cbits & 0x33) + ((cbits>>2) & 0x33); \
cbits = (cbits & 0x0f) + (cbits>>4); \
}
/*
* Functions prototypes
*/
// Creates a new IVTAbc object
HRESULT
NewIVTAbc (LPVOID * lppIVTAbc, LPABPLOGON lpABPLogon, LPABCNT lpABC);
// Internal functions
HRESULT HrOpenFile(LPIVTABC lpIVTAbc);
void FreeANRBitmaps(LPIVTABC lpIVTAbc);
HRESULT HrValidateEntry (LPIVTABC lpIVTAbc, ULONG ulNewPos);
BOOL FNameMatch (LPIVTABC lpIVTAbc, LPTSTR rgchDisplayName);
BOOL FMatched (LPIVTABC lpIVTAbc, ULONG ulNewPos);
BOOL FChecked (LPIVTABC lpIVTAbc, ULONG ulNewPos);
/*
* Default column set
*/
enum { ivalvtPR_DISPLAY_NAME,
ivalvtPR_ENTRYID,
ivalvtPR_ADDRTYPE,
ivalvtPR_EMAIL_ADDRESS,
ivalvtPR_OBJECT_TYPE,
ivalvtPR_DISPLAY_TYPE,
ivalvtPR_INSTANCE_KEY,
cvalvtMax };
/*
* Externs defined for use in the three table modules
*/
extern const IVTABC_Vtbl vtblIVTABC;
extern const LPSPropTagArray ptagaivtabcColSet;