|
|
/*++
Copyright (C) 1997-2001 Microsoft Corporation
Module Name:
STDPROV.H
Abstract:
Defines general purpose defines as well as some common objects that are generaly useful for all the different provider types.
History:
a-davj 27-Sep-97 Created.
--*/
#ifndef _SERVER2_H_
#define _SERVER2_H_
#define INC_OBJ 1
#define INC_LOCK 2
#define DEC_OBJ 3
#define DEC_LOCK 4
#define INIT_SIZE 20
// Used to parse all provider strings
#define MAIN_DELIM '|'
// Used to parse substrings for the registry and
// compound file providers
#define SUB_DELIM '\\'
// Used to parse substrings for the automation
#define DOT '.'
// Used to parse the PATH/CLASS token for the automation
#define DQUOTE '\"'
#define SEPARATOR ','
// Used to parse ini strings.
#define COMMA ','
// Use in dde provider strings to delimit item names
#define DELIMCHR '@'
#define DELIMSTR "@"
// Used to ignore any of the above!
#define ESC '^'
// Indicates that the dwUseOptArray value should
// be substituted
#define USE_ARRAY '#'
#define ERROR_UNKNOWN 255
#ifdef UNICODE
#define CHARTYPE VT_LPWSTR
#define CHARSIZE 2
#else
#define CHARTYPE VT_LPSTR
#define CHARSIZE 1
#endif
SAFEARRAY * OMSSafeArrayCreate(VARTYPE vt,int iNumElements); HRESULT OMSVariantChangeType(VARIANTARG * pDest, VARIANTARG *pSrc,USHORT wFlags, VARTYPE vtNew); HRESULT OMSVariantClear(VARIANTARG * pClear); int iTypeSize(VARTYPE vtTest); char * WideToNarrow(LPCWSTR); char * WideToNarrowA(LPCWSTR); // uses new instead of CoTaskMemAlloc
#define BUFF_SIZE 256
extern long lObj; extern long lLock;
//***************************************************************************
//
// CLASS NAME:
//
// CToken
//
// DESCRIPTION:
//
// The CToken holds a single token in the provider string
//
//***************************************************************************
class CToken : public CObject { private: long int iOriginalLength; long int iOptArrayIndex; TString sData; TString sFullData; CFlexArray Expressions; public: friend class CProvObj; CToken(const TCHAR * cpStart,const OLECHAR cDelim, bool bUsesEscapes); ~CToken(); TCHAR const * GetStringValue(void){return sData;}; TCHAR const * GetFullStringValue(void){return sFullData;}; long int GetOrigLength(void){return iOriginalLength;}; long int GetIntExp(int iExp,int iArray); long int iConvOprand(const TCHAR * tpCurr, int iArray, long int & dwValue); TCHAR const * GetStringExp(int iExp); long int GetNumExp(void){return Expressions.Size();}; BOOL IsExpString(int iExp); };
//***************************************************************************
//
// CLASS NAME:
//
// CProvObj
//
// DESCRIPTION:
//
// The CProvObj class holds a an array of CTokens objects which together
// contain the provider string.
//
//***************************************************************************
class CProvObj : public CObject { private: CToken * GetTokenPointer(int iToken); CFlexArray myTokens; DWORD dwStatus; TCHAR m_cDelim; void Init(const TCHAR * ProviderString,const TCHAR cDelim); bool m_bUsesEscapes; public: DWORD dwGetStatus(int iMin); CProvObj(const WCHAR * ProviderString,const TCHAR cDelim, bool bUsesEscapes); #ifndef UNICODE
CProvObj(const char * ProviderString,const TCHAR cDelim, bool bUsesEscapes); #endif
const TCHAR * sGetToken(int iToken); const TCHAR * sGetFullToken(int iToken); const TCHAR * sGetStringExp(int iToken,int iExp); long int iGetIntExp(int iToken,int iExp, int iArray); BOOL IsExpString(int iToken,int iExp); long int iGetNumExp(int iToken); long int iGetNumTokens(void) {return myTokens.Size();}; ~CProvObj(){Empty(); return;}; void Empty(); BOOL Update(WCHAR * pwcProvider);
};
//***************************************************************************
//
// CLASS NAME:
//
// CEntry and CHandleCache
//
// DESCRIPTION:
//
// The CEntry and CHandleCache objects provide an way
// to cache handles and the path strings associated
// with them.
//
//***************************************************************************
class CEntry : public CObject { public: CEntry(); ~CEntry(); TString sPath; HANDLE hHandle; }; class CHandleCache : public CObject { public: ~CHandleCache(); BOOL IsRemote(void){return bRemote;}; void SetRemote(BOOL bSet){bRemote = bSet;}; long int lAddToList(const TCHAR * pAdd, HANDLE hAdd); long int lGetNumEntries(void){return List.Size();}; long int lGetNumMatch(int iStart,int iTokenStart, CProvObj & Path); void Delete(long int lStart); HANDLE hGetHandle(long int lIndex); const TCHAR * sGetString(long int lIndex); private: CFlexArray List; BOOL bRemote; };
#endif
|