208 lines
4.7 KiB
C
208 lines
4.7 KiB
C
|
/*++
|
||
|
|
||
|
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
|