// --rulecls.h----------------------------------------------------------------- // // Rule class interface header. // // Copyright (C) Microsoft Corp. 1986-1998. All rights reserved. // // ---------------------------------------------------------------------------- #if !defined(_RULECLS_H_) #define _RULECLS_H_ // $$--LPACTIONS--------------------------------------------------------------- // // Pointer to ACTIONS structure defined in edkmdb.h. // // ---------------------------------------------------------------------------- typedef ACTIONS FAR * LPACTIONS; // should be moved to edkmdb.h // $$--IExchangeFolderRules---------------------------------------------------- // // Definition of interface for folder rules class CFolderRules. // // ---------------------------------------------------------------------------- #undef INTERFACE #define INTERFACE IExchangeFolderRules // Manifest for cursor position indicating we are at the end of the rules table. #define RULE_PAST_END ((LONG) -1) DECLARE_INTERFACE_(IExchangeFolderRules, IUnknown) { #ifndef NO_BASEINTERFACE_FUNCS /* IUnknown methods */ STDMETHOD(QueryInterface)( THIS_ REFIID riid, LPVOID FAR * ppvObj ) PURE; STDMETHOD_(ULONG, AddRef)( THIS ) PURE; STDMETHOD_(ULONG, Release)( THIS ) PURE; #endif /* IExchangeFolderRules methods */ STDMETHOD(HrDelete)( THIS ) PURE; STDMETHOD(HrDisable)( THIS ) PURE; STDMETHOD(HrEnable)( THIS ) PURE; STDMETHOD(HrGet)( THIS_ LPLONG lplState, LPSRestriction FAR * lppRestriction, LPACTIONS FAR * lppActions, LPLONG lplLevel, LPSTR FAR * lppszName ) PURE; STDMETHOD(HrInsert)( THIS_ LONG lState, LPSRestriction lpRestriction, LPACTIONS lpActions, LONG lLevel, LPSTR lpszName ) PURE; STDMETHOD(HrSeek)( THIS_ LONG lPos ) PURE; STDMETHOD(HrTell)( THIS_ LPLONG lplPos ) PURE; }; // $$--LPFOLDERRULES----------------------------------------------------------- // // Pointer to IExchangeFolderRules interface. // // ---------------------------------------------------------------------------- typedef IExchangeFolderRules FAR* LPFOLDERRULES; // // Helper functions defined in module RULECLS. // // $--HrCopyActions------------------------------------------------------------ // // DESCRIPTION: Make a copy of an ACTIONS structure and all its subelements. // // INPUT: // // [lpActsSrc] -- Ptr to ACTIONS structure to be copied. // [lpObject] -- Ptr to an existing MAPI buffer allocated by // MAPIAllocateBuffer(), or NULL if the returned structure // is to be allocated using MAPIAllocateBuffer(). // OUTPUT: // // [lppActsDest] -- Ptr to be set to copy of ACTIONS structure. // // RETURNS: HRESULT -- NOERROR if successful; // E_INVALIDARG if bad input; // E_OUTOFMEMORY if insufficient memory; // E_FAIL otherwise. // //----------------------------------------------------------------------------- STDAPI HrCopyActions( // RETURNS: HRESULT IN LPACTIONS lpActsSrc, // source action ptr IN LPVOID lpObject, // ptr to existing MAPI buffer OUT LPACTIONS FAR * lppActsDest // ptr to destination ACTIONS buffer ); // $--HrCopyRestriction-------------------------------------------------------- // // DESCRIPTION: Make a copy of an SRestriction structure and all its // subelements. // // INPUT: // // [lpResSrc] -- Ptr to restriction to be copied. // [lpObject] -- Ptr to an existing MAPI buffer allocated by // MAPIAllocateBuffer(), or NULL if the returned structure // is to be allocated using MAPIAllocateBuffer(). // // OUTPUT: // // [lppResDest] -- Ptr to be set to copy of restriction. // // RETURNS: NOERROR if successful; // E_INVALIDARG if bad input; // E_OUTOFMEMORY if insufficient memory; // E_FAIL otherwise. // //----------------------------------------------------------------------------- STDAPI HrCopyRestriction( // RETURNS: HRESULT IN LPSRestriction lpResSrc, // source restriction ptr IN LPVOID lpObject, // ptr to existing MAPI buffer OUT LPSRestriction FAR * lppResDest // dest restriction buffer ptr ); // $--HrFolderRulesGetProviders------------------------------------------------ // // DESCRIPTION: Get an array of rules provider names for a given folder. // // INPUT: // // [lpMDB] -- Pointer to message store containing folder. // [cbentryid] -- Number of bytes in folder's entry identifier. // [lpentryid] -- Folder's entry identifier. // // OUTPUT: // // [lpcProviders] -- Pointer to ulong that will be set to count of // providers on successful return. // [lpppszProviders] -- Pointer to array of string pointers that will be set // to point at an array of provider name string pointers // on successful return. // // RETURNS: NOERROR if successful; // E_INVALIDARG if bad input; // E_OUTOFMEMORY if not enough memory; // E_NOINTERFACE if rules table does not exist on folder; // E_FAIL otherwise. // //----------------------------------------------------------------------------- STDAPI HrFolderRulesGetProviders( // RETURNS: HRESULT IN LPMDB lpMDB, // MAPI MDB store ptr IN ULONG cbentryid, // # bytes in entry ID IN LPENTRYID lpentryid, // entry ID ptr OUT LPULONG lpcProviders, // count of providers OUT LPSTR FAR * FAR * lpppszProviders // ptr to array of providers ); // $--HrFolderRulesOpen-------------------------------------------------------- // // DESCRIPTION: Get a pointer to an object which implements the // IExchangeFolderRules interface defined in rulecls.h. // // INPUT: // // [lpMDB] -- Pointer to message store containing folder. // [cbentryid] -- Number of bytes in folder's entry identifier. // [lpentryid] -- Folder's entry identifier. // [lpszProvider] -- Provider for rules. Multiple providers may have // rules on a folder. The IExchangeFolderRules interface // provides access to the rules associated with a // single specified provider. // // OUTPUT: // // [lppFolderRules] -- Pointer to object which supports interface. // // RETURNS: NOERROR if successful; // E_INVALIDARG if bad input; // E_OUTOFMEMORY if not enough memory; // E_NOINTERFACE if rules table does not exist on folder; // E_FAIL otherwise. // //----------------------------------------------------------------------------- STDAPI HrFolderRulesOpen( // RETURNS: HRESULT IN LPMDB lpMDB, // MAPI MDB store ptr IN ULONG cbentryid, // # bytes in entry ID IN LPENTRYID lpentryid, // entry ID ptr IN LPSTR lpszProvider, // provider name OUT LPFOLDERRULES FAR * lppFolderRules // ptr to folder rules buffer ); // $--HrActionToString--------------------------------------------------------- // // DESCRIPTION: Get a string representation of an ACTION. // // INPUT: // // [lpSession] -- MAPI session ptr. // [lpAction] -- Ptr to ACTION. // // OUTPUT: // // [lppszString] -- Ptr to ptr that will be set to point at generated // string representation on successful return. // // RETURNS: NOERROR if successful; // E_INVALIDARG if bad input; // E_OUTOFMEMORY if not enough memory; // E_FAIL otherwise. // //----------------------------------------------------------------------------- STDAPI HrActionToString( // RETURNS: HRESULT IN LPMAPISESSION lpSession, // MAPI session ptr IN LPACTION lpAction, // action ptr OUT LPSTR FAR * lppszString // string ptr ptr ); // $--HrRestrictionToString---------------------------------------------------- // // DESCRIPTION: Get a string representation of an SRestriction. // // INPUT: // // [lpRestriction] -- Ptr to restriction. // // OUTPUT: // // [lppszString] -- Ptr to ptr that will be set to point at generated // string representation on successful return. // // RETURNS: NOERROR if successful; // E_INVALIDARG if bad input; // E_OUTOFMEMORY if not enough memory; // E_FAIL otherwise. // //----------------------------------------------------------------------------- STDAPI HrRestrictionToString( // RETURNS: HRESULT IN LPSRestriction lpRestriction, // restriction ptr OUT LPSTR FAR * lppszString // string ptr ptr ); // $--HrStringToAction--------------------------------------------------------- // // DESCRIPTION: Generate an ACTION structure that describes the action // provided in *lpszString. // // INPUT: // // [lpSession] -- Ptr to MAPI session. // [lpFolder] -- Ptr to MAPI folder action applies to. MUST have been // opened with MAPI_MODIFY access. // [lpszString] -- Action string specifying ACTION to be generated. // [lpObject] -- Ptr to an existing MAPI buffer allocated by // MAPIAllocateBuffer(). NULL is not permitted. Ideally, // this is a ptr to the parent ACTIONS structure. // // INPUT/OUTPUT: // // [lpAction] -- Ptr to ACTION structure that will be filled in. This // is allocated by the caller. Ideally, this is a ptr to // an ACTION array element that was allocated by the caller // using a MAPIAllocateMore() that referenced the parent // ACTIONS structure. // // RETURNS: NOERROR if successful; // E_INVALIDARG if bad input; // E_OUTOFMEMORY if out of memory; // E_FAIL otherwise. //----------------------------------------------------------------------------- STDAPI HrStringToAction( // RETURNS: HRESULT IN LPMAPISESSION lpSession, // ptr to MAPI session IN LPMAPIFOLDER lpFolder, // ptr to MAPI folder IN LPSTR lpszString, // string ptr IN LPVOID lpObject, // ptr to existing MAPI buf IN OUT LPACTION lpAction // ACTION ptr ); // $--HrStringToRestriction---------------------------------------------------- // // DESCRIPTION: Generate an SRestriction structure that describes the // restriction condition provided in *lpszString. // // INPUT: // // [lpszString] -- Condition string specifying restriction to be generated. // [lpObject] -- Ptr to an existing MAPI buffer allocated by // MAPIAllocateBuffer(), or NULL if the returned structure // is to be allocated using MAPIAllocateBuffer(). // // OUTPUT: // // [lppRestriction] -- Ptr to ptr that will be set to point at generated // restriction on successful return. // // RETURNS: NOERROR if successful; // E_INVALIDARG if bad input; // E_FAIL otherwise. // // Conditional expression grammar used for HrStringToRestriction() // lpszString parameter: // // Condition ::= SimpleCondition | // Condition "|" Condition | // Condition "&" Condition | // "(" Condition ")" | // "!" Condition // // "|" is the logical OR operator. // "&" is the logical AND operator. // "!" is the logical NOT operator. // // Conditional expressions are evaluated from left to right with "|" and "&" // having equal precedence. "!" is a unary operator that applies to the operand // to its immediate right. // // SimpleCondition ::= BooleanCondition | // NumericCondition | // StringCondition | // TimeCondition // // BooleanCondition ::= BoolTag "=" BooleanLiteral // // NumericCondition ::= NumericTag "=" NumericLiteral | // NumericTag "#" NumericLiteral | // NumericTag ">" NumericLiteral | // NumericTag "<" NumericLiteral // // The meaning of the NumericCondition operators should be evident. // // StringCondition ::= StringTag "=" StringLiteral | // StringTag "#" StringLiteral | // StringTag "}" StringLiteral // // "=" is the equality operator. // "#" is the inequality operator. // "}" is the contains operator (a "}" b means a contains b). // // TimeCondition ::= TimeTag "=" TimeLiteral | // TimeTag "#" TimeLiteral | // TimeTag ">" TimeLiteral | // TimeTag "<" TimeLiteral // // Note that time literals have a resolution of 1 second, so equality and // inequality may not be the best conditional tests. // // BoolTag ::= PT_xxx for a property with a boolean (PT_BOOLEAN) value | // "[B" HexNumber "]" // // NumericTag ::= PR_xxxx for a property with a numeric (PT_LONG) value | // "[N" HexNumber "]" // // StringTag ::= PR_xxxx for a property with a string // (PT_STRING8 or PT_UNICODE) value | // "[S" HexNumber "]" // // TimeTag ::= PR_xxxx for a property with a time (PT_SYSTIME) value | // "[T" HexNumber "]" // // BooleanLiteral ::= "0" | // "1" // // NumericLiteral ::= DecimalNumber // // StringLiteral ::= String enclosed in quotes ("xxx"). // // TimeLiteral ::= HH:MM{:SS} YYYY-MM-DD (24 hour clock, local time) // // DecimalNumber ::= DecimalDigit... | // +DecimalDigit... | // -DecimalDigit... // // HexNumber ::= HexDigit... // //----------------------------------------------------------------------------- STDAPI HrStringToRestriction( // RETURNS: HRESULT IN LPSTR lpszString, // string IN LPVOID lpObject, // ptr to existing MAPI buf OUT LPSRestriction FAR * lppRestriction // restriction buffer ptr ); #endif