XPBASE.H
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:11k
源码类别:
Windows编程
开发平台:
Visual C++
- /*
- - X P B A S E . H
- -
- *
- * Definitions, typedefs and prototypes used by the Sample Transport
- * Provider modules.
- *
- * Copyright 1992-1995 Microsoft Corporation. All Rights Reserved.
- */
- /* Make sure that we are thinking "C" here... */
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- /*
- * Linked-List of deferred messages
- */
- typedef struct _DEFMSG *LPDEFMSG;
- typedef struct _DEFMSG
- {
- ULONG ulMsgRef;
- SBinary sbinEIDDef;
- LPDEFMSG lpNext;
- } DEFMSG;
- /*
- * Sample Transport Provider DLL exported entry points.
- */
- /* Transport Init Object */
- #undef INTERFACE
- #define INTERFACE struct _XPP
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, XPP_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IXPPROVIDER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
- DECLARE_MAPI_INTERFACE(XPP_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IXPPROVIDER_METHODS(IMPL)
- };
- typedef struct _XPP {
- XPP_Vtbl FAR * lpVtbl; /* Methods */
- LONG lcInit; /* Usage Count */
- struct _XPP FAR * lpxppMyAddress; /* Pointer to myself, for validation*/
- CRITICAL_SECTION csTransport; /* Critical section for this object */
- struct _XPL FAR * XPSessionList; /* List of logon sessions on obj */
- BOOL fInited; /* Are we in an inited state? */
- HINSTANCE hInst; /* Instance of our library */
- LPMALLOC lpMalloc; /* IMalloc object */
- LPFREEBUFFER lpFreeBuffer; /* Need this to free the object */
- } XPP, FAR *LPXPP;
- /* Transport Logon Object */
- #undef INTERFACE
- #define INTERFACE struct _XPL
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, XPL_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IXPLOGON_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
- DECLARE_MAPI_INTERFACE(XPL_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IXPLOGON_METHODS(IMPL)
- };
- /*
- * Logon object structure.
- */
- typedef struct _XPL
- {
- XPL_Vtbl FAR * lpVtbl; /* Methods */
- LONG lcInit; /* Usage Count */
- struct _XPL FAR * lpNextSession; /* Link to next session */
- struct _XPL FAR * lpMySession; /* My address, used to validate */
- LPXPP lpxppParent; /* Parent XPP object */
- LPMAPISTATUS lpXPStatus; /* Child Status Object */
- ULONG ulSessionFlags; /* Session flags */
- LPMAPISUP lpMAPISup; /* Support object for this session */
- LPALLOCATEBUFFER AllocateBuffer; /* MAPIAllocateBuffer pointer */
- LPALLOCATEMORE AllocateMore; /* MAPIAllocateMore pointer */
- LPFREEBUFFER FreeBuffer; /* MAPIFreeBuffer function pointer */
- ULONG cLogonPropValues; /* Number of Logon property values */
- LPSPropValue lpPropArray; /* Logon property array */
- LPSPropValue lpMyIDArray; /* Properties to set on transmit */
- ULONG cOptData; /* Number of Options we support */
- LPOPTIONDATA lpOptData; /* Per-Message & Recip OptionData */
- LPTSTR lpszAdrType; /* Used to pass back on AddressType call */
- ULONG ulTransportStatus; /* Howzit going? Used by status */
- ULONG ulResourceMethods; /* Methods supported by our status object */
- /* Deferred message handling elements */
- ULONG ulDeferredMsgRef;
- BOOL fResendDeferred;
- LPDEFMSG lpDeferredList;
- BOOL fRefSupport; /* We AddRef'd the support object */
- BOOL fFoundInMessage; /* Found a inbound message flag */
- HANDLE hInFindHandle; /* Used in Poll(), StartMessage() */
- WIN32_FIND_DATA wfdInFindData; /* Used in Poll(), StartMessage() */
- HANDLE hOutFindHandle; /* Used in Outbound Queue */
- WIN32_FIND_DATA wfdOutFindData; /* Used in Outbound Queue */
- } XPL, FAR *LPXPL;
- /*
- * Properties we store in the Profile.
- *
- * NOTE!!! THE ORDERING OF THE PROPERTY ID'S HERE MUST BE THE SAME
- * AS THE ORDERING OF PROP TAG ARRAY sptLogonArray IN SMPLXPT.C, WITH
- * SEQUENTIAL NUMBERING!!!!
- *
- */
- #define BASE_PROVIDER_ID 0x6600 /* From MAPITAGS.H comments */
- #define BASE_MSG_OPT_ID 0x4000 /* From MAPITAGS.H comments */
- #define BASE_RECIP_OPT_ID 0x5800 /* From MAPITAGS.H comments */
- /* Display name of user. Optional property. If not present we will use
- the email address as the display name -- ugly but effective. */
- #define PR_SAMPLE_DISPLAY_NAME PROP_TAG (PT_TSTRING, (BASE_PROVIDER_ID + 0x0001))
- /* Address type of sample transport. This will be used to construct inbound
- and outbound addresses where needed. It also will be used to tell the
- Spooler what address types we should get. */
- #define PR_SAMPLE_EMAIL_ADDR_TYPE PROP_TAG (PT_TSTRING, (BASE_PROVIDER_ID + 0x0002))
- /* Email address. This will usually be the same as the inbound directory,
- although this may tend to have a more canonical form for remote access. */
- #define PR_SAMPLE_EMAIL_ADDRESS PROP_TAG (PT_TSTRING, (BASE_PROVIDER_ID + 0x0003))
- /* Inbound directory. This is where the transport will look in order to
- determine whether it has received any mail. */
- #define PR_SAMPLE_INBOUND_DIR PROP_TAG (PT_TSTRING, (BASE_PROVIDER_ID + 0x0004))
- /* Outbound directory. The transport will store its message files here
- while it is in the process of sending them. The presence of a file
- in this directory implies that the transport still has work to do. */
- #define PR_SAMPLE_OUTBOUND_DIR PROP_TAG (PT_TSTRING, (BASE_PROVIDER_ID + 0x0005))
- /* Filename. This is an 8-character root for use by mail-enabled or
- workgroup applications to build a complete file specification (by
- adding an extension) for data they wish to store for this user. */
- #define PR_SAMPLE_FILENAME PROP_TAG (PT_TSTRING, (BASE_PROVIDER_ID + 0x0006))
- /* Directory. This is a directory in which workgroup applications may
- wish to store their files pertaining to this user. */
- #define PR_SAMPLE_DIRECTORY PROP_TAG (PT_TSTRING, (BASE_PROVIDER_ID + 0x0007))
- /* Flags. Contain various options for this transport provider. */
- #define PR_SAMPLE_FLAGS PROP_TAG (PT_LONG, (BASE_PROVIDER_ID + 0x0008))
- #define PR_SAMPLE_FLAG_PEER_TO_PEER ((ULONG) 0x00000001)
- #define PR_SAMPLE_FLAG_UI_ALWAYS ((ULONG) 0x00000002)
- #define PR_SAMPLE_FLAG_LOG_EVENTS ((ULONG) 0x00000004)
- #define PR_SAMPLE_FLAG_SAVE_DATA ((ULONG) 0x00000008)
- /* Logfile. This is where logging information will be written. If this
- property is not present, we will use (PR_SAMPLE_FILENAME)".LOG" */
- #define PR_SAMPLE_LOGFILE PROP_TAG (PT_TSTRING, (BASE_PROVIDER_ID + 0x0009))
- /* Logfile high water mark. This is the point at which the log writer will
- truncate the logfile so as not to fill up the disk. */
- #define PR_SAMPLE_LOGHIGHWATER PROP_TAG (PT_LONG, (BASE_PROVIDER_ID + 0x000A))
- /* Logfile low water mark. This is the approximate size that the logfile
- writer will truncate the logfile to (modulo a line ending). */
- #define PR_SAMPLE_LOGLOWWATER PROP_TAG (PT_LONG, (BASE_PROVIDER_ID + 0x000B))
- /* The following property tags are temporaries. They are here because
- the configuration property sheets want one property tag for every
- control; after we run the dialogs, we roll them back up into
- PR_SAMPLE_FLAGS. */
- #define PR_TEMP_PEER_TO_PEER PROP_TAG (PT_BOOLEAN, (BASE_PROVIDER_ID + 0x000C))
- #define PR_TEMP_UI_ALWAYS PROP_TAG (PT_BOOLEAN, (BASE_PROVIDER_ID + 0x000D))
- #define PR_TEMP_LOG_EVENTS PROP_TAG (PT_BOOLEAN, (BASE_PROVIDER_ID + 0x000E))
- #define PR_TEMP_SAVE_DATA PROP_TAG (PT_BOOLEAN, (BASE_PROVIDER_ID + 0x000F))
- #define PR_TEMP_LOGHIGHWATER PROP_TAG (PT_TSTRING, (BASE_PROVIDER_ID + 0x0010))
- #define PR_TEMP_LOGLOWWATER PROP_TAG (PT_TSTRING, (BASE_PROVIDER_ID + 0x0011))
- /* This property is a per-message option. If TRUE, the message will be
- deferred until the next message comes along that is not to be deferred.
- At that point, the Transport will SpoolerNotify() to have all currently
- deferred messages submitted to it for sending. */
- #define PR_SAMPLE_PER_MSG_DEFER PROP_TAG (PT_BOOLEAN, (BASE_MSG_OPT_ID + 0x0001))
- /* This property is a per-recipient option. If TRUE, the message will be
- deferred until the next message comes along that is not to be deferred.
- At that point, the Transport will SpoolerNotify() to have all currently
- deferred messages submitted to it for sending. This property is ignored
- if PR_SAMPLE_PER_MSG_DEFER is set.
- This property is also used as a flag on the message that says - we've seen
- this message before and have deferred it due to some recipients with their
- property PR_SAMPLE_PER_RECIP_DEFER flag set. When we run across this, we'll
- delete it from the message and send to the remaining recipients that
- have not been handled. */
- #define PR_SAMPLE_PER_RECIP_DEFER PROP_TAG (PT_BOOLEAN, (BASE_RECIP_OPT_ID + 0x0001))
- /* The following is used to access the properties in the logon array. */
- #define MAX_LOGON_PROPERTIES 17
- #define TEMP_LOGON_PROPERTIES 6
- #define ArrayIndex(PROP, ARRAY) (ARRAY)[(PROP_ID(PROP) - BASE_PROVIDER_ID - 1)]
- #define NUM_SENDER_PROPS 3 /* How many sender ID properties? */
- /* Display name for my transport. Used for the status row. */
- #ifdef DEBUG
- #define MYDISPLAYNAME "Sample Transport Provider (Debug)"
- #elif defined (TEST)
- #define MYDISPLAYNAME "Sample Transport Provider (Test)"
- #else
- #define MYDISPLAYNAME "Sample Transport Provider"
- #endif
- /* Common global data/code. */
- BOOL FIsValidSession(LPXPL);
- SCODE ScCheckLogonProps(LPXPDLG lpXPDialog, BOOL fUIAllowed);
- HRESULT MapScodeSz(SCODE sc, LPXPL lpxpl, LPTSTR * lppszMessage);
- HRESULT HrCheckSpoolerYield(LPMAPISUP lpMAPISup, BOOL fReset);
- SCODE ScCopySessionProps(LPXPL lpxpl, LPSPropValue FAR *lppPropArray, LPSPropValue FAR *lppMyIDArray);
- #ifdef __cplusplus
- }
- #endif